Sélection multiple liste déroulante avec abréviations
Bonjour à tous,
Pouvez-vous svp m'aider à trouver une solution pour le problème suivant ? :
En Feuil1 : J'ai une colonne avec une liste déroulante de sélection de pays, une autre colonne avec l'abréviation correspondante au pays sélectionné (code pays) qui s'affiche via la formule INDEX, EQUIV me permettant de rechercher la correspondance dans un tableau présent dans un autre feuillet (en Feuil2).
Exemple : J'ai sélectionné "France" dans la liste déroulante de la 1ère colonne et le code pays associé "FR" s'affiche dans la 2ème colonne. Je ne peux ici sélectionner qu'un seul pays et n'afficher qu'un code pays.
En Feuil2 : J'ai le tableau de correspondance des Pays et Codes Pays.
En Feuil3 : J'ai la même chose qu'en Feuil1 à la différence que j'ai une sélection multiple possible via la macro ci-dessous (à noter que si je sélectionne un pays déjà sélectionné, celui-ci est retiré de la sélection). Je peux donc sélectionner plusieurs pays qui s'affichent en étant séparés par un tiret "-" et je souhaiterais que la correspondance s'affiche avec les codes pays dans la colonne d'à côté.
Exemple : Je sélectionne en B2 les pays France-Allemagne-Italie-Japon. Je souhaiterais que les codes pays associés s'affichent en C2 de cette manière : "FR-DE-IT-JP". Je souhaiterais donc une formule qui aille rechercher les correspondances dans le tableau présent en Feuil2 pour afficher la sélection multiple des pays sous forme de codes pays séparés par un tiret "-".
En effet, INDEX, EQUIV ne fonctionne plus ici puisqu'il y a une sélection multiple et non pas une correspondance exacte. Il faudrait une formule qui aille scanner les pays sélectionnés en B2 et affiche en C2, selon le tableau de correspondance en Feuil2, les codes pays des pays sélectionnés.
Macro pour Feuil3 :
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
Dim xRngDV As Range
Dim TargetRange As Range
Dim oldValue As String
Dim newValue As String
Dim delimiter As String
Dim allValues As Variant
Dim valueExists As Boolean
Dim i As Long
Dim cleanedValue As String
Set TargetRange = Me.UsedRange ' Set your specific range here
delimiter = "-" ' Set your desired delimiter here
If Target.CountLarge > 1 Then Exit Sub
' Check if the change is within the specific range
If Intersect(Target, TargetRange) Is Nothing Then Exit Sub
On Error Resume Next
Set xRngDV = Target.SpecialCells(xlCellTypeAllValidation)
If xRngDV Is Nothing Or Target.Value = "" Then
' Skip if there's no data validation or if the cell is cleared
Application.EnableEvents = True
Exit Sub
End If
On Error GoTo 0
If Not Intersect(Target, xRngDV) Is Nothing Then
Application.EnableEvents = False
newValue = Target.Value
Application.Undo
oldValue = Target.Value
Target.Value = newValue
' Split the old value by delimiter and check if new value already exists
allValues = Split(oldValue, delimiter)
valueExists = False
For i = LBound(allValues) To UBound(allValues)
If Trim(allValues(i)) = newValue Then
valueExists = True
Exit For
End If
Next i
' Add or remove value based on its existence
If valueExists Then
' Remove the value
cleanedValue = ""
For i = LBound(allValues) To UBound(allValues)
If Trim(allValues(i)) <> newValue Then
If cleanedValue <> "" Then cleanedValue = cleanedValue & delimiter
cleanedValue = cleanedValue & Trim(allValues(i))
End If
Next i
Target.Value = cleanedValue
Else
' Add the value
If oldValue <> "" Then
Target.Value = oldValue & delimiter & newValue
Else
Target.Value = newValue
End If
End If
Application.EnableEvents = True
End If
End SubJe mets le fichier en PJ et vous remercie par avance pour votre aide.
Bonjour à tous !
Une proposition type "formule" (désolé mais pas de VBA...
=JOINDRE.TEXTE("-";;RECHERCHEX(FRACTIONNER.TEXTE(B2;;"-");Tableau2[Pays];Tableau2[Pays_Abreviation]))Bonjour JFL,
Ça fonctionne parfaitement. Merci à toi ! Tu es vraiment le GOAT d'Excel.
Ça semble si simple pour toi de trouver des solutions à mes problèmes d'Excel.
Bon après-midi.
Bonjour à tous de nouveau !
Bien....
Je vous remercie de ce retour.
Bonjour Crapule, JFL,
Pour respecter ta condition.
à noter que si je sélectionne un pays déjà sélectionné, celui-ci est retiré de la sélection).
Ne pas oublier d'insérer la formule UNIQUE avant RECHERCHEX et une ) au final pour fermer l'ensemble. Donc trois parenthèses finales au lieu de deux.