Générer un nom de codification simple en VBA

man.delage Messages postés 5 Statut Membre -  
man.delage Messages postés 5 Statut Membre -
Bonjour à tous.
Débutant en VBA, je me heurte à un problème surement déjà résolu par nombre d'entre vous....je m'explique:
je voudrais générer une codification à partir d'un choix dans une ListBox par exemple. Jusque la j'arrive à me débrouiller (quoique...ça reste très moyen, je ne post pas l'exemple vous passeriez votre temps a rire :) ).
Le soucis c'est que j'ai plusieurs "code" dans mon nom exemple
Et je voudrais que les list box s'affichent au fur et à mesure que l'on avance dans le choix...
marque2 correspond à 002, modele12 à 012, le type mot à MOT, le lieu de prod Chinon à 004 etc

Si je savais joindre un exemple de fichier dans ce post...
voici ce que je voudrais obtenir :
002-012-MOT-004-006-a17
Merci d'avance pour vos réponses....

3 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut man.delage,

    Voilà un exemple de ce qui peut être fait, en limitant l'exemple à 3 ComboBox pour rester lisible :
    Option Explicit
    
    Dim stCodeMarker As String
    Dim C1, C2, C3 As String
    
    Private Sub ReinitAll()
        stCodeMarker = "-- code : "
        ComboBox1.Clear
        With Feuil1.ComboBox1
            .AddItem "marque2 -- code : 002"
            .AddItem "marque3 -- code : 003"
            .AddItem "marque4 -- code : 004"
        End With
        ComboBox1.Value = ""
        C1 = ""
        ComboBox1.Visible = True
        
        ComboBox2.Clear
        With Feuil1.ComboBox2
            .AddItem "modele12 -- code : 012"
            .AddItem "modele13 -- code : 013"
            .AddItem "modele14 -- code : 014"
        End With
        ComboBox2.Value = ""
        C2 = ""
        ComboBox2.Visible = False
        
        ComboBox3.Clear
        With Feuil1.ComboBox3
            .AddItem "mot -- code : MOT"
            .AddItem "cap -- code : CAP"
            .AddItem "top -- code : TOP"
        End With
        ComboBox3.Value = ""
        C3 = ""
        ComboBox3.Visible = False
        Range("C14").Value = "[choisir la marque]"
    End Sub
    
    Private Sub Workbook_Open()
        ReinitAll
    End Sub
    
    Private Function GetCode(ByVal st As String)
        Dim posCode As Integer
        
        posCode = InStr(st, stCodeMarker)
        GetCode = Mid(st, posCode + Len(stCodeMarker))
    End Function
    
    Private Sub ComboBox1_Change()
        If ComboBox1.Value <> "" Then
            C1 = GetCode(ComboBox1.Value)
            ComboBox1.Visible = False
            ComboBox2.Visible = True
            Range("C14").Value = "[choisir le modèle]"
        Else
            C1 = ""
        End If
    End Sub
    
    Private Sub ComboBox2_Change()
        If ComboBox2.Value <> "" Then
            C2 = GetCode(ComboBox2.Value)
            ComboBox2.Visible = False
            ComboBox3.Visible = True
            Range("C14").Value = "[choisir le mot]"
        Else
            C2 = ""
        End If
    End Sub
    
    Private Sub ComboBox3_Change()
        If ComboBox3.Value <> "" Then
            C3 = GetCode(ComboBox3.Value)
            ComboBox3.Visible = False
            Range("C14").Value = C1 + "-" + C2 + "-" + C3
        Else
            C2 = ""
        End If
    End Sub
    


    Le classeur correspondant est là : https://www.cjoint.com/c/JBenQbTZqKZ

    En gros :
    • 3 ComboBox sont définies
    • elles sont initialisées avec le contenu textuel et le code, seule la 1ère est affichée et la rubrique "Codification" demande à ce que la marque soit choisie
    • lorsque la marque est choisie le code est extrait, la 1ère est masquée, la 2ème rendue visible et la rubrique "Codification" demande à ce que le modèle soit choisi
    • lorsque le modèle est choisi le code est extrait, la 2ème est masquée, la 3ème rendue visible et la rubrique "Codification" demande à ce que le "mot" soit choisi
    • lorsque le "mot" est choisi le code est extrait, la 3ème est masquée (toutes les ComboxBox sont alors masquées) et la rubrique "Codification" comporte la concaténation des codes correspondants aux 3 choix effectués


    Dal
    1
    1. man.delage Messages postés 5 Statut Membre
       
      Génial merci ! Ça ressemble fort a ce que j'attends !
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Pour améliorer la présentation et conserver la trace des actions ayant mené au résultat, on peut insérer la sélection d'où chaque partie du code est tirée dans la cellule sous le contrôle.

      Option Explicit
      
      Dim stCodeMarker As String
      Dim C1, C2, C3 As String
      
      Private Sub ReinitAll()
          stCodeMarker = "-- code : "
          ComboBox1.Clear
          With Feuil1.ComboBox1
              .AddItem "marque2 -- code : 002"
              .AddItem "marque3 -- code : 003"
              .AddItem "marque4 -- code : 004"
          End With
          ComboBox1.Value = ""
          Range("C6").Value = ""
          C1 = ""
          ComboBox1.Visible = True
          
          ComboBox2.Clear
          With Feuil1.ComboBox2
              .AddItem "modele12 -- code : 012"
              .AddItem "modele13 -- code : 013"
              .AddItem "modele14 -- code : 014"
          End With
          ComboBox2.Value = ""
          Range("C8").Value = ""
          C2 = ""
          ComboBox2.Visible = False
          
          ComboBox3.Clear
          With Feuil1.ComboBox3
              .AddItem "mot -- code : MOT"
              .AddItem "cap -- code : CAP"
              .AddItem "top -- code : TOP"
          End With
          ComboBox3.Value = ""
          Range("C10").Value = ""
          C3 = ""
          ComboBox3.Visible = False
          Range("C14").Value = "[choisir la marque]"
      End Sub
      
      Private Sub Workbook_Open()
          ReinitAll
      End Sub
      
      Private Function GetCode(ByVal st As String)
          Dim posCode As Integer
          
          posCode = InStr(st, stCodeMarker)
          GetCode = Mid(st, posCode + Len(stCodeMarker))
      End Function
      
      Private Sub ComboBox1_Change()
          If ComboBox1.Value <> "" Then
              Range("C6").Value = ComboBox1.Value
              C1 = GetCode(ComboBox1.Value)
              ComboBox1.Visible = False
              ComboBox2.Visible = True
              Range("C14").Value = "[choisir le modèle]"
          Else
              C1 = ""
          End If
      End Sub
      
      Private Sub ComboBox2_Change()
          If ComboBox2.Value <> "" Then
              Range("C8").Value = ComboBox2.Value
              C2 = GetCode(ComboBox2.Value)
              ComboBox2.Visible = False
              ComboBox3.Visible = True
              Range("C14").Value = "[choisir le mot]"
          Else
              C2 = ""
          End If
      End Sub
      
      Private Sub ComboBox3_Change()
          If ComboBox3.Value <> "" Then
              Range("C10").Value = ComboBox3.Value
              C3 = GetCode(ComboBox3.Value)
              ComboBox3.Visible = False
              Range("C14").Value = C1 + "-" + C2 + "-" + C3
          Else
              C2 = ""
          End If
      End Sub
      

      En fin de sélection on a alors :


      Les ComboBox de sélection étant masquées, mais pas les résultats intermédiaires sélectionnés.
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, je ne comprends pas ce que tu souhaites obtenir, pourrais-tu être plus factuel?
    plusieurs éléments sont particulièrement peu clairs:
    1) à quoi va servir la codification ainsi générée?
    2) comment déterminer ce qui correspond à quoi
    3) ce que tu essaies d'obtenir semble être une suite, bizarre, non?

    joindre un fichier, c'est simple: tu publies le fichier sur internet (cjoint.com, google drive, ...), puis tu partages ici le lien vers le fichier.
    0
  3. man.delage Messages postés 5 Statut Membre
     
    Bonjour, et merci pour votre intérêt !
    1: c'est une codif interne simplifiée, permettant d'avoir un langage commun,sans fautes d'orthographe, fantaisie dans le noms etc.
    2: déterminer. C'est un exemple mais un vlookup (nom cherché, lieu de recherche, 2, false)suffirait si on se base sur un tableau classe/é dans un ordre prédéterminé.
    3: oui la suite est bizarre....mais c'est un langage que je pratique depuis 25 ans????
    Je ne sais pas comment mettre un exemple dans cette conversation....
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      il n'est probablement pas indispensable que les ComboBoxes ne s'affichent qu'au fur et mesure... cela pourrait rendre difficile la correction d'une erreur sur un ComboBox précédente.
      0
      1. man.delage Messages postés 5 Statut Membre > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci, effectivement j'ai réussi à créer qq chose de ressemblant a mon attendu mais le risque d'erreur est élevé.
        J'y travaille ????
        0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      joindre un fichier, c'est simple: tu publies le fichier sur internet (cjoint.com, google drive, ...), puis tu partages ici le lien vers le fichier.
      0
      1. man.delage Messages postés 5 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci.
        J'ai réussi à avoir le résultat que j'attend en quelques lignes...il fallait juste que je comprenne que l'initialisation de faisait dans le userform....ha ben oui je débute !
        Merci pour votre aide en tout cas.
        Emmanuel
        0