Tri A à Z - lettres & nombres

Résolu
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

  1. 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
    1. 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
      1. 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
        1. Contributeur
          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
          1. Contributeur
            (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
            1. 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
              1. 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
              2. 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
              3. 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
              4. 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
              5. Bonjour Averroz,

                Je n'ai pas compris ton dernier message, ça a fonctionné mais pas pour tous les produits c'est ça?
                0
            2. 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