XL pour MAC [RESOLU] Trier par ordre alphabétique avec des blocs de lignes

Juana

XLDnaute Nouveau
Bonjour,

je suis à la recherche d'une solution afin d'effectuer un tri sur un tableau excel que j'utilise tous les jours. Je travail sur Mac avec Excel 2011.
Il s'agit d'un tableau de commandes. Les commandes sont organisées en lignes et sont séparées par une ligne vide colorée. Si 2 produits différents sont commandés dans la même commande alors 2 lignes se suivent (sans être séparées par la ligne vide colorée). Il peut y avoir 2 produits différents comme 3, 4, 10... Il n'y a pas de règle là dessus.

Mon objectif est de pouvoir trier ces commandes pour préparer les commandes physiquement, un tri par ordre alphabétique des produits serait déjà super. Le but étant que les commandes ayant plusieurs produits (donc plusieurs lignes) restent en bloc par commande, et que les produits ne soient pas dispersés. Les lignes de commande avec un seul produit serait triées normalement et les commandes avec plusieurs lignes pourraient être triées sur la base de la première ligne.

J'utilise déjà pas mal de macros pour faire d'autres tris et préparation de fichiers, mais sur cette fonctionnalité là je coince, alors aujourd'hui j'extrais les commandes sur plusieurs lignes manuellement pour les remettre une fois que j'ai tout trié, mais c'est une grosse perte de temps...

J'ai crée un exemple de fichier pour que vous puissiez voir de quoi il s'agit exactement.

Je vous remercie d'avance pour votre aide.

À bientôt =)
 

Pièces jointes

  • Test-tri.xlsm
    18.2 KB · Affichages: 9

Juana

XLDnaute Nouveau
Merci Ikito pour ce fichier :)

Ce n'est pas exactement ce dont j'ai besoin, en réalité les commandes doivent être triées entre elles et pas uniquement à l'intérieur de chaque bloc (même si je garde cette option que je trouve utile à rajouter).

En utilisant l'exemple du tableau que tu as travaillé (avec les lettres comme nom de produit), les lignes 16 et 17 devrait arriver juste après la ligne 11 car la première ligne de ce bloc est un "b" et que la ligne 11 est un "c". Pour l'instant entre les deux, il y a une commande avec pour première ligne un "e", cette commande devrait arriver après la commande commençant par un "b".

Houlà j'espère être assez explicite, c'est un peu compliqué à expliquer :oops:
 

Ikito

XLDnaute Occasionnel
Re,

J'ai rien compris, on recommence ? o_O

Tu veux trier selon quelle colonne ?

Edit : Je pars en week-end, tu auras ma prochaine réponse Lundi, à moins que quelqu'un trouve une solution, bon courage. ;)
 
Dernière édition:

Juana

XLDnaute Nouveau
Merci pour ces deux retours, c'est vraiment compliqué à expliquer, pourtant une fois qu'on sait, c'est tout simple, sauf à appliquer évidemment !

Exemple simplifié :

FeuilleCommande 1
EnveloppeCommande 1
CarteCommande 2
BoiteCommande 3

Mon objectif est d'avoir :

BoiteCommande 3
CarteCommande 2
FeuilleCommande 1
EnveloppeCommande 1

La commande n°3 est remontée en premier car le mot "Boite" commande par un B, puis "Carte", puis "Feuille" par ordre alphabétique.

Je pense que c'est beaucoup plus simple comme ça =)
 
Dernière édition:

zebanx

XLDnaute Accro
Bonjour à tous,

Je ne m'insère dans le fil que pour souhaiter que la requérante mette un fichier avec un tableau de restitution souhaité, complété de bulles si cela s'avère nécessaire. Inutile de tartiner... plutôt que de présenter sur votre fichier, par ailleurs bien présenté, ce que vous attendez comme résultat final.

Merci ;)

Edit : bonjour pierre-jean, messages téléscopés ;)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,


Code:
Sub TriGroupes()
  'Application.ScreenUpdating = False
  '--- tri chaque groupe
  lignedéb = 3
  NbLignes = [A65000].End(xlUp).Row
  i = lignedéb
  Do While i <= NbLignes
   Cells(i, 1).CurrentRegion.Sort Key1:=Cells(i, 1)
   i = Cells(i, 1).CurrentRegion.Rows.Count + i + 1
   If i > NbLignes Then Exit Do
  Loop
  '--- tri général
  NbCol = 12
  Columns("A:A").Offset(0, NbCol).Insert Shift:=xlToRight
  i = lignedéb
  Do While i <= [A65000].End(xlUp).Row + 1
    temp = Cells(i, 1)
    Cells(i, 1).Offset(0, NbCol) = temp
    i = i + 1
    Do While Cells(i, 1) <> "" And i <= [A65000].End(xlUp).Row
       Cells(i, 1).Offset(0, NbCol) = temp
       i = i + 1
    Loop
    Cells(i, 1).Offset(0, NbCol) = temp: i = i + 1
  Loop
  Range(Cells(lignedéb, 1), Cells([C65000].End(xlUp).Row, NbCol + 1)).Sort Key1:=Cells(lignedéb, 1).Offset(, NbCol), Order1:=xlAscending, Header:=xlNo
  [A:A].Offset(0, NbCol).Delete Shift:=xlToLeft
End Sub

Boisgontier
 

Pièces jointes

  • Copie de test-resultat.xlsm
    28.8 KB · Affichages: 11
Dernière édition:

Juana

XLDnaute Nouveau
Bonjour tout le monde,

ce matin j'ai testé le fichier de Boisgontier et magie, miracle, ça fonctionne !!! Merci beaucoup vraiment, vous êtes tous incroyables à donner votre temps et votre énergie pour aider les autres.

Merci Boisgontier, ton fichier va changer mon quotidien !
 

Discussions similaires