Incrémentaion variable VBA

Résolu
Bonjour,

Mon problème est le suivant :

Dans ma feuille (Donnees) et la colonne (K) j'ai plusieurs données textes.
Je veux que mon programme séléctionne uniquement les lignes où on trouve "assemblage - soudure" dans la colonne (K).
Puis que ces lignes soient copiées dans une autre feuille nommée (Charge Assemblage).

Le code que j'ai écrit si dessous séléctionne bien la première ligne où on trouve "assemblage - soudure" dans la colonne (K).
Comment dois-je incrémenter ma variable "assemblage" afin qu'il passe à la deuxième puis la troisième... jusqu'à la dernière ?

Merci pour votre aide

    donnee = "assemblage - soudure"
                        
    Do

        Sheets("Donnees").Select
        assemblage = Columns(11).Find(What:=donnee, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Row
        Rows(assemblage).Select
        Selection.Copy

        Sheets("Charge Assemblage").Select
        v_dligne = Range("$A$65536").End(xlUp).Address
        Range(v_dligne).Offset(1, 0).Select
        ActiveSheet.Paste

        Sheets("Donnees").Select

    Loop Until v_derniere_ligne = Range("$K$65536").End(xlUp).Address

8 réponses

  1. Bonjour a vous tous

    une autre facon de voir

    Code a mettre dans un module

    Sub Recherche_Copie()
      Dim Col_K As Range
      Dim DerligK As Integer, DerligA As Integer, Lig As Integer, Iter As Long
      Dim donnee, Nb_Tr As Long
      
      donnee = "assemblage - soudure"
    
      Application.ScreenUpdating = False
      With Worksheets("Donnees")
        'Recherche derniere ligne colonne K
        DerligK = .Columns("K").Find("*", , , , , xlPrevious).Row
        Set Col_K = .Range("K1:K" & DerligK)
        'Pour diminuer le temps de recherche
        Nb_Tr = Application.CountIf(Col_K, donnee)
        If Nb_Tr > 0 Then
          Lig = 1
          For Iter = 1 To Nb_Tr
            'Recherche de la position pour copier la ligne
            'xlWhole recherche une valeur exacte,
            Lig = .Columns("K").Find(donnee, .Cells(Lig, "K"), , xlWhole).Row
            'Ecriture ligne(s)
            With Worksheets("Charge Assemblage")
              'Recherche derniere ligne colonne A
              DerligA = .Range("$A$65536").End(xlUp).Row
              'copie de la ligne
              Worksheets("Donnees").Rows(Lig).Copy .Range("A" & DerligA + 1)
            End With
          Next Iter
        End If
      End With
      
      Application.ScreenUpdating = False
    End Sub
    


    Bonne suite
    1
    1. assemblage = assemblage +1
      ?
      0
      1. Déjà essayé mais il me prend la ligne juste en dessous et non pas la prochaine ou c'est écrit "assemblage - soudure" !
        0
        1. je ne me souvient plus très bien du vba mais
          for each
          marche?

          du genre :

           FOR EACH "assemblage - soudure" IN Sheets("Charge Assemblage")
          
          
          
                  Sheets("Donnees").Select
                  assemblage = Columns(11).Find(What:=donnee, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Row
                  Rows(assemblage).Select
                  Selection.Copy
          
                  Sheets("Charge Assemblage").Select
                  v_dligne = Range("$A$65536").End(xlUp).Address
                  Range(v_dligne).Offset(1, 0).Select
                  ActiveSheet.Paste
          
                  Sheets("Donnees").Select
          
          
          NEXT 
          0
          1. Voici ce que j'ai fait mais ca ne fonctionne pas :

                donnee = "assemblage - soudure"
                
                For Each donnee In Sheets("Donnees")
                                     
                    While ActiveCell.Value <> ""
            
                        Sheets("Donnees").Select
                        assemblage = Columns(11).Find(What:=donnee, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Row
                        Rows(assemblage).Select
                        Selection.Copy
            
                        Sheets("Charge Assemblage").Select
                        v_dligne = Range("$A$65536").End(xlUp).Address
                        Range(v_dligne).Offset(1, 0).Select
                        ActiveSheet.Paste
            
                    Wend
                
                Next
            0
            1. Il beug dès la ligne :

              For Each donnee In Sheets("Donnees")
              0
              1. essais ça:
                Dim c As Variant
                For Each c In Range("")  <- met les coordonnée de ta plage de valeur
                    if c.value="assemblage - soudure" then 
                        Sheets("Donnees").Select
                            assemblage = Columns(11).Find(What:=donnee, LookIn:=xlFormulas,      
                            LookAt:=xlPart, SearchOrder:=xlByColumns).Row
                            Rows(assemblage).Select
                            Selection.Copy
                
                            Sheets("Charge Assemblage").Select
                            v_dligne = Range("$A$65536").End(xlUp).Address
                            Range(v_dligne).Offset(1, 0).Select
                            ActiveSheet.Paste
                
                    end if
                Next c
                0
                1. Merci à vous deux ;) !!!

                  Ca fonctionne avec la solution de f894009

                  Merci encore
                  0