Message box simple

Hello chers sauveurs!

Je me tourne vers vous ponctuellement car j'essaye d'apprendre au fil de mon travail diverses actions dans excel.

J'ai donc à nouveau besoin de vous afin de résoudre un simple problème (pour vous ).

Je comprends un peu le système mais je ne maitrise par la syntaxe vba.

Mon exemple est simple.

Je souhaite que s'affiche dans la feuille 1 une messagebox (avec un bouton ok) avec un avertissement "attention" quand la cellule B2 de la feuille 2 est supérieure à 0.

Un énorme merci.

Bonjour,

"sauveur", je ne sais pas ... mais, pourquoi ne pas utiliser une simple Validation des Données ?

[Edit:] en te relisant, je constate que tu veux une MsgBox, pendant que la feuil1 est active ... une validation ne fonctionnera donc pas ... mais qu'est-ce qui déclenchera, alors, l'affichage du message???

Je n'y ai pas pensé en fait.

Et je ne sais comment faire

l'ignorant à des œillères

U. Milité a écrit :

Bonjour,

"sauveur", je ne sais pas ... mais, pourquoi ne pas utiliser une simple Validation des Données ?

[Edit:] en te relisant, je constate que tu veux une MsgBox, pendant que la feuil1 est active ... une validation ne fonctionnera donc pas ... mais qu'est-ce qui déclenchera, alors, l'affichage du message???

la cellule B2 de la feuille 2 sera une fonction Si. Donc la messagebox s'affichera dans la feuille 1 si la cellule B2 de la feuille 2 est supérieure à 0.

C'est faisable, non?

Bonjour Nowhereman, U-Milité, le forum,

A tester : en supposant que le résultat de B2 se fait à partir des valeurs que tu rentres sur la feuil1.

Code à placer dans le module de la feuil1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Sheets("Feuil2").Range("B2").Value > 0 Then
MsgBox ("Attention!  Valeur > 0")
End If

End Sub

Cordialement,

Bonjour tout le monde,

Pour compléter le code de Xorsankukai qui est nikel dans l'absolu :

Je conseillerais plutôt de le mettre dans

Private Sub Worksheet_Activate()

à la place du

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Pour ne l'afficher qu'une fois quand tu viens sur la feuil1

Tu vas devenir fou si tu as une msgbox à chaque fois que tu bouges dans la feuil1 surtout si tu veux finir de remplir des infos avant d'aller en feuil2, à toi de voir comment tu veux gérer ça

Sinon pour le bon déroulement de la macro, il vaut mieux vérifier qu'on a bien un champ numérique pour pouvoir comparer >0, quand on a une lettre pas trop de soucis, on a bien le message qui s'affiche mais si tu fais une formule ou autre et que tu as du N/A ou DIV/0 ça plante. J'en profiterais pour afficher un message que ce n'est pas le bon format.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If IsNumeric(Sheets("Feuil2").Range("B2").Value) Then
    If Sheets("Feuil2").Range("B2").Value > 0 Then
        MsgBox ("Attention!  Valeur > 0")
    End If
Else
    MsgBox ("Attention! B2 n'est pas un nombre")
End If

End Sub

ECG

Bonsoir ExcelCoreGame,

Merci pour ta modification, j'en prends note

C'est vrai que je n'avais pas pensé à ça:

Tu vas devenir fou si tu as une msgbox à chaque fois que tu bouges dans la feuil1

Merci pour la leçon

Cordialement,

Grand merci à vous deux mais là vous avez parlé chinois totalement

pour la précision:

La fonction SI de la cellule B2 de la feuille2, le résultat changera en fonction d'autres cellules se trouvant également dans la feuille 2.

Est ce que cela change la donne pour ce qui précède?

Pour être complet, l'avertissement ne devrait pas s'afficher tout le temps vu que la feuille 2 sera masquée et que les variables seront très limitées.

Merci


Je voudrais rajouter une précision

J'ai testé et ca fonctionne mais l'avertissement ne s'affiche dans la feuille 1 qu'une fois que j'ai été dans la feuille 2 et que je retourne dans la feuille 1.

Ensuite, il faudrait que l'avertissement puisse se répéter car lorsqu'il apparaît la première fois, je corrige mon erreur mais je peux très bien commettre une autre erreur qui fait que la cellule B2 est de nouveau supérieure à 0.

