Boucle for next avec condition

Résolu
Bonjour,

question de béotien mais je souhaite définir quelle est la ligne vide pour pouvoir y coller des données. mais j'ai un problème ... car le programme s'arrête à la fin de la boucle (soit à 100)... alors que je voudrais qu'il s'arrête dès qu'il a trouvé une ligne vide et qu'il y a collé sa ligne de données.

Sub Macro6()
'
' Macro6 Macro
'
    Sheets("r1").Select
    Range("AC4:BY4").Select
    Selection.Copy
    
' test pour déterminer la ligne vide
    Sheets("Database").Select
    
    For i = 4 To 100
        lignevide = Range("a" & i)
        ligneval = Range("a" & i).Value
        
        If ligneval = "" Then
        Range("a" & i).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Else
              
        End If
    Next i

End Sub


Pourriez-vous m'aider?

Merci

3 réponses

  1. Modérateur
    Bonjour,

    Tu peux déterminer quelle est la dernière ligne de ton tableau via l'instruction
    Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 
    


    Ton code devient ainsi :
    Sub Macro6()
    Dim Derniere_Ligne as Long
    Dim FSource as Worksheet
    Set FSource = Sheets("r1")
    Dim Fcible as Worksheet
    Set Fcible = Sheets("Database")
    
    'Copie des données
     FSource.Range("AC4:BY4").Copy
        
    ' test pour déterminer la ligne vide
    Derniere_Ligne = Fcible.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row  
    ' Coller les données
      Fcible.Range("A" & Derniere_Ligne).PasteSpecial Paste:=xlPasteValues,  _
      Operation:=xlNone, SkipBlanks :=False, Transpose:=False
    
    End Sub
    


    NB : Evites de faire des SELECT ..selection... .... ça alourdit le fonctionnement du code...Manipules plutôt les objets.

    Cordialement,
    Jordane
    1. Contributeur
      bonjour,

      il faut sortir de la boucle quand qu'il a trouvé une ligne vide et qu'il y a collé sa ligne de données.

      Exit For


      1. C'est tout à fait ça! merci beaucoup
      2. Modérateur
        @Kwame1965Et que ce passera-t-il le jour où tu auras plus de 100 lignes dans ta feuille ?
        Ta macro ne fonctionnera plus.. à moins que tu ailles modifier manuellement le nombre dans ta boucle....

        Si ton but est d'ajouter (par copier/coller) des lignes dans ta seconde feuille.... il est préférable de rechercher la dernière ligne utilisée par le code que je t'ai soumis.

        Même si la réponse données par lePivert et Crapoulou répond à ton besoin actuel... jettes tout de même un oeil à ma réponse. Ça pourrait te servir un jour...
        :-)
    2. Modérateur
      Bonjour,

      Tu peux passer par Exit For
      (Et pas besoin de Else si tu n'as pas d'instruction)

      Sub Macro6()
      '
      ' Macro6 Macro
      '
       
          Sheets("r1").Select
          Range("AC4:BY4").Select
          Selection.Copy
          
      ' test pour déterminer la ligne vide
          Sheets("Database").Select
          
          For i = 4 To 100
              lignevide = Range("a" & i)
              ligneval = Range("a" & i).Value
              
              If ligneval = "" Then
         Range("a" & i).Select
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
         :=False, Transpose:=False
              Exit For
           End If
        
          Next i
      
      End Sub