Boucle For en "step by step" ?
Bonjour, bonjour !
Voilà j'ai un petit soucis avec mon code .. Je copie une cellule d'un document pour la coller dans un autre, avec comme condition une détection des cellules vides. Si cette dernière est vide alors il va coller dedans, en revanche si la cellule est pleine il passe à celle du dessous pour coller.
Voici mon morceau de code :
Windows(DOC2).Activate
ActiveSheet.Range("E10").Copy
Windows(DOC).Activate
For i = 2 To 19
If Range("e" & i).Value = "" Then
With Range("e" & i)
.PasteSpecial Paste:=xlPasteValues
.Font.Color = RGB(0, 0, 0)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Interior.Color = RGB(224, 255, 160)
End With
End If
NextLorsque j'éxecute j'ai un message d'erreur :
Le problème pointant sur ma fonction .PasteSpecial, j'ai essayé différentes manières de coller mon résultat, mais sans succès ..
Je soupçonne donc que le problème vient de ma boucle For, en effet dans mon tableur la valeur vient bien se coller, puis l'erreur surgit. Comme c'est une boucle je me demande si l'opération n'essaie pas de se répéter automatiquement, seulement lorsqu'il arrive pour la seconde fois à la ligne .PasteSpecial ce dernier ne trouve plus la cible du collage et donc me renvoi une anomalie ..
J'aimerais donc que ma boucle se stoppe une fois que les commandes ont été executées, et qu'elle attende mes instructions avant de recommencer son cycle. Enfin de compte je cherche un moyen de segmenter ma boucle For afin qu'elle se fasse étape par étape au lieu de tourner en boucle dès son éxecution.
J'ai déjà essayé en mettant un Exit For ou un GoTo juste avant mon Next, pour sortir de la boucle et ainsi ne pas la répéter. Le message d'erreur disparait mais ma valeur ne figure pas dans mon tableur ...
Si quelqu'un connait la demarche pour faire cela, vous me rendrez un énorme service !
Merci
Vbrod
P.S : Vous trouverez ci-joint un exemple de mon fichier, avec l'erreur récurrente.
Bonsoir,
je pars dans une autre direction par rapport à votre problème :
à priori ce n'est que la valeur qui compte, donc ne prenez que la valeur.
On crée une variable pour y mettre la valeur, ensuite on lance la boucle et plus de problème...
Sub Bouton1_Cliquer()
Dim i As Integer
' si ce n'est que la valeur que vous copiez alors prenez que la valeur...
'Range("h5").Copy
Dim la_Valeur As String ' par exemple
la_Valeur = Range("H5").Value
For i = 2 To 19
If Range("C" & i).Value = "" Then
With Range("C" & i)
'.PasteSpecial Paste:=xlPasteValues
.Value = la_Valeur
.Font.Color = RGB(0, 0, 0)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Interior.Color = RGB(224, 255, 160)
End With
End If
Next
End Sub@ bientôt
LouReeD
Bonjour
Sors de la boucle quand tu as trouvé une cellule vide
Windows(DOC2).Activate
ActiveSheet.Range("E10").Copy
Windows(DOC).Activate
For i = 2 To 19
If Range("e" & i).Value = "" Then
With Range("e" & i)
.PasteSpecial Paste:=xlPasteValues
.Font.Color = RGB(0, 0, 0)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Interior.Color = RGB(224, 255, 160)
End With
Exit For
End If
NextBonjour !
Merci à tout les deux, vous êtes géniaux !
En mixant vos deux solutions j'arrive à résoudre mon problème
Avec le Exit For à cet endroit je n'ai plus de soucis lorsque je remplace ma fonction PasteSpecial par la méthode de LouReeD.
En effet si je garde le PasteSpecial, l'erreur persiste.
Donc encore une fois, un grand merci à vous deux
Vbrod
Bonsoir,
ravis que cela vous plaise, et merci de votre merci
@ bientôt
LouReeD