J'espère que je me suis exprimé correctement

Merci

Pour conclure, je constate que cela ne fonctionne que quand j'appuie sur le bouton "exécuter" de l'éditeur VBA.

J'aurais aimé que cela se fasse automatiquement.

Merci.

Ps: je joins le fichier de test

18msgbox.xlsm (13.63 Ko)

Il faut mettre le code dans Private Sub Worksheet_Activate() de ta Feuil1, si personne ne répond et que tu ne trouve pas je te fais un screen dans la soirée

ECG

ExcelCoreGame a écrit :

Il faut mettre le code dans Private Sub Worksheet_Activate() de ta Feuil1, si personne ne répond et que tu ne trouve pas je te fais un screen dans la soirée

ECG

Je veux bien car je n'ai pas capté

Merci.

Désolé d'être un boulet

Pour faire simple il faut bien différencier deux choses dans les macros :

1. Les sub /fonction que l'on appelle via un call pour faire simple

2. Les évènements sur le classeur et les feuilles détecter par excel

Pour le 1 tu les connais c'est quand tu te fais ta macro ou que tu utilises l'enregistreur de macro, tu vas dans un Module et tu y fais tes lignes de code

mamacro

On est dans l'environnement General du module2 et plus précisément dans la déclarations de MA_MACRO qui est le nom de ma sub que j'ai créé .

Le 2 se situe dans le Microsoft Excel Objets ou tu y vois toutes les feuilles et ton classeur ThisWorkBook

C'est ici qu'intervienne les événements qui nous intéressent en sélectionnant par exemple la feuil2:

evenements

On y voit donc tous les évènements qu'excel peut intercepter sur une feuille (ou du moins qu'excel nous montre de base, il y en a surement plus mais je ne les connais pas personnellement ^^) et les célèbres si tu regardes les sujets du forum "BeforeDoubleClick" ou encore "SelectionChange"

A noter que comme tu es dans la feuil2, ce sont les évènements liés qu'à la feuil2 et qui feront le code que y mettra donc et que cette déclaration de sub est unique (tu ne peux pas faire 3 fois un BeforeDoubleClick dans ta feuil2 avec des instructions différentes, cela n'a aucun sens en gros)

Et si tu es curieux dans ThisWorkBook tu as les événements lié à l'ensemble du classeur du genre "Open" qui se lancera quand la personne ouvre le classeur en activant les macros (utile pour initialiser ou lancer un userform direct), "BeforeSave" si tu veux recalculer des choses avant de sauvegarder par défaut, "BeforeClose" si tu veux faire des actions ou check avant que le fichier se ferme...voir d'interdire la fermeture tant qu'une action n'est pas faite et justement "SheetBeforeDoubleClick" qui se lancera donc sur toute les feuilles avant un double clique (l'évènements de la sheet s'activera avant celui du classeur si jamais tu as dans les deux un événèments double click par exemple) ... bref y a de quoi faire et découvrir

De plus que rien n'empêche de faire tes sub perso dans une Feuil et de pouvoir les appeler de partout mais du coup si tu supprimes la Feuil en question... toutes les lignes de codes associées parte en fumée aussi ! et adieu ton code si tu enregistres

Inversement, si tu fais tes macros dans une feuilles, en la copiant elle reprends les macros de la feuilles de base, à savoir.

En espérant ne pas t'avoir embrouillé plus qu'autre chose ^^

ECG

ECG,

Merci mille fois pour le temps que tu as consacré à ta réponse.

Je me rends compte que je n'ai absolument pas le niveau (pour le moment). Je vais devoir étudier petit à petit.

Je me suis lancé dans un fichier alors que je ne maitrise pas VBA, je m'en suis sorti grâce à des formules mais là je suis bloqué.

Donc, je me permets de joindre mon fichier (il est censuré des infos sensibles ).

Pour faire simple, je souhaite qu'un message d'avertissement apparaisse dans la feuille "calculateur" quand la cellule B75 de la feuille "prix" est supérieure à 0. Cette cellule varie en fonction de ce qui est coché dans la feuille "calculateur".

Mille merci pour ton aide.

10xlspratique.xlsm (298.50 Ko)

Bonjour Nowhereman, le forum,

Ton fichier modifié....en éspérant que ça réponde à ta demande.

Private Sub Worksheet_Activate()

