MsgBox différente selon valeur d'une cellule [Résolu/Fermé]

Signaler
Messages postés
520
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
12 janvier 2020
-
Mistral_13200
Messages postés
520
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
12 janvier 2020
-
Bonjour à tous,

Je souhaiterais, dans un classeur Excel, afficher un message, à l'aide d'une MsgBox, différente chaque fois que la valeur de la cellule "G5" de la feuille "Menu" change de valeur. Cette cellule peut prendre les valeurs de 1 à 3. J'ai testé ce qui suit et ça fonctionne bien :

Sub MacroEssais()

Dim Num_Concours
Num_Concours = Sheets("Menu").Range("G5")

Select Case Num_Concours
Case Is = 1
        MsgBox (" Message1"), vbInformation
Case Is = 2
        MsgBox (" Message2"), vbInformation
Case Is = 3
        MsgBox (" Message3"), vbInformation

End Select
End Sub


Ce que je ne parviens pas à faire c'est la surveillance de la cellule "G5".
Je crois également que l'idéal serait de placer cette procédure dans une Worcksheet de la feuille Menu.
Merci d'avance pour votre aide.
Cordialement
Mistral

11 réponses

Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
995
Bonjour,
Essayez avec une procédure [Private Sub Worksheet_Change(ByVal Target as Range)
] dans laquelle vous insérez votre code et la placée dans le module de la feuille concernée.
Messages postés
520
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
12 janvier 2020
3
Tout d'abord merci pour votre réponse, mais il reste malgré tout à surveiller le changement d'état de la cellule "G5" que je ne parviens à faire.
J'ai déjà mis le code ci-dessus dans une procédure

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

mais je n'affiche pas les différentes MsgBox. Comment faire?
Cordialement
Mistral
Messages postés
520
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
12 janvier 2020
3
En fait les MsgBox s'affichent chaque fois qu'une cellule de la feuille est modifiée alors que je souhaiterais que l'affichage ne se fasse que lorsque la cellule "G5" est modifiée.
Messages postés
9202
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
12 février 2020
1 708
bonjour à tous les deux

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim Num_Concours As Long 
If Not Intersect(Sheets("menu").Range("G5"), Target) Is Nothing Then 
  Num_Concours = Sheets("Menu").Range("G5") 
  Select Case Num_Concours 
  Case Is = 1 
        MsgBox (" Message1"), vbInformation 
  Case Is = 2 
        MsgBox (" Message2"), vbInformation 
  Case Is = 3 
        MsgBox (" Message3"), vbInformation 
  End Select 
End If 
End Sub

fonctionne, mais si on modifie G5 "à la main",
si le contenu de G5 est une formule, ça ne fonctionne pas et je ne sais pas faire !

bonne suite
Le Pingou
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
995
Bonjour ccm81,
Merci pour le coup de main.
A une prochaine.
Salutations.
Le Pingou
Messages postés
520
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
12 janvier 2020
3
Ca ne fonctionne pas!
Le contenu de la cellule "G5" est choisi dans une liste déroulante.

J'ai fait l'essais sur une feuille indépendante en forçant manuellement la valeur de la cellule "G5" mais c'est quand même pas bon.

Les MsgBox s'affichent quand on sélectionne la cellule et il faudrait que les MsgBox s'affichent uniquement quand on valide la cellule
Messages postés
16082
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 février 2020
2 875
Bonjour,

Le code de ccm (bonjour) fonctionne parfaitement

regarde si tu as bien
Private Sub Worksheet_Change(ByVal Target As Range) 


et non comme tu l'as marqué + haut

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Messages postés
9202
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
12 février 2020
1 708
re

es tu sur d'avoir mis le code dans
Private Sub Worksheet_Change(ByVal Target As Range)

chez moi ça marche avec une liste déroulante

bonne suite
Messages postés
520
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
12 janvier 2020
3
Je pense avoir fait les choses correctement.
Clic droit sur l'onglet de la feuille et afficher le code et j'ai le code suivant :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Num_Concours As Long

    If Not Intersect(Sheets("menu").Range("G5"), Target) Is Nothing Then

    Num_Concours = Sheets("Menu").Range("G5")
  
    Select Case Num_Concours
    Case Is = 1
        MsgBox (" Message1"), vbInformation
        
    Case Is = 2
        MsgBox (" Message2"), vbInformation
        
    Case Is = 3
        MsgBox (" Message3"), vbInformation
        
    End Select
    End If
        End Sub


Le code fonctionne correctement en rentrant la valeur directement dans la cellule "G5".

Mais c'est de ma faute, je n'avais pas lu le message précedent jusqu'au bout. Le résultat de la cellule "G5" dépend effectivement de la formule qu'elle contient qui elle dépend de la cellule "H5". La cellule "H5" peut prendre les valeures Bleu, Blanc ou Rouge et la formule en G5 est la suivante :
=SI($H$5="Bleu";1;SI($H$5="Blanc";2;SI($H$5="Rouge";3;"")))

Comment contourner ce problème?
Cordialement
Mistral
Messages postés
9202
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
12 février 2020
1 708
re
RQ1. donc le contenu de G5 n'est pas obtenu depuis une liste déroulante
RQ2. comme je t'ai dit au post 4, dans le cas où G5 contient une formule, je ne sais pas faire
RQ3. pourquoi alors ne pas tester H5 dans Worksheet_Change plutot que G5 ?
bonne suite
Messages postés
2995
Date d'inscription
mardi 20 janvier 2009
Statut
Contributeur
Dernière intervention
20 décembre 2016
744
Salut le forum

Utilise le contenu de H5 pour déclencher la procédure évenementielle.
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("H5")) Is Nothing Then
 Select Case Target.Offset(0, -1)
    Case Is = 1
        MsgBox (" Message1"), vbInformation
    Case Is = 2
        MsgBox (" Message2"), vbInformation
    Case Is = 3
        MsgBox (" Message3"), vbInformation
    Case Else
        MsgBox (" Erreur"), vbInformation
 End Select
End If

End Sub

Mytå
Messages postés
520
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
12 janvier 2020
3
Bonjour à tous,

Je suis arrivé à faire ce que je voulais en utilisant directement la valeur de la cellule "H5".
Pourquoi n'y avais-je pas pensé avant???

Un grand merci au Pingou, Michel, ccm81 et Myta.
Je clos le sujet.
Bonne journée à tous.
Cordialement
Mistral