VB_ Boucle et condition

Résolu
Bonjour à tous,
Je suis débutant dans VB et ça fait quelques jours que j'essaie sans y arriver à faire tourner ce programme.
En fait, j'essaie de créer une boucle qui compare une case avec les cases d'une autre feuille et si la cdt est rencontrée alors on copie la ligne sinon, on passe à la vérification de la deuxième ligne et ainsi de suite.

Sub ts2()
Dim I As Long
Dim j As Long


With Worksheets("sheet1")

For I = 1 To .Cells(Rows.Count).End(xlUp).Row

For j = 1 To .Cells(Rows.Count).End(xlUp).Row

If Worksheets("sheet2").Range("G2") = Worksheets("sheet1").Range("B2") Then

'comment faire la boucle de comparaison avec chaque ligne du sheet1 ensuite copier pour chaque ligne sheet2 si la condition est rencontrée
 
       
          .Range("A2" & I).Copy Worksheets("sheet2").Range("A7")  'la boucle ne fonctionne pas ni copier ni coller!
       
          .Range("C2").Copy Worksheets("sheet2").Range("B7")
           
           .Range("D2").Copy Worksheets("sheet2").Range("C7")
            
            .Range("E2").Copy Worksheets("sheet2").Range("D7")
             
           .Range("F2").Copy Worksheets("sheet2").Range("E7")
            
            .Range("G2").Copy Worksheets("sheet2").Range("F7")
            
            .Range("H2").Copy Worksheets("sheet2").Range("G7")
             
             
             j = j + 1
       
 
    
End If
  
Next j
Next I
        
End With

End Sub



Configuration: Windows / Edge 90.0.818.66

4 réponses

  1. Contributeur
    bonjour,
    peut-être plutôt
    For i = 1 To Worksheets("sheet1").Cells(Rows.Count).End(xlUp).Row
        For j = 1 To Worksheets("sheet2").Cells(Rows.Count).End(xlUp).Row
            If Worksheets("sheet2").cells(j,"G") = Worksheets("sheet1").cells(i,"B") Then
    1. Merci yg_be :-)
      je n'arrive pas faire le boucle de comparaison avec copier coller dans l'autre feuille
      j'ai inséré quelques lignes en y ajoutant une boucle après else - mais j'ai tjs le même souci.
      il copie la première ligne, ça tourne et ça s'arrête.

      Merci pour le help :-).

      Sub ts2()
      Dim I As Integer
      Dim j As Integer
      Dim dt As Date
      
      dt = Worksheets("sheet2").Range("G2")
      
      With Worksheets("sheet1")
      
      For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
       
                   
      If dt = Worksheets("sheet1").Range("B2") Then
      
      'comment faire la boucle de comparaison avec chaque ligne du sheet1 ensuite copier pour chaque ligne sheet2 si la condition est rencontrée
       
             
                .Range("A2").Copy Worksheets("sheet2").Range("A7") 'la boucle ne fonctionne pas ni copier ni coller!
             
                .Range("C2").Copy Worksheets("sheet2").Range("B7")
                 
                 .Range("D2").Copy Worksheets("sheet2").Range("C7")
                  
                  .Range("E2").Copy Worksheets("sheet2").Range("D7")
                   
                 .Range("F2").Copy Worksheets("sheet2").Range("E7")
                  
                  .Range("G2").Copy Worksheets("sheet2").Range("F7")
                  
                  .Range("H2").Copy Worksheets("sheet2").Range("G7")
      
      Else
            Do
            
            j = j + 1
            
            Loop
       
      End If
        
      Next I
              
      End With
      
      End Sub
      1. Contributeur
        tu as totalement ignoré ma suggestion.
        décris plus précisément ce que tu veux faire, peut-être avec un exemple.
    2. Re-Bonjour,
      En fait, j'ai un tableau de base avec 7 colonnes dans la feuille 1 - je voudrais copier/coller les lignes dont la date corresponde p/r à la feuille 2. (voir les images ci-dessous).
      Dommage, on ne peut pas insérer le fichier excel.

      PS: j'ai vérifié ce tu m'as transmis, mais ça ne marchait pas non plus.

      Merci :-)



      1. Contributeur
        si tu veux partager un fichier, il faut le mettre à disposition sur internet (google drive, one drive, cjoint.com, ...), puis partager ici un lien vers le fichier.

        suggestion:
        Dim I As long
        Dim j As long
        Dim dt As Date
        dt = Worksheets("sheet2").Range("G2")
        j=7
        For I = 2 To Worksheets("sheet1").Range("A" & Rows.Count).End(xlUp).Row
            If dt = Worksheets("sheet1").cells(I,"B") Then
                Worksheets("sheet2").cells(j,"A")=Worksheets("sheet1").cells(I,"A")
                Worksheets("sheet2").cells(j,"B")=Worksheets("sheet1").cells(I,"C")
                Worksheets("sheet2").cells(j,"C")=Worksheets("sheet1").cells(I,"D")
                ' etc...
                j = j + 1
            End If
        Next I
    3. Re-Bonjour yg_be
      Super gentil - le programme marche :-).
      En fait, je ne pensais pas que j'étais aussi vieux ;-) - (la 50) :-).lot

      je ferais dorénavant du sport et de l'apprentissage pour vieillir moins vite :-) - un peu d'humour !

      en tout cas un très grand merci.

      Cordialement
      1. Contributeur
        je pense que l'âge n'y fait rien, il faut simplement rentrer dans la logique de l'outil.
        ne dénigre pas les plus vieux que toi, tu serais surpris si plus personne ne voulait t'aider.
        bon sport et bon apprentissage!

        tu penseras à marquer la discussion comme résolue?