Trier des listes dans Excel

Résolu
plastickman Messages postés 66 Statut Membre -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,
Je n'arrive pas à résoudre un problème dans Excel.
J'ai dans une même feuille plusieurs liste dans une même colonne, A4:A48, A50:A94, A96:A140
Je voudrais tout d'abord soit masquer soit effacer les cellules vides contenues dans ces listes, puis les classer par ordre alphabétique afin d'en supprimer les doublons.
Je ne sais pas si c'est réalisable mais j'ai un un niveau trop juste en VBA pou y arriver.
Merci d'avance,

7 réponses

  1. doodoo6986
     
    la plage de données n'est pas immense moi j'effacerai les cellules vides manuellement et pour trier par ordre alphabetique, il suffit de selectionner les cellules et de cliquer sur "données" "trier"...
    0
  2. plastickman Messages postés 66 Statut Membre 6
     
    Merci pour ta solution mais ça fait tout de même 132 cellules à trier, réparties en trois listes, et j'en ai plusieurs à faire par jours.
    Je pense qu'une macro serait la bien venue ;-)
    0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Je voudrais tout d'abord soit masquer soit effacer les cellules vides contenues dans ces listes,

    Le tri de la liste les met en fin de liste.

    puis les classer par ordre alphabétique afin d'en supprimer les doublons.
    Je pense qu'une macro serait la bien venue ;-)


    Essaie de mettre celle-ci dans "thisworkbook"
    où j'ai utilisé tes paramètres qui peuvent bien sûr être modifiés A4:A48, A50:A94, A96:A140
    Private Sub Workbook_Open()
        Call Tri_Efface_doubles([A4:A48])
        Call Tri_Efface_doubles([A50:A94])
        Call Tri_Efface_doubles([A96:A140])
    End Sub
    Sub Tri_Efface_doubles(plage) ' As Range)
    Dim lig As Double   ' ligne
    Dim MJE As Boolean  ' mise à jour écran
    Dim RCL As Boolean  ' type calcul
    On Error GoTo Fin  ' Sauvegarde des paramètres actuels d'affichage et de recalcul
    If Application.ScreenUpdating Then MJE = True  ' mise à jour écran
    If Application.Calculation = xlCalculationAutomatic Then RCL = True  ' type calcul
    Application.Calculation = xlCalculationManual  ' type calcul
    Application.ScreenUpdating = False  ' mise à jour écran
    'tri plage initiale
    plage.Sort Key1:=Cells(plage.Row, plage.Column), Order1:=xlAscending, Header:=xlNo _
            , OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    For lig = plage.Row To plage.Count + plage.Row  ' boucle sur plage
        If Cells(lig + 1, plage.Column) = Cells(lig, plage.Column) Then
            Cells(lig, plage.Column) = ""   'double effacé
        End If
    Next lig 'tri plage sans doubles
    plage.Sort Key1:=Cells(plage.Row, plage.Column), Order1:=xlAscending, Header:=xlNo _
            , OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Fin:        ' paramètres initiaux
    If MJE Then Application.ScreenUpdating = True
    If RCL Then Application.Calculation = xlCalculationAutomatic
    End Sub

    Cette macro s"exécute à l'ouverture du classeur et donc tes listes sont toujours triées et sans doubles.
    0
  4. plastickman Messages postés 66 Statut Membre 6
     
    Merci beaucoup,
    En effet, j'étais loin du compte...
    Pour être franc je ne comprends pas tout...
    La notion de "thisworkbook" par exemple , je ne vois pas vraiment ce que cela veut dire.
    En fait, j'avais fais un code que je lançais à partir d'un bouton sur une autre feuille , j'aimerais garder ce fonctionnement et je n'arrive pas remplacer mon code par le tien. Qu'est ce qu'il faudrait changer pour que ça fonctionne ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    La notion de "thisworkbook" par exemple

    Cette feuille VBA est destinée aux procédures qui ont un rapport avec le classeur. Pour un peu plus de détails
    une petite explication

    En fait je t'ai fait une procédure qui fonctionne n'importe en fonction du paramètre "plage" que tu donnes.
    Donc dans la procédure de ton bouton tu places ces trois appels :
        Call Tri_Efface_doubles([A4:A48])
        Call Tri_Efface_doubles([A50:A94])
        Call Tri_Efface_doubles([A96:A140])
    

    Puis tu copies la procédure Sub Tri_Efface_doubles(plage) jusqu'à "End Sub" dans un module et cela fonctionne.
    0
  7. plastickman Messages postés 66 Statut Membre 6
     
    Ca marche parfaitement, et en plus je comprends mieux grâce au lien que tu m'as donné.
    Un très grand MERCI pour tout.
    A+

    jp
    0
  8. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Merci de ton message et très heureux de t'avoir aidé.
    0