Boucle for next avec condition

Résolu/Fermé
Kwame1965 Messages postés 2 Date d'inscription mardi 6 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015 - Modifié par crapoulou le 6/01/2015 à 16:44
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 6 janv. 2015 à 17:20
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
A voir également:

3 réponses

crapoulou Messages postés 28158 Date d'inscription mercredi 28 novembre 2007 Statut Modérateur, Contributeur sécurité Dernière intervention 16 avril 2024 7 990
Modifié par crapoulou le 6/01/2015 à 16:50
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
6 janv. 2015 à 16:50
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


0
Kwame1965 Messages postés 2 Date d'inscription mardi 6 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015
6 janv. 2015 à 17:14
C'est tout à fait ça! merci beaucoup
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > Kwame1965 Messages postés 2 Date d'inscription mardi 6 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015
6 janv. 2015 à 17:20
Et 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...
:-)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié par jordane45 le 6/01/2015 à 17:16
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
0