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

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

  • Test méthode tri tete par refconnect2.xlsm
    23.1 KB · Affichages: 27

Orodreth

XLDnaute Impliqué
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
 

Orodreth

XLDnaute Impliqué
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
 

Vich

XLDnaute Nouveau
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:

Vich

XLDnaute Nouveau
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.
 

Discussions similaires

Statistiques des forums

Discussions
314 450
Messages
2 109 719
Membres
110 551
dernier inscrit
Khyolyanna