Commande VBA pour liste déroulante à choix multiple
Bonsoir,
Je suis totalement néophyte en VBA.
Pour pouvoir faire des choix multiples dans une liste déroulante, j'ai trouvé sur internet la commande macro suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
If Target.Count > 1 Then GoTo exitHandler
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If oldVal = "" Then
Else
If newVal = "" Then
Else
Target.Value = oldVal _
& ", " & newVal
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub
Je l'ai copié/coller dans le Worksheet de mon tableur et ça marche très bien.
Par contre cette nouvelle fonctionnalité s'applique à TOUTES les listes déroulantes de mon classeur Excel ce qui me pose problème notamment avec une de mes listes déroulantes à saisie semi-automatique.
J'ai trouvé partiellement la solution sur Internet (Mr Duboisgontier) avec le fichier joint que j'ai commencé à modifier.
J'ai besoin d'aide pour modifier, adapter la requête en VBA, à savoir :
La commande macro existante dans le fichier joint permet de faire un choix multiple dans la liste déroulante contenue dans la cellule C2 (verte) qui va chercher les items dans la Liste contenue en colonne A
Comment faire :
1 - pour modifier la commande macro pour qu'elle prenne en compte, non seulement la cellule C2 mais toutes les cellules avec liste déroulante contenues dans une plage C2:C1500
2 - Comment rajouter en dessous de celle existante, une autre commande macro du même style mais qui fasse référence à la Liste (colonne B) et affectée aux cellules avec liste déroulante contenues dans une plage D21500
Quelqu'un pourrait-il modifier la commande VBA qui est dans le tableur excel que j'ai envoyé pour qu'il corresponde à ce que je cherche. En lisant la commande VBA complète, j'espère pouvoir mieux comprendre et pouvoir dupliquer, adapter à mon tableur de 1500 lignes.
Merci de votre aide
Bruno
Bonsoir,
If Not Intersect([C2:C100], Target) Is Nothing And Target.Count = 1 Then
Ceuzin
Bonsoir,
A force de chercher des solutions toutes faites sur internet, on oublie d'apprendre les bases les plus élémentaires, et de consulter la documentation qu'on a toujours sous la main, l'Aide en particulier... !
1 - pour modifier la commande macro pour qu'elle prenne en compte, non seulement la cellule C2 mais toutes les cellules avec liste déroulante contenues dans une plage C2:C1500
Tu as une ligne de commande :
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)qui définit une plage de cellules avec validation sur l'ensemble de la feuille.
Il suffit de réduire cette extension à la plage désirée :
Set rngDV = Range("C2:C1500").SpecialCells(xlCellTypeAllValidation)Cordialement.
NB- La prochaine fois, utilise les balises Code pour citer du code. (Et s'il est indenté, ce serait d'autant mieux !
Merci Ceuzin,
Ca fonctionne nickel pour les cellules en liste déroulante de C2 à C100 basée sur la liste de la colonne A
J'ai essayé de rajouter une commande macro identique en essayant de l'adapter pour les cellules en liste déroulante de D2 à D100 basée sur la liste de la colonne B
Mais maintenant, plus rien ne marche (tableur joint)
Au secours
Bruno
PS pour MFerrand : en VBA, j'en suis au copié/coller. ce n'est pas l'envie mais le temps qui me manque pour me faire une vraie formartion VBA !!