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

Signaler
Messages postés
7
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
10 juin 2009
-
Messages postés
7
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
10 juin 2009
-
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.

9 réponses

Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

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
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
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
Messages postés
7
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
10 juin 2009

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é
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

SALUT
La feuille "COMMANDE CLIENT" n'est probablement pas active
Essayes cela

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

CNTJC
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

Plutôt ça
    Range(I).Copy
    Range(j).PasteSpecial Paste:=xlPasteValues,......
Excuses
Messages postés
7
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
10 juin 2009

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é
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

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
Messages postés
7
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
10 juin 2009

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.
Messages postés
7
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
10 juin 2009

Ca y'est ça marche merci beaucoup pour ton aide .