IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tri alphabétique et suppression de doublons [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut Tri alphabétique et suppression de doublons
    Bonjour à la communauté,

    Voilà, j'ai plusieurs feuilles avec des données différentes mais de même nature. J'ai effectuer le "regroupement" des différentes feuilles dans une autre.

    J'ai donc une feuille avec des valeurs dans le désordre (de A2 à A25 par exemple) et certaines valeur sont en double. J'ai tenté un tri à bulle, mais il ne fonctionne pas...

    J'aimerais savoir s'il y a un moyen de trier ces cellules (de A2 à A25) tout en supprimant les doublons ? Car en plus, il y a des doublons...

    Si quelqu'un a une astuce ou un conseil, je suis preneur, car actuellement, je me noie dans un verre d'eau...

    Denis...

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour DenHen,

    Dans Excel -> Onglet Données tu trouveras deux boutons :
    1 pour le Tri et un pour la suppression des doublons.

    Donc pas besoin de VB je pense.

  3. #3
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Bonjour Anthony, et merci pour ton aide.

    Le problème est que ce tri et cette suppression de doublon sont au beau milieu de plusieurs macros utilisées par mes collègues qui n'y connaisses absolument rien à Excel...

    C'est pour cette raison que j'ai impérativement besoin de faire ces deux opérations (dans une feuille "masquée") en VBA.

    Merci encore pour cette réponse.

    Denis...

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Dans ce cas tu le fais manuellement et tu utilises Excel et l'enregistreur de macro

  5. #5
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Bon, j'ai fini par faire un tri à bulle suivi d'une gestion de doublons et ce, sur plusieurs colonnes...

    Si quelqu'un en aurait besoin, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
        IMin_Tableau = 2: ColEtat = 1
        Do While Sheets("CfgRegionEtat").Cells(1, ColEtat).Value <> ""
            IMax_Tableau = 2: IMax_Tableau = 2
            Do While Sheets("CfgRegionEtat").Cells(IMax_Tableau, ColEtat).Value <> ""
                IMax_Tableau = IMax_Tableau + 1
            Loop
            IMax_Tableau = IMax_Tableau - 1
            Inversion = True
            While Inversion = True
                Inversion = False
                For I_Test = (IMin_Tableau + 1) To IMax_Tableau
                    If Sheets("CfgRegionEtat").Cells(I_Test - 1, ColEtat) > Sheets("CfgRegionEtat").Cells(I_Test, ColEtat) Then
                        ' Echange du contenu des échelons
                        W_Long = Sheets("CfgRegionEtat").Cells(I_Test - 1, ColEtat)
                        Sheets("CfgRegionEtat").Cells(I_Test - 1, ColEtat) = Sheets("CfgRegionEtat").Cells(I_Test, ColEtat)
                        Sheets("CfgRegionEtat").Cells(I_Test, ColEtat) = W_Long
                        Inversion = True
                    End If
                Next I_Test
            Wend
            ColEtat = ColEtat + 1
        Loop
     
        LignEtat = 2: ColEtat = 1
        Do While Sheets("CfgRegionEtat").Cells(1, ColEtat).Value <> ""
            LignEtat = 2
            Do While Sheets("CfgRegionEtat").Cells(LignEtat, ColEtat).Value <> ""
                If Sheets("CfgRegionEtat").Cells(LignEtat, ColEtat).Value = Sheets("CfgRegionEtat").Cells(LignEtat + 1, ColEtat).Value Then
                    Sheets("CfgRegionEtat").Cells(LignEtat, ColEtat).Select
                    Selection.Delete Shift:=xlUp
                    LignEtat = LignEtat - 1
                End If
                LignEtat = LignEtat + 1
            Loop
            ColEtat = ColEtat + 1
        Loop

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    voici une double proposition, que j'utilise dans plusieurs projets :

    1) Une fonction pour gérer les doublons

    Elle copie une plage vers une feuille ardoise
    Effectue un removeduplicate (doublon sur la colonne 1 uniquement dans l'exemple) et la fonction retourne le Range de la feuille ardoise qui contient la liste sans doublon

    Il est assez simple de modifier les fonctionnalités pour récupérer un tableau de données plutôt qu'une plage

    Une autre méthode (pour éviter une feuille ardoise de travail) consistera à utiliser un dictionary afin de n'obtenir que les données uniques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Function SansDoublon(Plage As Range) As Range
    ' Récupération d'une plage Excel ne contenant que des valeurs sans doublon
    ' (les valeurs proviennent d'une plage "source" passée en argument de la fonction)
     
        ' utilisation de la feuille ardoise
        With FEUILLE_ARDOISE
            ' nettoyage
            .Cells.Delete
            ' copie de l'ensemble des valeurs à partir de A1
            Plage.Copy .Cells(1, 1)
            ' utilisation de la fonction excel "supprimer les doublons"
            .Cells(1, 1).CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
            ' on renvoie à la fonction la plage de la feuille ardoise qui contient les valeurs sans doublon
            Set SansDoublon = .Cells(1, 1).CurrentRegion
        End With
    End Function

    2) Tri Alphabétique

    Cet exemple est un tri de contrôle (combobox ou listbox), où on a la possibilité de trier en fonction du type de valeur.
    L'algorithme de base du tri provient de Jacques BoisGontier (méthode quick sort) qu'on trouve facilement sur son site (véritable caverne d'Ali BABA)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub TriControle(Controle As MSForms.Control, Optional DateNombre As String)
     
    ' tri de la combobox/listbox par ordre croissant
    ' fonctionne pour : DATE / CHIFFRES / AUTRES TYPES (String)
     
    ' la différence pour chaque type de données sera pilotée par les fonctions de conversion
    ' DATE : utilisation de CDate()
    ' NOMBRE : utilisation de CLng()
    ' AUTRES (texte) : pas de conversion de données
    With Controle
        Select Case DateNombre
            Case "DATE"
                For k = 0 To .ListCount - 1
                    For j = 0 To .ListCount - 1
                        If CDate(.List(k)) < CDate(.List(j)) Then
                            Chaine = .List(k)
                            .List(k) = .List(j)
                            .List(j) = CDate(Chaine)
                            Chaine = ""
                        End If
                    Next j
                Next k
            Case "NOMBRE"
                For k = 0 To .ListCount - 1
                    For j = 0 To .ListCount - 1
                        If CLng(.List(k)) < CLng(.List(j)) Then
                            Chaine = .List(k)
                            .List(k) = .List(j)
                            .List(j) = CLng(Chaine)
                            Chaine = ""
                        End If
                    Next j
                Next k
            Case Else
                For k = 0 To .ListCount - 1
                    For j = 0 To .ListCount - 1
                        If .List(k) < .List(j) Then
                            Chaine = .List(k)
                            .List(k) = .List(j)
                            .List(j) = Chaine
                            Chaine = ""
                        End If
                    Next j
                Next k
        End Select
    End With
     
    End Sub


    Ce ne sont que des exemples, à adapter au contexte du projet où il est positionné

  7. #7
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut
    Bonsoir,

    Juste pour compléter, par rapport à ton premier poste où tu disais:
    "J'aimerais savoir s'il y a un moyen de trier ces cellules (de A2 à A25) tout en supprimant les doublons ? Car en plus, il y a des doublons..."
    Voici les quelques lignes de l’enregistreur de macro que j’ai juste retoucher.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub OrdoneAlphabetEtElimineDoublon()
        Range("A2").Select
            Range(Selection, Selection.End(xlDown)).Select
            With Selection
                .RemoveDuplicates Columns:=1, Header:=xlNo
            End With
     
        Range("A2").Select
            Range(Selection, Selection.End(xlDown)).Select
                ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("Sheet1").Sort
                .SetRange Selection
                .Header = xlNo
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
    End Sub
    Si ça aide...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Recherche des doublon + tri alphabétique
    Par DenisHen dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/03/2015, 09h47
  2. [XSLT 1.0] Mélange de tri sur ID et suppression de doublons par TimeStamp
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 13/12/2011, 20h55
  3. Listes : tri, suppression des doublons,"triplons" et compte
    Par yoshik dans le forum Général Python
    Réponses: 6
    Dernier message: 06/07/2009, 23h53
  4. Suppressions de doublons et tri
    Par Premium dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/08/2006, 13h53
  5. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo