Executer une macro a partir d'une liste déroulante ?

mitalca

XLDnaute Nouveau
Bonjour,

Comment faire pour lancer une macro à partir d'une liste de choix ?
Je m'explique j'ai créer une liste déroulante de choix dans une cellule,
disons A1.

Les choix sont A, B, C, D, ...

Et je voudrais, selon le choix, que la macro correspondante s'execute automatiquement... par exemple, lorsque je selectionne B dans ma liste, la macro "B" s'execute, lorsque je selectionne C, la macro "C"... etc...
Est-ce possible et comment ?

Merci d'avance.
 

michel_m

XLDnaute Accro
Re : Executer une macro a partir d'une liste déroulante ?

bonsoir Mitalca

SI A1 contient une liste à validation de données

A insérer dans le module feuille correspondant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

if intersect(target,range("A1")) is nothing then : exit sub

select case target.value

case "A"
macroA
case "B"
macroB
....
....
end select
End Sub
 

JCGL

XLDnaute Barbatruc
Re : Executer une macro a partir d'une liste déroulante ?

Re,

Encore plus court :):):)

Private Sub Worksheet_Change(ByVal Target As Range)
If [C5] = "A" Then MacroA
If [C5] = "B" Then MacroB
If [C5] = "C" Then MacroC
If [C5] = "D" Then MacroD
End Sub

A ton tour :p

A+
 

myDearFriend!

XLDnaute Barbatruc
Re : Executer une macro a partir d'une liste déroulante ?

Bonsoir mitalca, michel_m, JCGL, carcharodon-carcharias,

Et encore plus court...

Soit la liste de validation en A1 (contenant A, B, C, etc....), la présence de macros publiques intitulées MacroA, MacroB, MacroC, etc dans un module de code standard.

On peut faire quelque chose comme ça :
Code:
[SIZE=2][COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE LA FEUILLE[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Change([COLOR=NAVY]ByVal[/COLOR] Target [COLOR=NAVY]As[/COLOR] Range)
    [COLOR=NAVY]If Not[/COLOR] Application.Intersect(Target, Range("A1")) [COLOR=NAVY]Is Nothing Then[/COLOR]
        Application.Run "Macro" & Target.Value
    [COLOR=NAVY]End If
End Sub[/COLOR][/SIZE]
Attention toutefois, dans tous les cas de figure, il convient de se prémunir du cas où l'utilisateur va faire SUPPR au lieu de choisir un élément dans la liste.... plantage assuré ! Sauf si on prévoit un test de la cellule, un gestionnaire d'erreur ou même, plus simple encore, une procédure intitulée "Macro()" (sans lettre au bout)...

Cordialement,
 

Eruel

XLDnaute Nouveau
Re : Executer une macro a partir d'une liste déroulante ?

Bonjour,

Je déterre le sujet car je suis exactement dans la même situation et je voudrai savoir comment peut on faire si on a plusieurs liste déroulante ? Etant débutant j'ai copié la même formule en changeant les cellules mais j'ai une erreur me disant "nom détecté ambigu". Comment réunir les Private sub Worksheet_Change(ByVal Target As Range) ?

Merci.
 

Lii

XLDnaute Impliqué
Re : Executer une macro a partir d'une liste déroulante ?

Bonjour,

à voir.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  If Target.Address = "$F$4" Then Application.Run "Macro" & Target.Value
  If Target.Address = "$H$4" Then Application.Run "Macro_" & Target.Value
End Sub
 

Pièces jointes

  • MacroSiListe.xls
    18.5 KB · Affichages: 872

Eruel

XLDnaute Nouveau
Re : Executer une macro a partir d'une liste déroulante ?

Bonjour,

Merci pour la réponse. J'ai cru pendant un instant que ca allait resoudre mon probleme mais je dois manquer quelque chose et la macro doit faire tourner en rond excel vu qu'il plante.

Je mets en piece jointe le fichier excel avant d'appliquer la solution de Lii.

Merci.

ps: le code vb n'est pas optimisé je cherche juste à avoir un programme fonctionnel.
 

Pièces jointes

  • Excel_Test.xls.zip
    15.5 KB · Affichages: 399

Lii

XLDnaute Impliqué
Re : Executer une macro a partir d'une liste déroulante ?

Re,

cela devrait mieux aller (pour les différents appels*) avec
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  If Target.Address = "$F$1" Then
    If Target = "Valeurs libres" Then VallibresA
    If Target = "Pivot" Then TPivotA
    If Target = "Rotule" Then TRotuleA
    If Target = "Linéaire annulaire" Then TLinAnnulaireA
    If Target = "Encastrement" Then TEncastrementA
  Else
    If Target.Address = "$F$5" Then
      If Target = "Valeurs libres" Then VallibresB
      If Target = "Pivot" Then TPivotB
      If Target = "Rotule" Then TRotuleB
      If Target = "Linéaire annulaire" Then TLinAnnulaireB
      If Target = "Encastrement" Then TEncastrementB
    End If
  End If
End Sub
* mais je me demande si les macros correspondantes sont "justes".
Par exemple la formule, =Y + 3 quand Y est une lettre et non une variable, pose problème.
 

Discussions similaires

Réponses
2
Affichages
273
Réponses
21
Affichages
1 K
Réponses
8
Affichages
430

Statistiques des forums

Discussions
312 185
Messages
2 086 011
Membres
103 093
dernier inscrit
Molinari