Microsoft 365 Pourquoi ma 1ère MsgBox n'apparait pas à l'ouverture de mon fichier

rosabelle

XLDnaute Junior
Bonjour,

Novice je viens de créer ma 1ère MsgBox grâce au tuto VBA de DavidXLD que je remercie chaleureusement.
Il faut que je m'entraîne encore car je suis pas très douée.
J'ai mis le code suivant (des plus simples) sur une feuille de mon fichier
Sub alertesaisie()
MsgBox ("Attention,saisir le coefficient ")
End Sub

J'ai mis ce code en dessous d'un autre code que j'utilise pour l'impression de certains éléments de la feuille (je ne sais pas si cette information a une importance).
Mon problème c'est que la boîte de dialogue MsgBox n'apparait plus à l'ouverture de mon fichier depuis que j'ai fait le test avec la touche F5 et ai cliqué sur "ok".
Je souhaiterais que ce message apparaisse à chaque fois qu'on ouvre le fichier.
Merci par avance pour votre analyse
A bientôt
 

Pièces jointes

  • Test msgbox.xlsx
    8.1 KB · Affichages: 1
Solution
En fait non vous n'aviez pas tous les éléments, voyez le code de ce fichier (3) :
VB:
Private Sub Workbook_Open()
Workbook_SheetActivate ActiveSheet 'lance la macro
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
With Sh.[C4]
    .Select
    If .Value = "" Then
        MsgBox "Attention, saisir le prix !", vbInformation, "Avertissement"
        CreateObject("wscript.shell").SendKeys "%{DOWN}" 'touches Alt+<BAS>, déroule la liste
    ElseIf MsgBox("Etes-vous sûr du prix de " & .Text & " ?", vbQuestion + vbYesNo, "Vérification") = vbNo Then
        CreateObject("wscript.shell").SendKeys "%{DOWN}"
    End If
End With
End Sub
wscript.shell évite la désactivation du pavé numérique par SendKeys.

Staple1600

XLDnaute Barbatruc
Re

De rien.
Mais je dois tout à mes longs séjours dans un ashram perdu dans la forêt de Brocéliande durant lesquelles l'art de la Cellule Sacrée me fut enseigné par le grand TCD (Tabulateur Céleste Défusionné)
Nous nous nourrissions en option explicit, nous désaltérant de binouses celtes ;)
 
Dernière édition:

rosabelle

XLDnaute Junior
Désolée, je devrais réfléchir un peu plus avant de vous solliciter.
Et si je voulais un avertissement conditionnel du type :
si la cellule C4 qui contient une liste déroulante de prix par exemple est vide, alors "Attention, saisissez le prix"
sinon "Attention, vérifiez le prix"
Je voudrais être sure que l'utilisateur vérifie le contenu de cette cellule C4
Ces alertes doivent figurer sur les 2 feuilles de mon fichier.
A bientôt
 

Pièces jointes

  • Test msgbox.xlsx
    8.1 KB · Affichages: 1

Staple1600

XLDnaute Barbatruc
Re

A vue de nez, je viserai la solution Données/Validation

NB: Ton nouveau fichier joint est en *.xlsx donc sans macro
D'ou la suggestion Données/Validation.

PS: Pourquoi être désolée?
Nous sommes là de notre plein gré.
Sauf certains qui sont là pour échapper à leur téléviseur ;)
 

job75

XLDnaute Barbatruc
Bonjour rosabelle, JM,

C'est sûr que maintenant ça se complique, vous allez apprendre plusieurs choses :
VB:
Private Sub Workbook_Open()
Dim w As Worksheet
For Each w In Worksheets
    If w.[C4] = "" Then
        w.Visible = xlSheetVisible 'si la feuille est masquée
        Application.Goto w.[C4]
        MsgBox "Feuille " & w.Name & " : attention, saisir le prix !", vbInformation, "Avertissement"
    End If
Next
End Sub
A+
 

Pièces jointes

  • Test msgbox(1).xlsm
    17.6 KB · Affichages: 10

rosabelle

XLDnaute Junior
Bonjour,

Merci pour votre proposition job75 mais voici les problèmes rencontrés :

-la MsgBox apparaît sur une des feuilles seulement et pas à l'ouverture de chaque feuille

-le code ne prend pas en compte les 2 situations que je peux avoir en ouvrant le fichier càd :

a) soit quand j'ouvre la feuille 2019 ou la feuille 2020 : l'utilisateur était sorti précédemment en enregistrant un prix dans la cellule C4 auquel cas je voulais que la msgbox dise ""Attention, vérifiez le prix"
b) soit l'utilisateur était sorti précédemment et avait laissé la celluce C4 vierge auquel cas je voulais que la msgbox dise "attention, saisir le prix !"

Précision : je ne veux pas que la cellule C4 soit vidée systématiquement car l'utilisateur peut vouloir enregistrer une copie et garder ce qu'il a saisi , je veux simplement qu'il soit alerté sur la nécessité de renseigner cette cellule et correctement.

Je ne sais pas si je suis très claire.
Codialement,
 

Pièces jointes

  • Test msgbox.xlsm
    18.8 KB · Affichages: 1

job75

XLDnaute Barbatruc
Alors remplacez la macro Workbook_Open par celle-ci :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
With Application
    .EnableEvents = False 'désactive les évènements pour éviter un nouveau message
    If CStr(Sh.[C4]) = "" Then
        .Goto Sh.[C4]
        MsgBox "Attention, saisir le prix !", vbInformation, "Avertissement"
    ElseIf MsgBox("Etes-vous sûr du prix de " & Sh.[C4].Text & " en feuille " & Sh.Name & " ?", vbYesNo, "Confirmation") = vbNo Then
        .Goto Sh.[C4]
    End If
    .EnableEvents = True 'réactive les évènements
End With
End Sub
Pour tester naviguez entre les feuilles de ce fichier (2).

Avec tous ces messages je suis sûr que vos utilisateurs vont hurler :)
 

Pièces jointes

  • Test msgbox(2).xlsm
    18.4 KB · Affichages: 6

rosabelle

XLDnaute Junior
Bonjour,

Encore merci pour cette autre proposition job75.
Je pense que je n'ai pas été claire : les messages ne doivent concerner et n'apparaître que la feuille sur laquelle je vais.
Quand je suis sur la feuille 2019 je n'ai pas besoin de demander à l'utilisateur de vérifier sur la feuille 2020 s'il est sûr du prix de la feuille 2020.
Les vérifications ne doivent se faire que sur la feuille que j'ouvre.
"Etes vous sür du prix?"
ou "attention saisir le prix!"
Quand je suis sur la feuille 2019, je ne m’intéresse pas à la feuille 2020.

A bientôt
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
299 956
Messages
1 980 368
Membres
207 067
dernier inscrit
Miks57450