Boucle For ne s'exécute pas correctement

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

4 réponses

  1. Modérateur

    Bonjour,

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


    1
    1. 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
  2. Modérateur

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


    0
    1. 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
    2. Contributeur
      @bobodevil

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

      0
  3. Contributeur

    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
    1. 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
    2. Contributeur
      @bobodevil

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

      0
  4. 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