Ma boucle ne fonctionne pas. Et pourtant

Bonjour,

J'ai créé une double boucle qui est censée balayer toutes les lignes et les colonnes du tableau pour repérer s'il y a une activité dans le calendrier à ajouter au "planning".

Voici mon code :

Sub ajoutactivite()

ligne = Sheets("Planning").Range("C7").End(xlDown).Row
Colonne = Sheets("Planning").Range("D6").End(xlToRight).Column

ligna = Sheets("test").Range("a1").End(xlDown).Row

Sheets("Planning").Select
For c = 4 To Colonne

    For i = 7 To ligne
        If Cells(i, c) <> "" Then

        Cells(i, c).Select
        Selection.Copy
        Sheets("test").Select
        Cells(ligna + 1, 1).Select
        ActiveSheet.Paste

        ligna = ligna + 1
        End If

    Next i
Next c

End Sub

Or, quand je lance la macro, elle va bien dans la première case, copie colle là où je lui demande mais s'arrête ensuite. Elle ne balaye pas toutes les lignes et colonnes restantes.

Savez-vous pourquoi ? I me semble pourtant que ce code est correct..

Merci,

Cordialement

Stéphane

Bonjour et bienvenue,

quand on écrit ceci

ligne = Sheets("Planning").Range("C7").End(xlDown).Row
Colonne = Sheets("Planning").Range("D6").End(xlToRight).Column

il ne faut aucune cellule vierge entre les données, cla peut être une cause, c'est pour cela que l'on écrit souvent dans l'autre sens

ligne = Sheets("Planning").Range("C" & rows.count).End(xlUp).Row
Colonne = Sheets("Planning").Cells(6,columns.count).End(xlToLeft).Column

maintenant il y a peut-être autre chose, le mieux est de poster ton fichier (anonymisé, simplifié)

Bonsoir sdrihem, Steelson,

Un essai avec:

Sub ajoutactivite()

ligne = Sheets("Planning").Range("C7").End(xlDown).Row
Colonne = Sheets("Planning").Range("D6").End(xlToRight).Column

ligna = Sheets("test").Range("a1").End(xlDown).Row

For c = 4 To Colonne

    For i = 7 To ligne
    Sheets("Planning").Select '''' il faut resélectionner la feuille "Planning en traitant un nouvel item. Sinon
                                                '''' Cells(i,C) se rapporte à la cellule de la feuille active, donc la feuille "test"
        If Cells(i, c) <> "" Then

        Cells(i, c).Select
        Selection.Copy
        Sheets("test").Select
        Cells(ligna + 1, 1).Select
        ActiveSheet.Paste

        ligna = ligna + 1
        End If

    Next i
Next c

End Sub

Voir les commentaires inclus dans la macro.

En fait tu sélectionnes la feuille "planning" AVANT d'entrer dans la boucle, puis lors du premier traitement tu sélectionnes la feuille "test".

Lors du deuxieme passage ," Cells(i,C)" correspond a "sheets("test").cells(i,C)"

Après, on peut aussi ne pas sélectionner les feuilles à chaque fois.

Cordialement

Moi, je ne sais pas faire sans voir un minimum de fichier, il peut y avoir tellement d'autres causes également ... et j'ai trop vu par le passé des sujets partir en vrille par manque de fichier.

Mais bon je salue haonv qui t'aura sans doute donné le bon résultat.

Re,

@Steelson,

J'ai créer en vitesse un petit fichier pour chercher, histoire de m'occuper et parce que c'était le premier message de sdrihem .

Je suis bien incapable de corriger le moindre bout de VBA sans un bout de fichier !

@sdrihem

Lorsque l'on joint un petit fichier, on augmente fortement ses chances d'avoir une réponse.

Cordialement

@steelson, @haonv,

Merci pour vos réponses.

Effectivement, Haonv, mon code doit sélectionner la feuille "planning" dans la boucle et non pas hors de la boucle. Ca marche tout de suite mieux..

J'essaierai de mettre mes fichiers en PJ dans la mesure du possible les prochaines fois.

En vous remerciant pour vos retours,

Stéphane

Rechercher des sujets similaires à "boucle fonctionne pas pourtant"