Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 VBA créer une liste sans doublon selon conditions

jozerebel

XLDnaute Occasionnel
Bonjour à tous,

Je farfouille sans trouver chaussure à mon pied :-(

J'ai un onglet avec bcp de données et je souhaite dans une autre feuille lister sans doublon et sous conditions les données de la colonne A de la feuille 1.

Si possible en vba car le fichier est déjà très lourd…

Je vous mets un fichier exemple en Pj.

Je précise que je ne peux pas utiliser les fonctions Unique et Filtre.

Je vous remercie pour votre aide !
 

Pièces jointes

  • Xlsdl.xlsx
    411.1 KB · Affichages: 2
Solution
Bonjour Jozerebel,
Un essai en PJ avec :
VB:
Sub Liste()
    Dim T, T_out, DL, i, IndexT_out
    Application.ScreenUpdating = False
    With Sheets("bdd")
        DL = .[A65500].End(xlUp).Row
        T = .Range(.Cells(3, "A"), .Cells(DL, "E")) ' Transfert données dans array
        ReDim T_out(1 To DL)
    End With
    Cond1 = [B1]: Cond2 = [B2]: Cond3 = [B3]: Cond4 = [B4]: IndexT_out = 1
    For i = 1 To UBound(T)
        If T(i, 2) = Cond1 And T(i, 3) = Cond2 And T(i, 4) = Cond3 And T(i, 5) = Cond4 Then
            T_out(IndexT_out) = T(i, 1)
            IndexT_out = IndexT_out + 1
        End If
    Next i
    [F:F].ClearContents
    [F1].Resize(DL, 1).Value = Application.Transpose(T_out)                         ' Restitution résultat...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jozerebel,
Un essai en PJ avec :
VB:
Sub Liste()
    Dim T, T_out, DL, i, IndexT_out
    Application.ScreenUpdating = False
    With Sheets("bdd")
        DL = .[A65500].End(xlUp).Row
        T = .Range(.Cells(3, "A"), .Cells(DL, "E")) ' Transfert données dans array
        ReDim T_out(1 To DL)
    End With
    Cond1 = [B1]: Cond2 = [B2]: Cond3 = [B3]: Cond4 = [B4]: IndexT_out = 1
    For i = 1 To UBound(T)
        If T(i, 2) = Cond1 And T(i, 3) = Cond2 And T(i, 4) = Cond3 And T(i, 5) = Cond4 Then
            T_out(IndexT_out) = T(i, 1)
            IndexT_out = IndexT_out + 1
        End If
    Next i
    [F:F].ClearContents
    [F1].Resize(DL, 1).Value = Application.Transpose(T_out)                         ' Restitution résultat
    ActiveSheet.Range("$F$1:$F$" & DL).RemoveDuplicates Columns:=1, Header:=xlNo    ' Suppression doublons
End Sub
 

Pièces jointes

  • Xlsdl.xlsm
    377.1 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ou peut être plus simple avec une macro événementielle, et des listes déroulantes pour les conditions.
Il suffit de modifier une condition pour qu'automatiquement la liste soit mise à jour.
 

Pièces jointes

  • Xlsdl V2.xlsm
    377.1 KB · Affichages: 3

jozerebel

XLDnaute Occasionnel
Salut Sylvanu !

Ta première solution me convient tout à fait !

Je vais maintenant étudier ton code pour apprendre.

Pour l'évènementiel, je vais enregistrer ton fichier pour plus tard !

Je te remercie bcp !

Bonne journée à toi !
 

Discussions similaires

Réponses
12
Affichages
383
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…