Oui dsl et merci pour tout ce que tu as fait!!!
Et je me suis trompé dsl, je voulais mettre quand je change plusieurs fois l'ordre des numéros que le tri ne fonctionne plus.
Oui dsl et merci pour tout ce que tu as fait!!!
Et je me suis trompé dsl, je voulais mettre quand je change plusieurs fois l'ordre des numéros que le tri ne fonctionne plus.
il est normal que tu aies des bug, ton fichier n'a plus la même configuration qu'au départ, tu allais jusqu'à la colonne "J", maintenant c'est la colonne "I".
d'après ton dernier fichier, voici ce que tu dois écrire en module1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Option Explicit Dim Dcol As Long, Dcel As Range, i As Long, Tb() Dim x As Long
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Sub tri_ss_gr_Click() 'voir le nom du bouton Application.ScreenUpdating = False etablir Application.ScreenUpdating = True End Subje ne t'envoies pas de fichier pour l'instant car je veux comprendre ce que tu veux comme tri avec ce genre de code
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
49
50
51
52 Sub etablir() Dim A_trier As Range, ListeNoms As Object, Nom As String, Ingd As String Nom = "" Set ListeNoms = CreateObject("System.Collections.ArrayList") ' un "Arraylist pour trier plus facilement en bas du module ReDim Tb(1 To 1) 'j'initialise une variable tableau x = 0 Dcol = Cells(5, Columns.Count).End(xlToLeft).Column ' on cherche la dernière colonne Ingd = Cells(5, Dcol) Set Dcel = Cells(Rows.Count, Dcol).End(xlUp) 'et la dernière cellule dans cette colonne For i = 5 To Dcel.Row 'on boucle sur cette colonne If Cells(i, Dcol).Value = Ingd Then 'on vérifie la cellule x = x + 1 'si vérifié, on incrémente x ReDim Preserve Tb(1 To x) 'on redimensionne le tableau Tb(x) = Cells(i, Dcol).Address 'et on donne l'adresse à l'élément du tableau End If Next i For i = 1 To UBound(Tb) - 1 'on boucle sur le tableau Set A_trier = Range(Range(Tb(i))(2, -Dcol + 2), Range(Tb(i + 1))(0, 1)) 'plage qui sera triée tri A_trier, Range(Tb(i))(2, 1) 'on va sur la procédure tri Nom = Split(Range(Tb(i))(1, -Dcol + 3), " ")(1) 'nom représente le mot après "Marque" ActiveWorkbook.Names.Add Name:=Nom, RefersTo:= _ Range(Range(Tb(i))(1, -Dcol + 2), Range(Tb(i + 1))(0, 1)) 'on définit un nom pour la plage triée ListeNoms.Add Nom 'on ajoute ce nom à une "ArrayList" Next i 'ci-dessous pour le dernier groupe Set A_trier = Range(Range(Tb(UBound(Tb)))(2, -Dcol + 2), Dcel) tri A_trier, Range(Tb(UBound(Tb)))(2, 1) Nom = Split(Range(Tb(UBound(Tb)))(1, -Dcol + 3), " ")(1) ListeNoms.Add Nom ActiveWorkbook.Names.Add Name:=Nom, RefersTo:= _ Range(Range(Tb(UBound(Tb)))(1, -Dcol + 2), Dcel) '--------------------------------------------------------------- Range(ListeNoms(0)).Cut Destination:=Range("J5") 'on déplace la 1ère plage (1er bloc) à droite de la dernière colonne 'et les autres au travers d'une boucle For i = 1 To ListeNoms.Count - 1 Set Dcel = Cells(Rows.Count, Dcol * 2).End(xlUp)(2, -Dcol + 2) Range(ListeNoms(i)).Cut Destination:=Dcel Next i '------------------------------------------------------------- ListeNoms.Sort 'on trie les noms des blocs Range(ListeNoms(0)).Cut Destination:=Range("A5") 'on remet le 1er bloc au début 'et les autres au travers d'une boucle For i = 1 To ListeNoms.Count - 1 Set Dcel = Cells(Rows.Count, Dcol).End(xlUp)(2, -Dcol + 2) Range(ListeNoms(i)).Cut Destination:=Dcel Next i End Sub Private Sub tri(laplage As Range, lacel As Range) laplage.Sort Key1:=lacel, Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom End Subdéjà, eviter les "Select", ensuite à quoi sert de trier sur "F5" si tu recommences avec "A5"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub Tri230() Rows("5:50").Select Selection.Sort Key1:=Range("F5"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Selection.Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Range("A1").Select End Sub
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sur :resolu: si votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Ok.En fait j'ai simplifié le fichier à 5 marques mais j'ai plus de 50 marques.Voila comment je procède.Avant d'affecter les numéros en colonne A ,je recherche toutes les références que je dois ordonner (pas toutes).Car il s'agit d'une feuille standard avec tous les marques.Et le tri croissant par code article me permet de trouver plus rapidement mes références pour leur affecter un numéro.
1ère chose :
si tu es amené à changer le nombre de colonnes dans ton tableau, remplaces cette ligne de mon codepar celle-ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part Range(ListeNoms(0)).Cut Destination:=Range("J5") 'on déplace la 1ère plage (1er bloc) à droite de la dernière colonne2ème chose : j'espère que tu as vu pourquoi j'ai ajouté une variable pour ces lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part Range(ListeNoms(0)).Cut Destination:=Cells(5, Dcol + 1) 'on déplace la 1ère plage (1er bloc) à droite de la dernière colonne3ème chose : je ne comprends pas tes explications pour les tris que j'estime alambiqués mais ça reste ton problème car non prévu dans la demande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ...... Ingd = Cells(5, Dcol)...... If Cells(i, Dcol).Value = Ingd Then 'on vérifie la cellule
dis-moi au moins si ma dernière version fonctionne
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sur :resolu: si votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
J'ai mis le tri en colonne F,uniquement quand la colonne A est vide.Imaginons que j'affecte que 2 numéros (exemple 1 : en colonne A pour la marque Leclerc et 2 pour la marque Carrefour) et rien en colonne A sur les autres marques.En faisant mon tri,il mettra en 1 la marque Leclerc et en 2 la marque Carrefour.Les autres marques ayant aucun numéro affectées en colonne A seront triées par tri croissant en fonction de leur code article en colonne f.
J'ai essayé ton code.Il trie bien les numéros les lignes auxquelles j'ai affecté un numéro.Mais pas les autres.Peux tu m'envoyer le fichier stp si ça fonctionne chez toi.
Je suis désolé si je suis pas clair.
Partager