XL 2019 Problème de Tri de nombres avec des points

  • Initiateur de la discussion Initiateur de la discussion Titof06
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Titof06

XLDnaute Occasionnel
Bonjour,

Je souhaite faire un tri, dans mon cas, de familles de produit, qui contient 1 ou 2 points entre les nombres.

Dans le fichier joint, J'ai la colonne "D" à trier.
Lorsque je trie, il s'affiche comme vous le voyez.
Il faudrait que je puisse le trier comme le début de la Colonne "E".

Idem avec les Colonnes "G" et "H".

En fait je cherche à faire un tri avec une priorité numérique pour chacun des nombres à gauche et après le ".".

Je vous remercie et vous souhaite une agréable journée,

Titof06
 

Pièces jointes

Hello
une proposition par Power query

sur les tableaux "Trié", clic droit/actualiser

l'idée est d'extraire les nombres placés avant et après les séparateurs "."
trier les nombres
rassembler les nombres avec le séparateurs
Bonjour vgendron,

Je vous remercie pour cette proposition qui fonctionne parfaitement.

Mes connaissances en PowerQuery ne sont pas aussi bonnes que les vôtres.

Sauriez-vous si je pourrais faire cela avec une macro en VBA, svp ?

Je vous remercie et vous souhaite une agréable journée,

Titof06
 
Hello
une proposition par Power query

sur les tableaux "Trié", clic droit/actualiser

l'idée est d'extraire les nombres placés avant et après les séparateurs "."
trier les nombres
rassembler les nombres avec le séparateurs
Salut,
j'ai inséré la valeur "1.12" en colonne D et j'ai fait actualiser,
celle-ci semble avoir été transformée en "1." en colonne Trié ?
1746003912823.png
 
Bonjour à toutes & à tous, bonjour @Titof06

Avec deux clefs de tri (formules dans Tableau Structuré)

pour 1 point :
VB:
=CNUM(STXT(C3;1;TROUVE(".";$C3)-1))*1000+CNUM(STXT($C3;TROUVE(".";$C3)+1;NBCAR($C3)))

pour 2 points :
VB:
=(STXT($F3;1;TROUVE(".";$F3;1)-1))*1000000
+(STXT($F3;TROUVE(".";$F3)+1;TROUVE(".";$F3;TROUVE(".";$F3)+1)-TROUVE(".";$F3;1)-1))*1000
+(STXT($F3;TROUVE(".";$F3;TROUVE(".";$F3)+1)+1;NBCAR($F3)))

Voir le fichier joint
PS pas vu leur réponse précédentes (pas ra(é)fraichi)
À bientôt
 

Pièces jointes

Bonjour,

Je ne sais pas si tu disposes de ces fonctions


VB:
=LET(t;FRACTIONNER.TEXTE(TABLEAU.EN.TEXTE(D2:D459);".";";";VRAI;1;"");
tt;TRIERPAR(t;CHOISIRCOLS(t;1)*1;1;CHOISIRCOLS(t;2)*1;1;SIERREUR(CHOISIRCOLS(t;3);CHOISIRCOLS(t;1))*1;1);
CHOISIRCOLS(tt;1)&"."&CHOISIRCOLS(tt;2)&SIERREUR("."&CHOISIRCOLS(tt;3);""))
 

Pièces jointes

Salut,
j'ai inséré la valeur "1.12" en colonne D et j'ai fait actualiser,
celle-ci semble avoir été transformée en "1." en colonne Trié ?
Regarde la pièce jointe 1217187
hello
oui apparemment , quand on ajoute à la main, la nouvelle entrée est directement vue comme un nombre décimal. et pas du texte comme le reste
il faut sans doute modifier la requete lorsqu'elle sépare selon le "." ??
 
Bonjour
en vba le problème c'est que par exemple 1.4 et 1.4.2 vont être analysé différemment
l'un comme un nombre et l'autre comme un texte
alors oui faire en vba ce qu'a fait @vgendron en PQ a savoir par tranche de chaine par point est possible mais ça prendrait des plombes

il y a peut être une solution
créer un tableau mask contenant les chaine converti en texte le trier avec un quicksort et en même temps que l'on deplacerait les lignes du tableau
c'est a dire par exemple
remplacer 1.1 par A.A
remplacer 1.1.2 par A.A.B
remplacer 3.5.7 par C.E.G

ect.., ect....
trier ce tableau et a chaque fois que l'on déplace une ligne dans le tableau lettre dans le quicksort, on fait le même déplacement dans le tableau original
le tout dans des variables tableaux bien entendu
 
Bonjour à toutes & à tous, bonjour @Titof06

Avec deux clefs de tri (formules dans Tableau Structuré)

pour 1 point :
VB:
=CNUM(STXT(C3;1;TROUVE(".";$C3)-1))*1000+CNUM(STXT($C3;TROUVE(".";$C3)+1;NBCAR($C3)))

pour 2 points :
VB:
=(STXT($F3;1;TROUVE(".";$F3;1)-1))*1000000
+(STXT($F3;TROUVE(".";$F3)+1;TROUVE(".";$F3;TROUVE(".";$F3)+1)-TROUVE(".";$F3;1)-1))*1000
+(STXT($F3;TROUVE(".";$F3;TROUVE(".";$F3)+1)+1;NBCAR($F3)))

Voir le fichier joint
PS pas vu leur réponse précédentes (pas ra(é)fraichi)
À bientôt
Bonjour AtTheOne,

Je vous remercie pour votre solution, mais je dois absolument garder les ".".

Je vous remercie et vous souhaite une agréable fin de journée,

Titof06
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
283
Réponses
9
Affichages
552
Retour