Tri de tournées de livraisons sur Excel

Bonjour à tous,

Je tiens tout d'abord à préciser que j'ai un niveau plutôt faible sur excel.

Je suis en train de créer un fichier pour mon travail.

Il comprend une requête SQL qui importe les tournées de livraisons de mes conducteurs depuis l'AS400.
Les tournées comportent des livraisons et des enlèvements.

J'ai besoin que les tournées soient triées en fonction du jour d'embauche et de l'heure d'embauche. Sauf que, comme vous pouvez le voir, mes enlèvements ne se mettent pas à la bonne heure d'embauche. Je n'ai aucun moyen de changer cela sur notre logiciel.
Donc lorsque je trie par jour d'embauche et heure d'embauche (colonne I et J), les points de livraisons se mettent en haut du planning et les enlèvements se mettent en bas de mon planning.
Lors que je trie par code tournée (colonne A), les tournées sont complètent mais pas classés dans l'ordre de départ.

Avez vous des idées ?

Merci d'avance

capturetransexdemater

bonjour,

clef 1 = colonne I

clef 2 = colonne A

clef 3 = colonne J

c'est un pari sans fichier ...

Bonjour BsAlv,

Merci pour ton retour. Ca coince dans ce sens là.

Je joins le fichier.

bonjour, un essai

Sub Teste()
     Dim c

     With ActiveSheet
          Set c = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)).Resize(, 23)     'la plage
          c.RemoveSubtotal

          With .Sort
               With .SortFields
                    .Clear
                    .Add2 Key:=c.Columns("I"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche", DataOption:=xlSortNormal
                    .Add2 Key:=c.Columns("A"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                    .Add2 Key:=c.Columns("J"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
               End With
               .SetRange c
               .Header = xlYes
               .MatchCase = False
               .Orientation = xlTopToBottom
               .SortMethod = xlPinYin
               .Apply
          End With

          c.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
     End With

End Sub

Bonjour,

Ca ne fonctionne pas à partir de :

.Add2 Key:=c.Columns("I"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche", DataOption:=xlSortNormal

Ca ne fonctionne pas à partir de :

bonjour,

ca ne fonctionne pas dans quelle feuille ? je l'ai fait dans 5 feuilles type "jj-mm-aa" sans problème.

Bonjour,

Je l'ai fait sur l'onglet "20-10-22".

capture1 capture2

bonjour,

quelle est votre version Excel ?

J'espère que ceci fonctionne, cette macro utilise la colonne AA:AB, donc celles sont toujours vides ? La 2ième macro boucle toutes les feuilles

Si on trie de telle manière, est-ce que les données sont bien triées ?

Sub Teste()
     Dim c

     With ActiveSheet
          Set c = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)).Resize(, 23)     'la plage
          c.RemoveSubtotal     'no subtotal
          With c.Resize(, 27)     'agrandir la plage, colonne AA = colonne auxiliaire
               .Parent.Range("AB1").Resize(7).Value = Application.Transpose(Split("lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche", ","))
               .Offset(, 26).Resize(, 1).FormulaR1C1 = "=IFERROR(MATCH(RC[-18],R1C28:R7C28,0),8) & ""|"" & RIGHT(REPT("" "",5)&RC[-26],5)& ""|"" & RIGHT(REPT("" "",5)&RC[-17],5)"     'ajouter formule pour créer une série à sorter
               .Sort .Cells(1, 27), xlAscending, Header:=xlYes     'sorter
               .Offset(, 26).Resize(, 2).EntireColumn.ClearContents     'RAZ les 2 colonnes auxiliare
          End With
          Application.DisplayAlerts = False
          If c.Rows.Count > 1 Then c.Offset(1).Resize(c.Rows.Count - 1).Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
          Application.DisplayAlerts = True
     End With

End Sub

Sub Mon_Loop()
     Dim sh
     For Each sh In ThisWorkbook.Worksheets     'boucle les feuilles
          If sh.Name Like "##-##-##" Then     'celles nommées comme une date
               sh.Activate     'activate
               DoEvents
               Teste     'appelez cette macro
          End If
     Next
End Sub

Bonjour,

Ma version d'excel est de 2013.

Du coup, j'ai trouvé une solution.

J'ai fait une formule SI pour remettre l'heure de mes enlèvements à l'heure de la tournée.

J'ai crée une colonne qui affecte un numéro de priorité en fonction de l'heure de la tournée.

Puis j'ai filtré par mon code tournée puis ma prio.

Merci pour votre aide !

bonjour,

2013 ne connait pas cette manière de triage avec add2 ... ! Mon dernier poste le fait d'une manière que excel2013 comprend, donc vous pouvez utiliser celui, mais comme vous avez trouvé une solution, ce n'est plus nécessaire.

Pouvez-vous mettre votre version excel dans votre profil, cela sera plus faciler à vous aider dans le future.

Rechercher des sujets similaires à "tri tournees livraisons"