Incrémentaion variable VBA

Résolu/Fermé
miss_tik76 - 13 sept. 2012 à 14:52
Miss_tik76 Messages postés 26 Date d'inscription dimanche 3 août 2008 Statut Membre Dernière intervention 23 janvier 2014 - 13 sept. 2012 à 16:51
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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
13 sept. 2012 à 16:45
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
borisdu Messages postés 1824 Date d'inscription samedi 24 décembre 2005 Statut Membre Dernière intervention 27 octobre 2014 228
13 sept. 2012 à 14:59
assemblage = assemblage +1
?
0
Miss_tik76 Messages postés 26 Date d'inscription dimanche 3 août 2008 Statut Membre Dernière intervention 23 janvier 2014 1
13 sept. 2012 à 15:04
Déjà essayé mais il me prend la ligne juste en dessous et non pas la prochaine ou c'est écrit "assemblage - soudure" !
0
borisdu Messages postés 1824 Date d'inscription samedi 24 décembre 2005 Statut Membre Dernière intervention 27 octobre 2014 228
13 sept. 2012 à 15:39
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Miss_tik76 Messages postés 26 Date d'inscription dimanche 3 août 2008 Statut Membre Dernière intervention 23 janvier 2014 1
13 sept. 2012 à 15:48
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
Miss_tik76 Messages postés 26 Date d'inscription dimanche 3 août 2008 Statut Membre Dernière intervention 23 janvier 2014 1
13 sept. 2012 à 15:49
Il beug dès la ligne :

For Each donnee In Sheets("Donnees")
0
borisdu Messages postés 1824 Date d'inscription samedi 24 décembre 2005 Statut Membre Dernière intervention 27 octobre 2014 228
13 sept. 2012 à 16:14
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
Miss_tik76 Messages postés 26 Date d'inscription dimanche 3 août 2008 Statut Membre Dernière intervention 23 janvier 2014 1
13 sept. 2012 à 16:51
Merci à vous deux ;) !!!

Ca fonctionne avec la solution de f894009

Merci encore
0