Excel VBA selection lignes qui ont la même valeur et déplacement dans une nouvel
ayakasushi
Messages postés2Date d'inscriptionmardi 5 juin 2012StatutMembreDernière intervention 5 juin 2012
-
5 juin 2012 à 21:25
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
6 juin 2012 à 07:49
Bonjour,
Je désire sélectionner les lignes répondant à la même valeur (sélectionner par exemple toutes les lignes correspondant au numéro 1234 mais sans spécifier le numéro car des numéros peuvent s'ajouter au tableau à chaque fois)
Les lignes sélectionnées devront copier une nouvelle feuille.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 5 juin 2012 à 21:32
Bonjour,
Merci beaucoup de nous montrer ce que tu as au moins tenté (un bout de code).
Var pour l'instant tu ne nous parles que ce ce que tu voudrais faire, sans nous dire la difficulté éventuellement rencontrée avec la technique éventuellement "pensée" !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 5 juin 2012 à 21:34
Commence par t'intéresser à la méthode Find (ouvre ton aide VBA sur ce mot ! elle est précisément accompagnée d'un exemple "récursif")
Reviens avec le code tenté sur la base de cette étude.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
If Rw.Cells(1, 1).Value = "2222" Then
Rw.Copy Destination:=Worksheets("client1").Cells(Ligne, 1).EntireRow
End If
Next Rw
For Each Rw In Selection.Rows
Ligne = Rw.Row
If Rw.Cells(1, 1).Value = "3333" Then
Rw.Copy Destination:=Worksheets("client1").Cells(Ligne, 1).EntireRow
End If
Next Rw
' Supression des lignes vierges
Sheets("client1").Activate
With ActiveSheet.UsedRange
derli = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = False
For r = derli To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
Application.StatusBar = "- 20% - Macro en cours d'exécution, merci de patienter."
Sheets("client2").Activate
With ActiveSheet.UsedRange
derli = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = False
For r = derli To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
!!!
On ne travaille certes pas ainsi, à grands renforts de select et dee selection !
On définit une plage (celle sur laquelle on veut travailler) puis on travaille sur cette plage. ===>>
Dim toto As Range, r As Range
Set toto =Sheets("données").Range("A1:" & Cells.SpecialCells(xlLastCell).Address)
For Each r In toto.Rows
'.....
Next
2) Pour le reste : tu te simplifieras considérablement la tâche en triant d'abord sur la colonne de tes "numéros" (une boucle de parcours simple te permettra alors la suite)
Si tu ne veux pas trier, tu n'aurais alors d'autres ressources que de procéder en deux étapes :
- la première pour déterminer tous tes numéros distincts (utilisation d'une boucle alimentant une collection ou un dictionnaire, par exemple)
- la seconde pour traiter avec chaque N° distinct ainsi trouvé. Ce sera toujours plus long qu'en triant comme dit plus haut?.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