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

Rechercher des sujets similaires à "commande vba liste deroulante choix multiple"