Excel VBA selection lignes qui ont la même valeur et déplacement dans une nouvel

Messages postés
2
Date d'inscription
mardi 5 juin 2012
Statut
Membre
Dernière intervention
5 juin 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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.

exemple tableau


Numéro type référence
1234 actions 1111
1234 actions 1111
1234 Obligations 1234
1234 Obligations 1234
2222 Obligations 1234
2222 Obligations 1234
2222 Obligations 1234
3333 Obligations 1234
3333 Obligations 1234


Résulat désiré par exemple pour le numéro 1234:

Numéro type référence
1234 actions 1111
1234 actions 1111
1234 Obligations 1234
1234 Obligations 1234


Merci beaucoup de votre aide!!

4 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
2
Date d'inscription
mardi 5 juin 2012
Statut
Membre
Dernière intervention
5 juin 2012

Rebonjour
J'ai fais ce code
mais je dois toujours préciser la valeur a sélectionner , or j'aurais d'autre valeur
Sub selection()

' COPIE DES LIGNES DESIREES DANS LES FEUILLES DE CALCUL DEDIEES

Dim Rw As Range
Dim Ligne As Long
Dim derli
Dim z
Dim cell


Dim r

' Sélectionne l'ensemble des données (utile pour qu'Excel ne "réfléchisse" pas sur les 65000 lignes)

Sheets("données").Select
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select

For Each Rw In Selection.Rows
Ligne = Rw.Row



If Rw.Cells(1, 1).Value = "1234" Then

Rw.Copy Destination:=Worksheets("client2").Cells(Ligne, 1).EntireRow

End If

Next Rw


For Each Rw In Selection.Rows

Ligne = Rw.Row

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


End Sub

j'ai vraiment besoin de votre aide!!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
1)
Sheets("données").Select
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select
Selection...


!!!
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