Vba pour Excel macro de tri des lignes
rouzb
Messages postés
4
Statut
Membre
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,
J'ai crée une macro qui permet a partir d'une feuille utilisateur d'ajour des items. J'ai quatre types d'item :
- A
- B
- C
- D
L'item D une fois généré contient 2 sous item (que j'appellerai D1 et D2)
L'utilisateur ajoutera les items dans un ordre aléatoire. Exemple :
-C
- A
- D
. D1
. D2
- B
- B
-D
.D1
.D2
-A
Je veux donc créer une macro qui permette de trier les items une fois ajoutée dans ma feuille excel de cette facon
- A
- A
- B
- B
- C
- D
.D1
.D2
-D
.D1
.D2
Je ne peux pas utiliser le tri personnalisé d'Excel, car il me donne des résultats de type
-A
-A
-B
-B
-C
-D
-D
-D1
-D1
-D2
-D2
En gros, il ne comprend pas que D1 et D2 sont des "sous ensembles" de D. Quelqu'un a-t-i une idée de code en vba pour trier comme voulu??
Merci d'avance
J'ai crée une macro qui permet a partir d'une feuille utilisateur d'ajour des items. J'ai quatre types d'item :
- A
- B
- C
- D
L'item D une fois généré contient 2 sous item (que j'appellerai D1 et D2)
L'utilisateur ajoutera les items dans un ordre aléatoire. Exemple :
-C
- A
- D
. D1
. D2
- B
- B
-D
.D1
.D2
-A
Je veux donc créer une macro qui permette de trier les items une fois ajoutée dans ma feuille excel de cette facon
- A
- A
- B
- B
- C
- D
.D1
.D2
-D
.D1
.D2
Je ne peux pas utiliser le tri personnalisé d'Excel, car il me donne des résultats de type
-A
-A
-B
-B
-C
-D
-D
-D1
-D1
-D2
-D2
En gros, il ne comprend pas que D1 et D2 sont des "sous ensembles" de D. Quelqu'un a-t-i une idée de code en vba pour trier comme voulu??
Merci d'avance
A voir également:
- Vba pour Excel macro de tri des lignes
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment faire un tri personnalisé sur excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
6 réponses
Bonjour,
Pourrais-tu mettre un classeur sur Cjoint.com avec une feuille qui montre comment les données sont entrées et une feuille avec les données tel que tu voudrais.
A+
Pourrais-tu mettre un classeur sur Cjoint.com avec une feuille qui montre comment les données sont entrées et une feuille avec les données tel que tu voudrais.
A+
ok le voila: https://www.cjoint.com/?mvlNAwQZjc
le mieux est que tu ajoutes toi même les items aléatoirements (4 onglets). Tu verras qu'en ajoutant un item de type "Installation Kit" (quatrieme onglet), 2 (ou 3 selon que ce soit In-Roof ou On-Roof) son générés. Je voudrais qu'a la fin (par exemle en cliquant sur le bouton Finish), tous les items en rapport avec le premier onglet (tank) soient classés en premier, puis tous ceux ac l'onglet 2 (panel), etc.. Quelque chose comme ca : https://www.cjoint.com/?mvlN2AugrW
Merci d'avance
le mieux est que tu ajoutes toi même les items aléatoirements (4 onglets). Tu verras qu'en ajoutant un item de type "Installation Kit" (quatrieme onglet), 2 (ou 3 selon que ce soit In-Roof ou On-Roof) son générés. Je voudrais qu'a la fin (par exemle en cliquant sur le bouton Finish), tous les items en rapport avec le premier onglet (tank) soient classés en premier, puis tous ceux ac l'onglet 2 (panel), etc.. Quelque chose comme ca : https://www.cjoint.com/?mvlN2AugrW
Merci d'avance
Je n'ai pas encore toutes les données, si j'ai compris le début ? tu met tous les fichiers PackingChecklist sur une même feuille ? et ensuite tu trie ?
Sur ton fichier Exemple met sur la feuille 2 un exemple de la liste (non triée) que tu récupère
Sur ton fichier Exemple met sur la feuille 2 un exemple de la liste (non triée) que tu récupère
Je pense que c'est ça que tu veux...
J'ai prévu 5 sous-item maximum, ça suffit ?
Tu dit..
A+
Private Sub cbGenerateDN_Click()
Dim MaxLig As Long, Lig As Long, Col As Integer, IxLig As Integer
Application.ScreenUpdating = False
Worksheets("PackingList").Columns("A:b").Copy _
Destination:=Worksheets("Delivery Note").Columns("A:b")
Worksheets("PackingList").Columns("d").Copy _
Destination:=Worksheets("Delivery Note").Columns("c")
'Met les sous-item sur la même ligne
With Sheets("Delivery Note")
.Select
For Lig = 2 To .Range("B65536").End(xlUp).Row
If .Cells(Lig, 2) = "" Then Exit For
If .Cells(Lig, 1) = "" Then
.Cells(Lig, 2).Copy .Cells(Lig - 1, Col)
.Cells(Lig, 3).Copy .Cells(Lig - 1, Col + 1)
.Rows(Lig).Delete
Col = Col + 2: Lig = Lig - 1
Else
Col = 4
End If
Next Lig
'Trier la liste.
.Range("B2").Select
Selection.Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Renumérote les lignes.
For Lig = 2 To .Range("B65536").End(xlUp).Row
.Cells(Lig, 1) = Lig - 1
Next Lig
'Remettre les sous-item.
Col = 4: MaxLig = .Range("D65536").End(xlUp).Row: IxLig = 1
For Lig = MaxLig To 2 Step -1
If .Cells(Lig, 4) <> "" Then
While Cells(Lig, Col) <> ""
.Rows(Lig + IxLig).Insert
Cells(Lig, Col).Copy .Cells(Lig + IxLig, 2)
Cells(Lig, Col + 1).Copy .Cells(Lig + IxLig, 3)
Col = Col + 2: IxLig = IxLig + 1
Wend
Col = 4: IxLig = 1
End If
Next Lig
MaxLig = .Range("D65536").End(xlUp).Row
.Range(Cells(1, 4), Cells(MaxLig, 8)).Clear
End With
Application.ScreenUpdating = True
End Sub
J'ai prévu 5 sous-item maximum, ça suffit ?
Tu dit..
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
salut lermitte22; merci pour ta réponse j'ai essayé ton code mais ca ne marche pas. Voilà le résultat que ca donne :
https://www.cjoint.com/?bjkbc6ATnR
Dans la feuille Packing List, tu verras l'ordre dans lequel j'ai ajouté les items, dans la feuille Delivery Note ce que ca donne quand je trie avec ton code.
Tu trouveras ici le résultat que je recherche :
https://www.cjoint.com/?bjkdfPYPLp
Merci d'avance
https://www.cjoint.com/?bjkbc6ATnR
Dans la feuille Packing List, tu verras l'ordre dans lequel j'ai ajouté les items, dans la feuille Delivery Note ce que ca donne quand je trie avec ton code.
Tu trouveras ici le résultat que je recherche :
https://www.cjoint.com/?bjkdfPYPLp
Merci d'avance