Incrémentaion variable VBA

Résolu
miss_tik76 -  
Miss_tik76 Messages postés 27 Statut Membre -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  2. borisdu Messages postés 1939 Statut Membre 230
     
    assemblage = assemblage +1
    ?
    0
  3. Miss_tik76 Messages postés 27 Statut Membre 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
  4. borisdu Messages postés 1939 Statut Membre 230
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Miss_tik76 Messages postés 27 Statut Membre 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
  7. Miss_tik76 Messages postés 27 Statut Membre 1
     
    Il beug dès la ligne :

    For Each donnee In Sheets("Donnees")
    0
  8. borisdu Messages postés 1939 Statut Membre 230
     
    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
  9. Miss_tik76 Messages postés 27 Statut Membre 1
     
    Merci à vous deux ;) !!!

    Ca fonctionne avec la solution de f894009

    Merci encore
    0