[Débutant] Méthode de double triage (VBA).

  • Initiateur de la discussion Initiateur de la discussion Vich
  • 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 !

Vich

XLDnaute Nouveau
Bonjour,

Je suis débutant en VBA même si je commence à toucher un peu vu que je fais que ça depuis 2 semaine mais j'ai besoin d'aide sur un point de mon programme.

J'ai une feuille test pour une macro de triage. Que voici : Regarde la pièce jointe Test méthode tri tete par refconnect.xlsx

C'est une feuille créée par une autre macro et donc le premier tri sur les refconnecteur est fais via macro.

J'aimerais trier chaque refconnecteur (18 0229 33, 45 1387 00, 45 5091 00 ect....) par la colonne TETE A de A à Z.

J'ai pensé à utiliser une feuille annexe de copier coller chaque ligne de chaque refconnecteur de les trier dans la feuille annexe et de les coller dans la première feuille.

Le code donne ceci :
Code:
Sub Test()
    'Méthode qui trie les TETE A de A à Z pour chaque connecteur
    'Calcul de nombre de lignes
    Dim NbCells As Integer
    NbCells = Range("J1").End(xlDown).Row
    'Variable qui définie la valeur précédente
    Dim RefConnectPrec As String
    RefConnectPrec = Range("J2")
    'Variable qui définie la première ligne du connecteur
    Dim Marqueur1 As Integer
    Marqueur1 = 2
    
    'Balayage de la colonne RefConnecteur
    For I = 2 To NbCells
    'Si la valeur de la case est différente de la valeur précédente alors
        If Range("J" & I).Value <> RefConnectPrec Then
            Rows(Marqueur1 & ":" & I).Select
            Selection.Copy
            Sheets.Add After:=Sheets(Sheets.Count)
            Sheets(3).Select
            Range("A1").Select
            ActiveSheet.Paste
            'Apllication du filtre sur TETE A de A à Z
            Application.CutCopyMode = False
            Selection.AutoFilter
            ActiveWorkbook.Worksheets(3).AutoFilter.Sort.SortFields.Clear
            ActiveWorkbook.Worksheets(3).AutoFilter.Sort.SortFields.Add Key:=Range _
                ("B1:B1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                xlSortNormal
            With ActiveWorkbook.Worksheets(3).AutoFilter.Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            'Compte le nombre de lignes sur la feuille Echange
            Dim NbCellsEchange As Integer
            NbCells = Range("J1").End(xlDown).Row
            Rows("1:" & NbCellsEchange).Select
            Selection.Copy
            Sheet(2).Select
            Rows(Marqueur1 & ":" & I).Select
            Selection.Paste
            'Redéfinie RefConnecPrec pour la prochaine boucle
            RefConnectPrec = Range("J:" & I)
        End If
        I = I + 1
    Next I
End Sub

Je sais, il n'est pas optimisé est bien sur, n'est pas fonctionnel et c'est pout cela que je demande votre aide car étant débutant j'ai surement des problèmes de synthaxe.

Merci d'avance, Vich.
 

Pièces jointes

Re : [Débutant] Méthode de double triage (VBA).

Bonjour,

Travaillant sur Excel 2002/2003, difficile d'ouvrir ton fichier mais ...

Tu as pensé à utiliser l'enregistreur de macro pour enregistrer le tri façon Excel ?

Tri sur 3 critères, croissant ou décroissant, il y a de quoi faire avec ça.

Cordialement,
Orodreth
 
Re : [Débutant] Méthode de double triage (VBA).

Je viens de relire ta macro, tu veux faire quoi exactement ?

Tu parles de trier (ordonner les données dans un ordre logique), mais ta macro utilise les filtres (réduire le volume de données sur des critères définies).

Un code de tri, ce serait plutôt

Code:
   'On trie la plage
    Range_ATrier.Sort Key1:=Range("C5"), Order1:=xlAscending, _
                      Key2:=Range("D5"), Order2:=xlAscending, _
                      Key3:=Range("B5"), Order3:=xlAscending, _
                      Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
                        xlSortNormal
 
Re : [Débutant] Méthode de double triage (VBA).

Ma macro utilise la fonction trier, j'en suis sur.

Ce que tu pense voir un filtre est surement l'application d'auto-filtre sur toute la ligne A lors de l'enregistrement de la macro, je pense.
 
Dernière édition:
Re : [Débutant] Méthode de double triage (VBA).

J'ai réglé le problème par moi-même en procédant autrement.

Code:
    Dim NbCells As Double
    NbCells = Application.WorksheetFunction.CountA(Feuil1.Range("A:A"))
    
    Range("A2:W" & NbCells).Select
    ActiveWorkbook.Worksheets("PREPARATION TETE A").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("PREPARATION TETE A").Sort.SortFields.Add Key:=Range("J2:J" & NbCells) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("PREPARATION TETE A").Sort.SortFields.Add Key:=Range("B2:B" & NbCells) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("PREPARATION TETE A").Sort
        .SetRange Range("A2:W" & NbCells)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Voilà, on applique un Tri complexe fais via l'enregistreur de macro et on l'arrange à sa guise.
J'aurais aimé tomber la dessus plus tôt.

Résolut.
 
- 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

Discussions similaires

Réponses
3
Affichages
518
Réponses
2
Affichages
214
Réponses
10
Affichages
455
Réponses
4
Affichages
332
Retour