Boucle infinie pour copier coller sur vba [Résolu]

legalize83 7 Messages postés jeudi 4 juin 2009Date d'inscription 10 juin 2009 Dernière intervention - 4 juin 2009 à 12:32 - Dernière réponse : legalize83 7 Messages postés jeudi 4 juin 2009Date d'inscription 10 juin 2009 Dernière intervention
- 6 juin 2009 à 21:51
Bonjour
.
Je souhaiterais pouvoir copier une plage de cellules qui peut être variable selon le nombre de cellules saisie vers une autre plage de cellule sur une autre feuille.
J'aimerais en plus pouvoir copier ces cellules plusieurs fois et les coller à chaque fois en dessous de la plage de cellules ou les données ont été coller lors de la première opération.
Pour cela, j'ai essayé ceci:
Sub enregistrement2 ()
Dim I As Range
    Set I = ThisWorkbook.Worksheets("COMMANDE CLIENT").Range("D6:D26")
    Dim j As Range
    Set j = ThisWorkbook.Worksheets("données commandes").Range("F3:F1000")
    If Not IsEmpty(I) Then
    I.Select
    Selection.Copy
    Range(j).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Else
    Do
    While Not IsEmpty(j)
    j.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Wend
    Loop
End sub

J'attends une réponse au plus vite merci d'avance.
Afficher la suite 

9 réponses

Répondre au sujet
cnt 219 Messages postés lundi 21 novembre 2005Date d'inscription 20 décembre 2010 Dernière intervention - 6 juin 2009 à 19:43
+3
Utile
salut
Si j'ai bien compris, voila une solution

Sub Enregistrement2()
    Dim I As Range
    Set I = ThisWorkbook.Worksheets("commande client").Range("D6:D26")
    Dim J As Range
    Set J = ThisWorkbook.Worksheets("données commandes").Range("F3:F1000")
   
    ' boucle sur chaque cellule de "I"
    For Each cI In I
        If cI.Value <> "" Then
       
            ' boucle sur chaque cellule de "J"
            For Each cJ In J
                If cJ.Value = "" Then
                    Sheets("commande client").Select
                    cI.Copy
                    Sheets(2).Select
                    Sheets("données commandes").Select
                    cJ.PasteSpecial
                    ' sortie forcée boucle sur "J"
                    Exit For
                End If
            Next
        End If
    Next
    Application.CutCopyMode = False
End Sub

CNTJC
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cnt
hellangel777 271 Messages postés jeudi 5 février 2009Date d'inscription 26 novembre 2013 Dernière intervention - 4 juin 2009 à 12:37
0
Utile
Bonjour,

Quel message d'erreur as-tu?
Ce code c'est toi qui l'a fait ou tu l'as copié quelque part?

ps : "J'attends une réponse au plus vite merci d'avance" --> Cette phrase n'est pas la bienvenue. Un simple merci va aussi vite !

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Commenter la réponse de hellangel777
legalize83 7 Messages postés jeudi 4 juin 2009Date d'inscription 10 juin 2009 Dernière intervention - 4 juin 2009 à 14:29
0
Utile
Oui, c'est ce que j'ai essayé de faire et lorsque je lance le débogage,
ça s'arrête sur:
I.Select
  il y a marqué erreur d'exécution '1004
La méthode Select de la classe range a échoué
Commenter la réponse de legalize83
cnt 219 Messages postés lundi 21 novembre 2005Date d'inscription 20 décembre 2010 Dernière intervention - 4 juin 2009 à 19:48
0
Utile
SALUT
La feuille "COMMANDE CLIENT" n'est probablement pas active
Essayes cela

    I.Copy
    Range(j).PasteSpecial Paste:=xlPasteValues,......

CNTJC
Commenter la réponse de cnt
cnt 219 Messages postés lundi 21 novembre 2005Date d'inscription 20 décembre 2010 Dernière intervention - 4 juin 2009 à 19:59
0
Utile
Plutôt ça
    Range(I).Copy
    Range(j).PasteSpecial Paste:=xlPasteValues,......
Excuses
Commenter la réponse de cnt
legalize83 7 Messages postés jeudi 4 juin 2009Date d'inscription 10 juin 2009 Dernière intervention - 5 juin 2009 à 08:48
0
Utile
Ca ne marche toujours pas .
Le messsage d'erreur suivant apparaît:
Erreur d'exécution '1004
La méthode Range de l'objet_Global a échoué
Commenter la réponse de legalize83
cnt 219 Messages postés lundi 21 novembre 2005Date d'inscription 20 décembre 2010 Dernière intervention - 5 juin 2009 à 19:31
0
Utile
Salut
Me a culpa, il faut écrire:

 If Not IsEmpty(I) Then
    Sheets("COMMANDE CLIENT").Select
    I.Copy
    Sheets("données commandes").Select
    j.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False

Pour les boucles, ça risque de tourner ad vitam aeternam (à l'infini).

CNTJC
Commenter la réponse de cnt
legalize83 7 Messages postés jeudi 4 juin 2009Date d'inscription 10 juin 2009 Dernière intervention - 6 juin 2009 à 17:14
0
Utile
Merci pour ton aide cnt, le code fonctionne et ne fait plus d'erreur:

Sub Enregistrement2()
If Range("vérif") <> 0 Then
rep = MsgBox("un ou plusieurs critères n' ont pas été respectés", vbOKOnly, "oups")
End
End If
Dim I As Range
Set I = ThisWorkbook.Worksheets("COMMANDE CLIENT").Range("D6:D26")
Dim j As Range
Set j = ThisWorkbook.Worksheets("données commandes").Range("F3:F1000")
Do
Loop While Not IsEmpty(I) And IsEmpty(j)
Sheets("commande client").Select
I.Copy
Sheets("données commandes").Select
j.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

Malheureusement, il n'effectue pas exactement ce que je souhaite.
En fait, j'aurais voulu que les cellules copiées se collent à la suite dans les cellules vides de la plage j .
Je souhaiterais donc dire par exemple:
si I <>"" alors copié
si la cellule f3 est vide alors coller
sinon
si la cellule F4 est vide alors coller
sinon
etc...
Mais je n'arrive pas à faire cela sans recopier comme un bourin la condition pour chaque cellule.
Commenter la réponse de legalize83
legalize83 7 Messages postés jeudi 4 juin 2009Date d'inscription 10 juin 2009 Dernière intervention - 6 juin 2009 à 21:51
0
Utile
Ca y'est ça marche merci beaucoup pour ton aide .
Commenter la réponse de legalize83

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.