XL 2019 Activer une macro à partir du contenu d'une cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

thibaut93800

XLDnaute Nouveau
Bonjour,

Je suis novice en macro et je cherche à modifier une macro que j'avais faite.
Aujourd'hui je voudrais que la macro s'active en fonction du résultat d'une formule présente dans une cellule.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C17:J17")) Is Nothing Then
Select Case Target.Value

Case "VERIFICATION - X"
Sheets("X").Visible = True
Sheets("Y").Visible = False
Sheets("Z").Visible = False

Case "VERIFICATION - Y"
Sheets("X").Visible = False
Sheets("Y").Visible = True
Sheets("Z").Visible = False

Case "VERIFICATION - Z"
Sheets("X").Visible = False
Sheets("Y").Visible = False
Sheets("Z").Visible = True

End Select
End If
End Sub


Actuellement je suis obligé de cliquer et valider la Cellule C17 pour activer la macro. Quelqu'un a t'il une idée sur l'automatisation de la macro. Merci d'avance
 

Pièces jointes

Bonjour Thibault,
Avec un Worksheet_Calculate. par contre c'est lourd il sera exécuté à chaque recalcul de la feuille. A éviter, mais ça fait ce que vous voulez. 🙂
VB:
Private Sub Worksheet_Calculate()
Select Case [C17]
    Case "VERIFICATION - X"
        Sheets("X").Visible = True
        Sheets("Y").Visible = False
        Sheets("Z").Visible = False
    Case "VERIFICATION - Y"
        Sheets("X").Visible = False
        Sheets("Y").Visible = True
        Sheets("Z").Visible = False
    Case "VERIFICATION - Z"
        Sheets("X").Visible = False
        Sheets("Y").Visible = False
        Sheets("Z").Visible = True
End Select
End Sub
 

Pièces jointes

Bonjour Thibaut, sylvanu,

ou peut-être à l'ouverture du classeur :
VB:
Private Sub Workbook_Open()
  Application.ScreenUpdating = 0
  Worksheets("X").Visible = 0: Worksheets("Y").Visible = 0: Worksheets("Z").Visible = 0
  Select Case Right$([C17], 1)
    Case "X": Worksheets("X").Visible = -1
    Case "Y": Worksheets("Y").Visible = -1
    Case "Z": Worksheets("Z").Visible = -1
  End Select
End Sub
attention : utiliser ce code seulement s'il y a au moins une autre feuille visible !!!

soan
 
Bonjour Thibaut, sylvanu, Soan

Légèrement hors sujet car les feuilles s'affichent/masquent directement sur le choix de la cellule C11

VB:
Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, Range("C11")) Is Nothing And Target.Value <> "" Then
    For n = 2 To 4
        If n = Target.Value Then Sheets(n).Visible = True Else Sheets(n).Visible = False
    Next
    Sheets(Target.Value).Visible = True
End If
End Sub

@Phil69970
 
Re bonjour tout le monde,
Ou encore plus simple, ne demande rien d'autre qu'un clic, encore plus simple qu'une liste déroulante :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C10:C12")) Is Nothing Then
    Application.ScreenUpdating = False
    Select Case Target
        Case "X"
            Sheets("X").Visible = True
            Sheets("Y").Visible = False
            Sheets("Z").Visible = False
        Case "Y"
            Sheets("X").Visible = False
            Sheets("Y").Visible = True
            Sheets("Z").Visible = False
        Case "Z"
            Sheets("X").Visible = False
            Sheets("Y").Visible = False
            Sheets("Z").Visible = True
    End Select
End If
End Sub
 

Pièces jointes

Bonjour @Phil69970, le fil,

Si j'ai bien compris ton code VBA, ça teste C11 qui contient 1, 2, ou 3 ; donc l'index
de la feuille à afficher ou masquer ; effectivement, c'est un peu hors sujet puisque
dans l'énoncé, c'est selon le nom d'une feuille, dont on ne connaît pas la position
dans le classeur.

D'autre part, même pour un index de feuille, je crois que ton code marcherait
tout aussi bien sans Sheets(Target.Value).Visible = True puisque c'est déjà fait
par la ligne If, quand n = Target.Value ; je te laisse vérifier.

soan
 
Soan
Tu as raison
D'autre part, même pour un index de feuille, je crois que ton code marcherait
tout aussi bien sans Sheets(Target.Value).Visible = True puisque c'est déjà fait
par la ligne If, quand n = Target.Value ; je te laisse vérifier.

Ce code suffit :
VB:
Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, Range("C11")) Is Nothing And Target.Value <> "" Then
    For n = 2 To 4
        Sheets(n).Visible = False
    Next
    Sheets(Target.Value).Visible = True
End If
End Sub

c'est selon le nom d'une feuille, dont on ne connaît pas la position
dans le classeur.
Je suis parti de son exemple avec la 1ere feuille "Fiche"
Ce code fonctionne QUE si la 1ere feuille est la feuille "Fiche" puisque la boucle demarre à la 2eme feuille.

@Phil69970
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
106
Réponses
4
Affichages
148
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
233
Réponses
1
Affichages
182
Réponses
4
Affichages
362
Réponses
5
Affichages
410
Retour