Tri A à Z - lettres & nombres

Résolu
Averroz Messages postés 11 Statut Membre -  
titeufdu89 Messages postés 387 Statut Membre -
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. JCB40 Messages postés 3067 Date d'inscription   Statut Membre Dernière intervention   479
     
    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
  2. titeufdu89 Messages postés 387 Statut Membre 38
     
    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
  3. titeufdu89 Messages postés 387 Statut Membre 38
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Raymond PENTIER Messages postés 58227 Date d'inscription   Statut Contributeur Dernière intervention   17 490
     
    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
  6. Raymond PENTIER Messages postés 58227 Date d'inscription   Statut Contributeur Dernière intervention   17 490
     
    (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
  7. titeufdu89 Messages postés 387 Statut Membre 38
     
    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. Averroz Messages postés 11 Statut Membre
       
      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. titeufdu89 Messages postés 387 Statut Membre 38
       
      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. Averroz Messages postés 11 Statut Membre
       
      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. Averroz Messages postés 11 Statut Membre
       
      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. titeufdu89 Messages postés 387 Statut Membre 38
       
      Bonjour Averroz,

      Je n'ai pas compris ton dernier message, ça a fonctionné mais pas pour tous les produits c'est ça?
      0
  8. Averroz Messages postés 11 Statut Membre
     
    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