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 -
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....
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
-
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-
-
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.
-
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. -
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....