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

Signaler
Messages postés
5
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
4 février 2020
-
man.delage
Messages postés
5
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
4 février 2020
-
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

Messages postés
5395
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 février 2020
859
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
man.delage
Messages postés
5
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
4 février 2020

Génial merci ! Ça ressemble fort a ce que j'attends !
[Dal]
Messages postés
5395
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 février 2020
859
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.
Messages postés
9607
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2020
525
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.
Messages postés
5
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
4 février 2020

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....
[Dal]
Messages postés
5395
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 février 2020
859
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.
man.delage
Messages postés
5
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
4 février 2020
> [Dal]
Messages postés
5395
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 février 2020

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 ????
yg_be
Messages postés
9607
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2020
525
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.
man.delage
Messages postés
5
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
4 février 2020
> yg_be
Messages postés
9607
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2020

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