HELP ,problème de triage de données

  • Initiateur de la discussion Initiateur de la discussion zora178
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Z

zora178

Guest
Bonsoir,

je n'arrive pas a trouver de solution pour trier mes données par ordre alphabétique.
quelqu'un aurais une idée?
le problème c'est que le nom dans colonne A dois rester associé au données des autres colonnes.

c'est difficile a expliquer j ai joint une pièce .


merci


Regarde la pièce jointe EXEMPLE.xlsx jointe
 

Pièces jointes

Dernière modification par un modérateur:
Re : HELP ,problème de triage de données

Bonsoir Zora et bienvenue, bonsoir le forum,


Je te propose la macro ci-dessous :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl
Dim x As Integer 'déclare la variable x (incrément)

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1")
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne A
    For Each cel In .Range(.Cells(4, 1), .Cells(dl, 4)) 'boucle sur toutes les cellules de la plage A4:D & dl
        cel.Value = Trim(cel.Value) 'supprime les espaces inutiles à droite et à gauche
    Next cel 'prochaine cellule cel de la boucle
    For x = 4 To dl 'boucle des lignes 4 à dl
        'si la cellule en colonne A est vide et la cellule en colonne B n'est pas vide,
        If .Cells(x, 1).Value = "" And .Cells(x, 2).Value <> "" Then
            'récupère dans la cellule en colonne A la valeur de la cellule au dessus
            .Cells(x, 1).Value = .Cells(x - 1, 1).Value
        End If
    Next x 'prochaine ligne de la boucle
    'tri alphabétique
    .Columns("A:D").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    .Rows("2:2").Insert Shift:=xlDown 'insère une ligne
    .Rows("2:2").Insert Shift:=xlDown 'insère une ligne
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'redéfinit la dernière ligne éditée dl de la colonne A
    For x = dl To 4 Step -1 'boucle inversée des lignes dl à 4
        'condition : si la cellule en colonne A est identique à la cellule au dessus
        If .Cells(x, 1).Value = .Cells(x - 1, 1).Value Then
            .Cells(x, 1).Value = "" 'efface la cellule
        Else 'sinon
            .Rows(x).Insert Shift:=xlDown 'insère une ligne
        End If 'fin  de la condition
    Next x 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub

Le problème vient du fait que tu as des cellules polluées, apparemment vides, mais qui contiennent des espaces. Le code commence par supprimer ces espaces. Ensuite il vérifie ligne par ligne dans la colonne A si la cellule est vide et si la cellule en colonne B contient des données. Si c'est la cas, il récupère la valeur de la cellule au dessus. Tu te retrouves avec ton tableau où le nom est répété si il y a plusieurs lignes.
Puis le code fait un tri aphabétique. Cela supprime la ligne vide de séparation...
la dernière partie supprime les noms en doublons et insère une ligne pour retrouver ton tableau tel qu'au départ mais trié.

[Édition]
Bonsoir Youky (JB) on s'est croisé...
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour