Tri A à Z - lettres & nombres

Résolu/Fermé
Averroz Messages postés 10 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 6 août 2023 - 13 déc. 2018 à 14:58
titeufdu89 Messages postés 374 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 - 27 déc. 2018 à 16:37
Bonjour à tous,

Je vais essayer de vous expliquer le plus clairement possible mon problème.
Nous avons un tarif d'un fournisseur sur excel se présentant de cette façon :

Produit / Informations / Prix / Stocks

Nous revendons sur internet, et nous avons démultiplié chaque produits de cette façon :

x1produit-a
x3produit-a
x6produit-a
x12produit-a
x18produit-a
x24produit-a

Depuis pas mal de temps, notre catalogue est un peu ( beaucoup ) en bazar..

par exemple :

x1produit-a
x18produit-b
x12produit-a
x24produit-b

etc..

Car notre tableau est rangé par marque.
Une même marque peut avoir deux ou trois produits différents, voila pourquoi c'est en bazar.

Nous avons besoin de vérifier les stocks régulièrement car cela bouge souvent.
Comment faire pour pouvoir ranger les produits de cette façon? :

x1produit-a
x3produit-a
x6produit-a
x12produit-a
x18produit-a
x24produit-a
x1produit-b
x3produit-b

etc ...

Dans l'attente de votre retour,
N'hésitez pas si vous avez des questions, j'ai essayé d'être le plus clair possible.

Merci,

Cordialement,


Configuration: Windows / Chrome 70.0.3538.110

8 réponses

JCB40 Messages postés 2926 Date d'inscription lundi 2 juillet 2018 Statut Membre Dernière intervention 4 octobre 2024 461
13 déc. 2018 à 15:02
Bonjour

Ta demande n'est pas très explicite,un extrait de ton fichier anonymé serait le bienvenu.
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com

Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse..
Cordialement
0
titeufdu89 Messages postés 374 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
13 déc. 2018 à 16:23
Bonjour,

Pas simple ta demande car toutes les infos sont dans la même cellule... aurais-tu la possibilité d'ajouter de nouvelles colonnes à ton tableau avec des formules automatiques qui pourrait scinder ton nom d'article en différente colonne puis ensuite mettre un tri sur ces nouvelles colonnes comme ça tu peux ajouter différents niveau de tri. Ces colonnes peuvent être cachées afin de ne pas te modifier l'aspect de ton tableau et serviront uniquement a actualiser le tri.
0
titeufdu89 Messages postés 374 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
13 déc. 2018 à 16:51
Voici peut être une solution :

https://www.cjoint.com/c/HLnpTxm0m4N
La formule extrait les 3 principaux éléments de ta chaine de caractère et ensuite la fonction tri fait le reste comme suit



Le premier élément est configurer pour sortir jusqu'à 3 chiffres maximum
exemple
si x12produit-b >>> la formule donnera 12 / produit / b
si x120produit-b >>> la formule donnera 120 / produit / b
si x1200produit-b >>> la formule donnera : 120 / 0produit / b

Quel est le nombre de chiffre maximum pour ce premier nombre dans ton code produit?

Jc

0
Averroz Messages postés 10 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 6 août 2023
15 déc. 2018 à 17:19
Bonjour,

Merci pour vos réponses.
Juste ici un exemple :

https://www.cjoint.com/c/HLpqs6ptw3v

Feuille 1 : tarif fournisseur
Feuille 2 : notre tarif

Merci,

Cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Raymond PENTIER Messages postés 58720 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 10 novembre 2024 17 233
16 déc. 2018 à 02:31
Bonjour Averroz.

Comme tu l'as constaté, il y a eu un choix très malheureux dans le codage de vos produits. Si son auteur avait réfléchi à la manière dont cette base allait être exploitée, il aurait choisi
produit-a-x001
produit-a-x003
produit-a-x006
produit-a-x012
produit-a-x018
produit-a-x024
produit-b-x001
produit-b-x003
et il n'y aurait aucun problème ...
Est-il possible de refaire votre codification ?
Et à quoi le x en début de vos codes ? Trouve t'on parfois une autre lettre ?
0
Raymond PENTIER Messages postés 58720 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 10 novembre 2024 17 233
16 déc. 2018 à 03:12
(suite)
en conservant votre code, il faudrait insérer une colonne en D avec la formule
=STXT([@nom];2;999)
une colonne en E avec la formule
=CNUM(STXT([@[code 1]];1;TROUVE(" ";[@[code 1]];1)))
et une colonne en f avec la formule
=STXT([@[code 1]];TROUVE(" ";[@[code 1]];1)+1;999)
ce qui donne
1 Château Barde Haut 2012 150 cl AOC St-Emilion Grand Cru Classé Rouge Vin Rouge en D,
1 en E2 et
Château Barde Haut 2012 150 cl AOC St-Emilion Grand Cru Classé Rouge Vin Rouge en F2.
On peut alors faire un tri personnalisé sur la colonne F puis sur la colonne E
0
titeufdu89 Messages postés 374 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
16 déc. 2018 à 09:12
Bonjour Averroz,

Voici une solution à tester sur ta base de produit complète :
https://www.cjoint.com/c/HLqidBMuJkN

J'ai créé des fonctions VBA qui permettent d'analyser ta chaine de caractère et d'en extraire les informations suivantes :
- conditionnement
- appellation
- millésime
- contenance

J'ai donc extrait ces 4 informations dans 4 colonnes différentes pour ensuite configurer un tri dans l'ordre de priorité suivant : appellation > millésime > contenance > conditionnement

Voici les codes des différentes fonction :
Function conditionnement(nom As String)
Start = 2
cpte = 0
Do While IsNumeric(Mid(nom, 2 + cpte, 1))
cpte = cpte + 1
Loop
conditionnement = Mid(nom, 2, cpte) * 1
End Function

Function appellation(nom As String)
Start = 2
cpte = 0
Do Until Not IsNumeric(Mid(nom, Start, 1))
Start = Start + 1
Loop
Do While Not IsNumeric(Mid(nom, Start + cpte, 1))
cpte = cpte + 1
Loop
appellation = Mid(nom, Start, cpte)
End Function

Function millesime(nom As String)
Start = Len(nom)
cpte = 0
Do While IsNumeric(Mid(nom, Start - cpte, 1))
cpte = cpte + 1
Loop
millesime = Mid(nom, Start - cpte + 1, 4) * 1
End Function

Function contenance(nom As String)
Start = Len(nom)
cpte = 0
Do While IsNumeric(Mid(nom, Start - cpte, 1))
cpte = cpte + 1
Loop
contenance = Right(nom, cpte - 4) * 1
End Function


A coller dans un module de l'interface VBA de ton classeur ([Alt + F11] pour y accèder > Insertion > Module) tu colles ces codes dans la fenêtre qui s'est ouverte puis tu ferme l'interface VBA.

Ensuite dans ton tableau tu appelles les fonctions comme une formule classique dans des nouvelles colonnes :
=conditionnement([@[Produit - ID]])
=appellation([@[Produit - ID]])
=millesime([@[Produit - ID]])
=contenance([@[Produit - ID]])

Sélectionnes les 4 nouvelles colonnes créer > onglet"Données" > "Grouper"
Les 4 colonnes sont groupées et peuvent etre cachées en cliquant sur le "-"


Et voici pour finir la configuration du tri :


En revanche, as-tu des produits sans millésime dans ta base de données?
Si oui, comment sont-ils codés en colonne A? Car pour que les fonctions ci-dessus fonctionnent correctement il faut que les codes commencent par "X" + le conditionnement en numérique et que le millésime comportent 4 caractères.

Bon dimanche

Jc
0
Averroz Messages postés 10 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 6 août 2023
26 déc. 2018 à 17:41
Bonsoir,
Je viens d'essayer ce que tu as proposé, dès que je mets cette fonction dans la colonne : =appellation([@[Produit - ID]])

ça plante...

J'ai essayé avec deux PC différents, et leurs config n'est pas dégueu ( i7, 16go de ram etc )
Je ne vois pas pourquoi ..

Merci !

Bonne soirée, et bonnes fêtes
0
titeufdu89 Messages postés 374 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
Modifié le 26 déc. 2018 à 20:30
Bonsoir Averroz,

Qu'appelle-tu "ca plante"?! Une capture d'écran? Un peu plus d'informations seraient bienvenues pour pouvoir t'aider davantage.

Petits points de contrôle :
- tu as bien copié les codes ci-dessus dans un module VBA de ton classeur?
- tu as bien fais appel à ces différentes fonctions dans de nouvelles colonnes faisant référence au texte contenu dans la colonne A, exemble :
pour créer la colonne "conditionnement"
- sélectionne "H1"
- saisi "conditionnement" la colonne est créée dans ton tableau
- sélectionne "H2"
- saisie "=conditionnement(" puis clique sur A1 puis saisi ")" puis valide la formule avec "entrée"

Si tu as bien fait tout ça alors poste une capture d'écran du plantage que ça occasionne
Bonne soirée

Jc
0
Averroz Messages postés 10 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 6 août 2023
27 déc. 2018 à 15:19
Bonjour,
Merci pour ton retour, je n'ai pas de message d'erreur, en haut de la fenêtre j'ai " ne répond pas " et ça dure indéfiniment, je dois fermer Excel et le re ouvrir.
Ça me fait seulement ça avec la colonne " appellation " les 3 autres c'est ok.

PS : j'ai bien copié les codes dans un module VBA
J'ai bien fait appel à ces différentes fonctions dans de nouvelles colonnes.

Je re essaie sur un fichier propre.

Bonne journée
0
Averroz Messages postés 10 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 6 août 2023
27 déc. 2018 à 16:02
Re Bonjour,
Ça a fonctionné pour la colonne " appellation "

Cependant, l'ordre est tous les produits en x12 puis tous les produits en x18, puis tous les produits en x24 puis 1,3,6

par exemple :

X12Canongaffeliere201675
X12Cantemerle201675
X12Cantenacbrown201675
X12Cantermerle201175
X12Capdet201275
X12Capdet201475

Merci,
0
titeufdu89 Messages postés 374 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
27 déc. 2018 à 16:25
Bonjour Averroz,

Je n'ai pas compris ton dernier message, ça a fonctionné mais pas pour tous les produits c'est ça?
0
Averroz Messages postés 10 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 6 août 2023
22 déc. 2018 à 10:12
Bonjour à tous,
Merci pour votre retour, je suis désolé je ne suis pas revenu vers vous je n'ai pas eu le temps de regarder vos réponses, je m'y penche ce weekend, je vous tiens au courant.

Merci,

Bon weekend à vous
0