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
    Next

Lorsque 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.

15exemple.xlsm (17.68 Ko)

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
  Next

Bonjour !

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

Rechercher des sujets similaires à "boucle step"