Une macro créant un message d'alerte [résolu]

Une macro créant un message d'alerte [résolu] - Logiciels - Windows & Software

Marsh Posté le 28-04-2009 à 15:11:24    

Bonjour j'ai tenté de faire une macro sur VBA qui avant la fermeture d'un fichier excel me pose une question attendant une réponse oui (qui alors ferme le fichier) ou non (laisse le fichier ouvert).
 
Cependant je n'ai réussi qu'à faire un message workbook before close :
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Msg = "Avez-vous vérifié l'onglet check avant de fermer ce fichier ?"
réponse = MsgBox(Msg, StyleBoîteDialogue, Title)
End Sub


Message édité par Profil supprimé le 29-04-2009 à 09:39:48
Reply

Marsh Posté le 28-04-2009 à 15:11:24   

Reply

Marsh Posté le 28-04-2009 à 16:00:09    

Voici un bout de code qui marche :

Private Sub Workbook_BeforeClose(ByRef Cancel As Boolean)
  Msg = "Avez-vous vérifié l'onglet check avant de fermer ce fichier ?"
  reponse = MsgBox(Msg, vbOKCancel, "Exit" )
  If (reponse <> 1) Then
    ' Ne ferme pas la feuille
    Cancel = True
  End If
End Sub

Reply

Marsh Posté le 29-04-2009 à 09:33:03    

olivthill a écrit :

Voici un bout de code qui marche :

Private Sub Workbook_BeforeClose(ByRef Cancel As Boolean)
  Msg = "Avez-vous vérifié l'onglet check avant de fermer ce fichier ?"
  reponse = MsgBox(Msg, vbOKCancel, "Exit" )
  If (reponse <> 1) Then
    ' Ne ferme pas la feuille
    Cancel = True
  End If
End Sub



 
Ah merci je viens d'essayer, c'est top !  
Pour comprendre  
-Oui est considéré comme la réponse 1 et non comme la réponse 0 ?
- Pourquoi mettre "ByRef" avant "Cancel as boolean".
 
 [:athome]


Message édité par Profil supprimé le 29-04-2009 à 09:38:56
Reply

Marsh Posté le 29-04-2009 à 18:16:06    

Dans mon exemple avec vbOKCancel, la réponse 1 est "OK".  
 
J'ai mis "ByRef" mais ce n'est peut-être pas obligatoire. Je l'ai mis par précaution.
 
On a le choix entre ByRef et ByValue. Je ne sais pas ce qui est pris par défaut, quand on ne l'indique pas explicitement.
 
Si c'était ByValue cela n'irait pas car le contenu de la variable Cancel serait mise sur la pile et donnée à la subroutine, qui ensuite la modifierait. Dans ce cas, après le déroulement de la subroutine, le programme appelant ne verrait pas le changement, car par convention, un programme appelant ne va pas récupérer le contenu d'une variable sur la pile.
 
Alors que si la variable Cancel est passée ByRef, alors c'est son adresse qui est mise sur la pile et donnée à la subroutine, qui ensuite va modifier la donnée qui se trouve à l'adressse indiquée sur la pile. Dans ce cas, après le déroulement de la subroutine, le programme appelant voit le changement du contenu de la variable Cancel.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed