Boucle For ne s'exécute pas correctement

BobODEVIL - 15 juin 2024 à 11:43
f894009 Messages postés 17212 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 24 décembre 2024 - 16 juin 2024 à 07:50

Bonjour la communauté

J'ai créé la macro suivante

Sub CopierCollé()

Dim WS5 as WorkSheet : Dim WS6 as WorkSheet

Set WS5 = Feuil5

Set WS = Feuil6

Dim Derligne5 as long

Derligne5 = WS5.Cells(Rows.Count, 1).End(xlup).Row

For i = 2 to Derligne

If WS5.Cells(i, 1) ;value = 26 Then

WS5.Range(WS5.Cells(i,1), WS5.Cells(i,9)). Copy WS6.Cells(2,1)

End if

Next

End sub

La macro s'exécute bien. Sauf que la boucle ne colle qu'une ligne dans la Feuille WS6, là où elle devrait, selon la base de données(WS5), en coller 6.

Il se trouve que le copié coller fonctionne bien sans la boucle.

Qu'est ce qui cloche ?


Windows / Firefox 126.0

A voir également:

4 réponses

jee pee Messages postés 40587 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 décembre 2024 9 462
Modifié le 15 juin 2024 à 11:52

Bonjour,

Je ne pratique pas VB mais tu définis la variable Derligne5 et la boucke for elle utilise Derligne.


1
bobodevil Messages postés 14 Date d'inscription samedi 12 décembre 2020 Statut Membre Dernière intervention 15 juin 2024
15 juin 2024 à 12:22

Bonjour JP,

Merci ça pourrait être la réponse, mais en fait il s'agit juste d'une erreur de rédaction sur CCM.

Sur ma page Macro la procédure est correctement écrite.

0
jee pee Messages postés 40587 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 décembre 2024 9 462
15 juin 2024 à 12:34

Et dans le copy il ne devrait pas y avoir i,1 à la place de 2,1 ?


0
bobodevil Messages postés 14 Date d'inscription samedi 12 décembre 2020 Statut Membre Dernière intervention 15 juin 2024
15 juin 2024 à 14:10

Merci pour ta proposition, mais non 

"i" Scanne la première feuille WS5.

Je prévois en effet autre variable pour désigner l'emplacement final. Mais d'abord. Régler le problème de la boucle

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > bobodevil Messages postés 14 Date d'inscription samedi 12 décembre 2020 Statut Membre Dernière intervention 15 juin 2024
15 juin 2024 à 14:59

bonjour, comme chaque copie efface la copie précédente, comment sais-tu que la boucle ne fait qu'une seule copie?

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
15 juin 2024 à 15:03

As-tu vérifié la valeur de Derligne5?

cette instruction me semble incorrecte:

Derligne5 = WS5.Cells(Rows.Count, 1).End(xlup).Row

moi j'écrirais

Derligne5 = WS5.Cells(WS5.Rows.Count, 1).End(xlup).Row
0
bobodevil Messages postés 14 Date d'inscription samedi 12 décembre 2020 Statut Membre Dernière intervention 15 juin 2024
15 juin 2024 à 15:51

Derligne5 Correspond bien à la dernière ligne de la colonne des données.

Quand à  l'instruction, je l'ai testé à l'instant. C'est sans incidence sur la procédure, et çà ne change rien  au niveau du résultat

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > bobodevil Messages postés 14 Date d'inscription samedi 12 décembre 2020 Statut Membre Dernière intervention 15 juin 2024
15 juin 2024 à 18:40

comme chaque copie efface la copie précédente, comment sais-tu que la boucle ne fait qu'une seule copie?

0
f894009 Messages postés 17212 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 24 décembre 2024 1 711
Modifié le 16 juin 2024 à 07:52

Bonjour a tous

Si j'ai bien compris, copier/coller chaque ligne dont Ai=26 Feuil5 vers Feuil6

Il faut un pointeur de ligne pour Feuil6

Sub CopierCollé()
    Dim WS5 As Worksheet: Dim WS6 As Worksheet
    Dim Derligne5 As Long
    
    Set WS5 = Feuil5
    Set WS6 = Feuil6
    Derligne5 = WS5.Cells(WS5.Rows.Count, 1).End(xlUp).Row
    Rng = 2
    For i = 2 To Derligne5
        If WS5.Cells(i, 1).Value = 26 Then
            WS5.Range(WS5.Cells(i, 1), WS5.Cells(i, 9)).Copy WS6.Cells(Rng, 1)
            Rng = Rng + 1
        End If
    Next i
End Sub
0