XL 2016 Msgbox

scrib

XLDnaute Nouveau
Bonjour à tous le forum,

Je voulais faire une macro qui demande une confirmation de création d'une archive. J'ai mis le code suivant:
VB:
sub Creation_Archive()
    dim Archive as Boolean
    Archive = MsgBox("voulez-vous vraiment archiver cette feuille ?", vbYesNo, "Archive de l'année passée")
        If (Archive = False) Then
               Exit Sub
        Else
            Sheets("Suivi année en cours").Activate
            Sheets.Add after:=ActiveSheet
            ActiveSheet.Name = "Archive"
            End If
    end sub
Mais ça me retourne toujours "Archive = true", même si je clique sur "NON" dans la MsgBox. Pouvez-vous corriger mon code, car j'ai essayé plein de choses qui ne fonctionnent pas.
Merci
Scrib
 
Solution
@Dan, @scrib

j'ai écrit une grande explication détaillée surtout pour scrib, car il a écrit cette phrase :

« Mais ça me retourne toujours "Archive = true", même si je clique sur "NON" dans la MsgBox. »

donc c'est bien car le retour = 1 à 7 que mis dans un booléen, ça vaut toujours True.

clic sur le bouton "Non" ➯ retour : 7 ➯ c'est jamais False !

soan

soan

XLDnaute Barbatruc
Inactif
Bonjour Scrib,

je te propose ce code VBA :

VB:
Sub Creation_Archive()
  If MsgBox("voulez-vous vraiment archiver cette feuille ?", 4, _
    "Archive de l'année passée") <> 6 Then Exit Sub
  Worksheets.Add , Worksheets("Suivi année en cours")
  ActiveSheet.Name = "Archive"
End Sub

soan
 

Dan

XLDnaute Barbatruc
Bonjour

essayez comme ceci
VB:
Sub Creation_Archive()
'Sheets("Suivi année en cours").Activate
If MsgBox("voulez-vous vraiment archiver cette feuille ?", vbYesNo + vbDefaultButton2, "Archive de l'année passée") = vbYes Then
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Archive"
End If
End Sub
Si vous exécutez le code depuis la feuille "Suivi année....", vous n'avez pas besoin d'activer cette feuille avant exécution du code

Cordialement

Edit : Mais ça me retourne toujours "Archive = true"
Juste pour info, Oui logique car Msgbox vous renvoie une valeur String et pas Boolean
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Dan, scrib,

tu as écrit : « MsgBox vous renvoie une valeur String et pas Boolean »

euh, non : MsgBox retourne une valeur de type Integer :

Image 1.jpg



les valeurs renvoyées sont celles-ci :

Image 2.jpg


un booléen à 0 vaut False ; toutes les autres valeurs de ce booléen valent True ; aussi, toutes les valeurs 1 à 7 du tableau ci-dessus valent True = Vrai = -1 ; s'il y avait un retour de la valeur 0, alors il vaudrait False = Faux ; mais 0 n'est jamais retourné par MsgBox.

comme scrib a utilisé en 2ème argument vbYesNo, ça affiche les 2 boutons "Oui" et "Non" ; vbYesNo = 4 ; retour possible pour ce 2ème argument 4 : vbYes OU vbNo (6 OU 7).

c'est pourquoi j'ai proposé un code VBA qui sort de la sub si le retour est différent de 6 ; ainsi, la suite de la sub (qui ajoute la feuille "Archive" à droite de la feuille "Suivi année en cours") sera exécutée seulement si l'utilisateur a cliqué sur le bouton "Oui".​



j'aurais aussi pu mettre ce code VBA :

VB:
Sub Creation_Archive()
  If MsgBox("voulez-vous vraiment archiver cette feuille ?", 4, _
    "Archive de l'année passée") = 7 Then Exit Sub
  Worksheets.Add , Worksheets("Suivi année en cours")
  ActiveSheet.Name = "Archive"
End Sub

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Dan, @scrib

j'ai écrit une grande explication détaillée surtout pour scrib, car il a écrit cette phrase :

« Mais ça me retourne toujours "Archive = true", même si je clique sur "NON" dans la MsgBox. »

donc c'est bien car le retour = 1 à 7 que mis dans un booléen, ça vaut toujours True.

clic sur le bouton "Non" ➯ retour : 7 ➯ c'est jamais False !

soan
 

Discussions similaires

Réponses
2
Affichages
190

Statistiques des forums

Discussions
312 162
Messages
2 085 858
Membres
103 005
dernier inscrit
gilles.hery