Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sélection de lignes dans une base de données

2 réponses
Avatar
dany956
Bonjour,
Je cherche une macro qui sélectionne les lignes dont le seul point commun est le nom indiqué dans la 2ème cellule de la ligne (colonne B).
Puis copier/coller la sélection dans une autre feuille du classeur.
Cette macro doit concerner tous les noms qui sont mentionnés plus d'une fois.
Exemple de résultat :
3 lignes pour Pierre;
2 lignes pour Paul;
6 lignes pour Jacques.
Je ne souhaite pas de TCD.
Je vous remercie pour l'aide que vous pourrez m'apporter.

2 réponses

Avatar
h2so4
bonjour,

voici une macro qui fait ce que tu demandes (enfin si j'ai bien
compris)



Sub mselect()
Dim sel() As Boolean
f1 = "Sheet1": ' à modifier feuille source
f2 = "Sheet2": ' à modifier feuille destination
nbr = Evaluate("counta(" & f1 & "!B:B)")
ptr = Evaluate("counta(" & f2 & "!B:B)")
ReDim sel(nbr)
For j = 1 To nbr
If sel(j) = False Then
For i = j + 1 To nbr
If Worksheets(f1).Cells(i, 2) = Worksheets(f1).Cells(j, 2) Then
If sel(j) = False Then
Worksheets(f1).Range(j & ":" & j).Copy
ptr = ptr + 1
Worksheets(f2).Range(ptr & ":" & ptr).PasteSpecial
sel(j) = True
End If
Worksheets(f1).Range(i & ":" & i).Copy
ptr = ptr + 1
Worksheets(f2).Range(ptr & ":" & ptr).PasteSpecial
sel(i) = True
End If
Next i
End If
Next j


End Sub



dany956 used his keyboard to write :
Bonjour,
Je cherche une macro qui sélectionne les lignes dont le seul point commun est
le nom indiqué dans la 2ème cellule de la ligne (colonne B).
Puis copier/coller la sélection dans une autre feuille du classeur.
Cette macro doit concerner tous les noms qui sont mentionnés plus d'une fois.
Exemple de résultat :
3 lignes pour Pierre;
2 lignes pour Paul;
6 lignes pour Jacques.
Je ne souhaite pas de TCD.
Je vous remercie pour l'aide que vous pourrez m'apporter.



--
h2so4
ca PAN
pique DORA
.
Avatar
michdenis
Bonjour,

Avec un filtre élaboré :
les données dans l'exemple sont dans la feuil2 en colonne A1:Ax
La zone de critère pour le filtre élaboré : Feuil2:H1:H2

Le résultat est copié en feuil3 , A1
'-----------------------------------------
Sub test()
Dim Rg As Range
Application.ScreenUpdating = False
With Worksheets("Feuil2")
'Définir la plage
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
'définir une zone de critère de 2 cellules
'Les cellules de ton choix
.Range("H1") = ""
.Range("H2").Formula = "=CountIf(" & .Name & "!" & _
Rg.Address & "," & .Name & "!" & .Range("A2").Address(0, 0) & ")>1 "
End With

With Rg 'Filtre élaboré
.AdvancedFilter xlFilterCopy, _
Worksheets("Feuil2").Range("H1:H2"), _
Worksheets("Feuil3").Range("A1"), False
End With
'Trier par ordre croissant la plage de destination
With Worksheets("Feuil3").Range("A1")
.Sort Key1:=.Cells(2, 1), order1:=xlAscending, Header:=xlYes
End With
On Error Resume Next
'Afficher toutes les données
'Vide la plage de critère
with Worksheets("Feuil2")
.ShowAllData
.Range("H1:H2").clear
End with
Application.ScreenUpdating = True

End Sub
'-----------------------------------------



MichD
--------------------------------------------
"dany956" a écrit dans le message de groupe de discussion :

Bonjour,
Je cherche une macro qui sélectionne les lignes dont le seul point commun est
le nom indiqué dans la 2ème cellule de la ligne (colonne B).
Puis copier/coller la sélection dans une autre feuille du classeur.
Cette macro doit concerner tous les noms qui sont mentionnés plus d'une fois.
Exemple de résultat :
3 lignes pour Pierre;
2 lignes pour Paul;
6 lignes pour Jacques.
Je ne souhaite pas de TCD.
Je vous remercie pour l'aide que vous pourrez m'apporter.