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

Fermé
man.delage Messages postés 5 Date d'inscription dimanche 2 février 2020 Statut Membre Dernière intervention 4 février 2020 - Modifié le 2 févr. 2020 à 21:41
man.delage Messages postés 5 Date d'inscription dimanche 2 février 2020 Statut Membre Dernière intervention 4 février 2020 - 4 févr. 2020 à 17:31
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

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
4 févr. 2020 à 14:50
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
man.delage Messages postés 5 Date d'inscription dimanche 2 février 2020 Statut Membre Dernière intervention 4 février 2020
4 févr. 2020 à 14:58
Génial merci ! Ça ressemble fort a ce que j'attends !
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 4 févr. 2020 à 15:05
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
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
2 févr. 2020 à 23:09
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
man.delage Messages postés 5 Date d'inscription dimanche 2 février 2020 Statut Membre Dernière intervention 4 février 2020
3 févr. 2020 à 08:11
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
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
4 févr. 2020 à 13:38
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
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
4 févr. 2020 à 13:41
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
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
4 févr. 2020 à 17:06
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
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
4 févr. 2020 à 17:31
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