Msgbox qui lance une macro sur pls feuilles

Résolu
Bonjour,

J ai un fichier excel avec plusieurs feuilles gerant la progression de plusieurs lancements (une feuille par gamme de produits). J ai une macro qui - a l ouverture de mon classeur - affiche pour toutes les feuilles les projets en retard. Comme le classeur comporte beaucoup de feuilles differentes, je voudrais lancer une macro a l ouverture du classeur qui demande si l utilisateur desire voir les fichiers en retard. Si oui, alors la macro se lance de feuille a feuille et montre les projets en retard, si la reponse est non, rien ne se lance sur aucune feuille.
La macro qui presente les projets en retard s appelle "retard" et j ai essayer d ecrire un module:

Sub demande()

MsgBox "Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard"
If MsgBox("Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard") = vbYes Then
Call retard
ElseIf MsgBox("Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard") = vbNo Then
End If

End Sub

__________________________
puis dans le workbook:
__________________________

Private Sub Workbook_Open()

Dim i As Integer

For i = 2 To Sheets.Count
Worksheets(i).Select
lancer
Next

Worksheets(1).Select

End Sub

Malheureusement quand j ouvre le document j ai bien une mesage box qui s affiche en me demandant si je veux voir les projets en retard mais a la reponse "No", elle se reaffiche pour toutes mes feuilles. Si la reponse est "Yes", alors il est necessaire de recliquer deux fois sur le "Yes" pour voir apparaitre la liste des projets en retard.

Si quelqu un a une idee pour nettoyer un peu tout ca, votre aide serait plus que la bienvenue.
Merci d'avance!

RCQL
Configuration: Windows XP Internet Explorer 6.0

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    MsgBox "Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard"
    If MsgBox("Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard") = vbYes Then
    Call retard
    ElseIf MsgBox("Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard") = vbNo Then
    End If

    alors la c la cagade !!!

    il te suffit juste d 1 et 1 seul Msgbox !!! sinon, il te repose la question !!!

    de +, elseif ne s utilise que dans des cas tres precis.. donc juste else suffi
    et dans ton cas, y a pas besoin, si il a repondu non, c qu il ne veut pas...

    =>

    If MsgBox("Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard") = vbYes Then
    retard
    End If
    1. ha, et une derniere chose, est il possible que lorsque la reponse est "No" des l ouverture automatique, la meme question ne se pose pas pour toutes les autres feuilles? Si la reponse est "No" des la premiere fois, rien n est lance par la suite...?
      1. Contributeur
        pour cela, il faut passer par une variable globale...

        et tu la teste avant de poser la question..

        =>

        global repquestion=true

        subdemande ()
        If (MsgBox("Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard") = vbYes )and repquestion=true Then
        repquestion=true
        retard
        else
        repquestion=false
        End If

        end sub

        Mais attention, si il repond oui, il lui reposera la question sur chaque page ; si c non, il ne lui posera plus la question avant la prochaine reouverture du fichier !!
        1. Je n'arrive pas a faire fonctionner ceci de nouveau...
          J ai colle

          Sub demande ()

          If (MsgBox("Voulez-vous voir les élements en retard?", vbYesNo, "Projets en retard") = vbYes) And repquestion = True Then
          repquestion = True
          lancer
          Else
          repquestion = False
          End If

          End Sub

          Mais dans ce cas ci, que la reponse soit Yes or No, rien ne s efface si la reponse est negative, et la macro retard ne se lance pas non plus quand la reponse est Yes
          Ou dois je placer le "global repquestion=true" ?
          1. Contributeur
            Ou dois je placer le "global repquestion=true" ?
            =>
            dans le general declaration... au tout debut de ton code vb

            c normal qui ne t affiche pas le msgbox si tu n a pas mis la variable gobale ;)
            1. il est alors marque en rouge "erreur de compilation. attendu: fin d instuction"