Excel - Plusieurs listes déroulantes à choix multiples
Bonjour à tous,
Je sollicite votre aide car j'ai crée un fichier excel avec une colonne à choix multiples.
Je m'explique :
1. Je souhaite pouvoir sélectionner plusieurs choix dans une liste déroulante
2. J'ai réussi à le faire grâce au code suivant :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ValSaisie
Dim P As Integer
If Not Intersect(Columns("G"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End If
End Sub
3. Cependant j'aimerais avoir une autre colonne avec un choix multiple et je ne sais pas quoi changer dans le code pour pouvoir y arriver > la colonne architecture et la colonne restaurants
Pourriez vous m'aider ?
Bien à vous,
Margot
- Messages
- 1'089
- Excel
- 2021 FR
- Inscrit
- 17/12/2018
- Emploi
- Technicien maintenance robot Retraité
Bonjour,
Essai un truc comme ça....
Remplace ton code par celui-ci
Slts
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ValSaisie
Dim P As Integer
If Not Intersect(Columns("G"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End If
If Not Intersect(Columns("H"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End If
End SubTrop fort boss_68 merci beaucoupppp !
Du coup si je veux ajouter plusieurs autres colonnes avec des choix multiples (ce qui risque d'arriver) comment je dois faire j'ai juste à ajouter un paragraphe de code du style :
If Not Intersect(Columns("H"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
Désolée je suis débutante en codage j'espère de comprendre comment ça marche
- Messages
- 1'089
- Excel
- 2021 FR
- Inscrit
- 17/12/2018
- Emploi
- Technicien maintenance robot Retraité
Re bonsoir
Oui effectivement mais je pense que tu as omis de mettre ceci à la suite
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End IfPar contre à la place de l'ancien code tu peux tester celui-là en-dessous......... et et rajouter tes colonnes supplémentaire ici à l'ocasion
If Not Intersect(Range(""G2:G100", "H2:H100""), Target) Is Nothing And Target.Count = 1 Then
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("G2:G100", "H2:H100"), Target) Is Nothing And Target.Count = 1 Then
If Target = "" Then Exit Sub
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
p = InStr(Target, ValSaisie)
If p > 0 Then
Target = Left(Target, p - 1) & Mid(Target, p + Len(ValSaisie) + 4)
If Right(Target, 4) = ", " Then
Target = Left(Target, Len(Target) - 4)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & ", " & ValSaisie
End If
End If
Application.EnableEvents = True
End If
End Sub
Sub ret()
Application.EnableEvents = True
End SubBonjour Boss_68,
Je re-solicite votre aide car je ne comprends pas ce que je fais de mal, mon fichier ne marche plus.
1. J'ai ajouté une étape de code à chaque fois pour les colonnes que je voulais ajouter en choix multiples (cf mon code dans le excel en PJ)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ValSaisie
Dim P As Integer
If Not Intersect(Columns("G"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End If
If Not Intersect(Columns("M"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End If
If Not Intersect(Columns("N"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End If
If Not Intersect(Columns("Q"), Target) Is Nothing And Target.Count = 1 And Target.Row > 1 Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "," Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "," & ValSaisie
End If
End If
Application.EnableEvents = True
End If
End Sub
2. J'aimerais faire du choix multiples pour les colonnes suivantes : G / M / N / Q / R / S / T / V / W / X / Y avec les sélections de la feuille 2 correspondantes aux colonnes.
3. Je n'ai fait que le code pour les colonnes G / M / N / Q pour essayer mais ca ne marche pas.
Pour info : mon fichier est bien enregistré sous format prenant en compte les macros.
Je suis complétement débutante en code et mon fichier est amené à évoluer donc j'aimerais beaucoup comprendre le pourquoi du comment une fois ca marche puis ca marche pas....
Au secours !!!!
Merci d'avance pour votre aide
- Messages
- 1'089
- Excel
- 2021 FR
- Inscrit
- 17/12/2018
- Emploi
- Technicien maintenance robot Retraité
Bonsoir,
Un nouveau code est placé dans ThisWorkbook à la place de l'ancien, il est valable pour toute la plage G2:Y
Dans le gestionnaire des noms j'ai créer des plages nommées pour chaque listes déroulantes avec une formule décaler, qui permet d'ajouter ou de supprimer des noms dans les colonnes A,B,C,D,E,F,G,H,I,J,K sans modifier les valeurs des plages
Voir Pj
Slts
Bonjour Boss_68,
Merci pour ton aide
Je pense qu'il y a quelque chose que je fais pas bien car je n'arrive pas dans ton fichier à faire de la selection multiple ca me choisit qu'un seul truc à chaque fois
Je désespère d'y arriver un jour :p
Bonjour Boss_68,
J'ai pas lâché l'affaire et j'ai vu qu'il me manquait une mis à jour excel et miracle en la faisant tout marche YOUHOUUUUUUUUUUUUUUUUUUU
C'est génial ce que vous avez fait vraiment merci 1000 fois !
Petite question :
1/ Comment je fais si je veux ajouter des colonnes dans le futur avec une sélection multiple aussi qu'est-ce que je dois modifier dans le code ?
2/ Comment je fais pour que la selection multiple s'étende jusqu'aux dernières lignes du tableau par exemple ligne 5000?
3/ Comment je fais si je veux ajouter des choix dans la liste déroulante exemple je souhaite rajouter années 30 dans la liste déroulante architecture ?
Je veux pas tout casser haha !
En tout cas vraiment merci beaucoup c'est adorable de votre part de m'avoir tant aidé !
- Messages
- 1'089
- Excel
- 2021 FR
- Inscrit
- 17/12/2018
- Emploi
- Technicien maintenance robot Retraité
Bonsoir
1/ Comment je fais si je veux ajouter des colonnes dans le futur avec une sélection multiple aussi qu'est-ce que je dois modifier dans le code ?
En admettant que tu rajoutes une colonne Z alors dans le code qui ce trouve dans ThisWorbook recherche cette ligne et modifie la dernière lettre Y par Z

2/ Comment je fais pour que la selection multiple s'étende jusqu'aux dernières lignes du tableau par exemple ligne 5000?
Quand tu clics sur la cellule ou ce trouve la liste déroulante tu prends la poignée de recopie "c'est le petit carré noir en bas de la cellule à droite et tu la fais glisser jusqu'à la ligne 5000
3/ Comment je fais si je veux ajouter des choix dans la liste déroulante exemple je souhaite rajouter années 30 dans la liste déroulante architecture ?
Normalement vu que chaque items à sa plage nommées avec une formule décaler, tu peux écrire directement 30 à la suite du dernier mot de la colonne Architecture dans la feuil2, il le prendra directement en compte dans ta liste déroulante au cas ou fait le moi savoir
Slts