'If Sheets("Prix").Range("B75").Value > 0 Then    'code simplifié
'MsgBox ("Attention!  Valeur > 0")
'End If

If IsNumeric(Sheets("Prix").Range("B75").Value) Then    'code ExcelCoreGame qui vérifie que la valeur est bien numérique
    If Sheets("Prix").Range("B75").Value > 0 Then
        MsgBox ("Attention!  Valeur > 0")
    End If
Else
    MsgBox ("Attention! B75 n'est pas un nombre")
End If

End Sub

Cordialement,

Mise à jour

J'ai réussi, c'est un bon début.

Maintenant, je constate que pour que la msgbox apparaissent, il faut cliquer dans une autre cellule de la feuille "calculateur".

J'aurais aimé que l'avertissement apparaisse dès que la cellule B75 de la feuille "prix" est > à 0.

Dans le cas qui m'occupe, cela se passe quand j'ai cliqué sur le bouton se trouvant en B75 de la feuile "calculateur".

Je mets en pièce jointe le fichier.

Merci.


xorsankukai a écrit :

Bonjour Nowhereman, le forum,

Ton fichier modifié....en éspérant que ça réponde à ta demande.

Private Sub Worksheet_Activate()

'If Sheets("Prix").Range("B75").Value > 0 Then    'code simplifié
'MsgBox ("Attention!  Valeur > 0")
'End If

If IsNumeric(Sheets("Prix").Range("B75").Value) Then    'code ExcelCoreGame qui vérifie que la valeur est bien numérique
    If Sheets("Prix").Range("B75").Value > 0 Then
        MsgBox ("Attention!  Valeur > 0")
    End If
Else
    MsgBox ("Attention! B75 n'est pas un nombre")
End If

End Sub

Cordialement,

Merci

Mais pour que ça fonctionne, je dois passer de la feuille 2 à la feuille 1.

J'aimerais que l'avertissement s'affiche quand je suis dans le feuille 1 sans devoir passer de l'une à l'autre car la feuille 2 sera masquée.

9xlspratique.xlsm (299.64 Ko)

Bonjour toutes et tous

Je ne sais pas si c'est cela

un message d'alerte au changement de la cellule B75 sup à 0

à tester

crdlt,

André

10xlspratique.xlsm (266.72 Ko)
9xlspratique-3.xlsm (265.96 Ko)
Andre13 a écrit :

Bonjour toutes et tous

Je ne sais pas si c'est cela

un message d'alerte au changement de la cellule B75 sup à 0

à tester

crdlt,

André

C'est super merci mais l'avertissement ne s'affiche que quand on passe d'une feuille à l'autre.

J'aimerai qu'il apparaisse dans la feuille 1 directement que b75 de la feuille 2 est sup à 0.

Re,

Feuil1 : inexistante

Feuil2 : Calculateur

Feuil3 : PRIX

Est-ce Feuil1 qui sera masquée ? et qui affichera le message d'alerte ?

en attente de te relire

Andre13 a écrit :

Re,

Feuil1 : inexistante

Feuil2 : Calculateur

Feuil3 : PRIX

Est-ce Feuil1 qui sera masquée ? et qui affichera le message d'alerte ?

en attente de te relire

Sorry effectivement c'est dans la feuille Calculateur que doit s'afficher l'alerte.

La feuille prix sera masquée.

Re,

Donc mon premier code devait etre le bon :

Si tu modifies une valeur dans la feuille calculateur et si B75 dans la feuille prix est supérieure à 0, alors on déclenche le message ?

Tant que B75=0, rien, meme si on agit sur la feuille calculateur.

Teste pour voir :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'If Sheets("Prix").Range("B75").Value > 0 Then    'code simplifié
'MsgBox ("Attention!  Valeur > 0")
'End If

If IsNumeric(Sheets("Prix").Range("B75").Value) Then    'code ExcelCoreGame qui vérifie que la valeur est bien numériue
    If Sheets("Prix").Range("B75").Value > 0 Then
        MsgBox ("Attention!  Valeur > 0")
    End If
Else
    MsgBox ("Attention! B75 n'est pas un nombre")
End If
End Sub

Le seul Hic, comme l'avais signalé Excelcoregame, c'est que tant que B75 est>0, à chaque action sur la feuille calculateur, tu verras apparaitre le message

Rechercher des sujets similaires à "message box simple"