Problème avec une macro conditionnelle

Résolu
Bonsoir,

J'ai un petit souci, il est vrai que je ne maitrise toujours pas VBE...mais à mon âge !

Mon souci:
Dans la macro ci-dessous, lorsque la valeur de X3 de la feuille OA est <> de rien, la msg box s'affiche bien et on revient sur la feuille menu. Pas de souci donc !
Cependant quand la valeur est = à rien, j'aimerai que ce soit la feuille Course4_8 qui s'affiche mais c'est toujours la feuille OA qui s'active.

J'ai cherché mais en vain. Quelqu'un pourrait il me donner la solution s'il vous plait ?
Avec mes remerciements anticipés.

Bonnes fêtes de fin d'année à vous tous.

GIBO35

Sub Saisie_OA_Course4_8()
'
' Saisie_OA_Course4_8 Macro
'

'
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim mdp As String
mdp = Sheets("feuil1").Range("A1").Value
ActiveSheet.Unprotect mdp
ActiveWorkbook.Unprotect
Sheets("OA").Visible = True
Sheets("OA").Select
If Range("X3").Value <> "" Then
vRéponse = MsgBox("Cette course a déjà été validée !." & Chr(10), vbOKOnly + vbCritical, "OUPS")
If vRéponse = vbOK Then
Sheets("Menu").Visible = True
Sheets("Menu").Select
Sheets("OA").Visible = False
Exit Sub
Sheets("Course4_8").Visible = True
Sheets("Course4_8").Select
Range("J6").Select
End If
ActiveSheet.Protect mdp
ActiveWorkbook.Protect
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End If

End Sub

4 réponses

  1. Bonjour Michel,
    Je te remercie de ton aide d'autant que le résultat est tout à fait conforme à mon attente.
    Mon apprentissage continue et grâce à votre contribution j'en apprends toujours un peu plus chaque jour.

    Ma retraite est "Excel" lente ...mais qui va doucement ménage sa monture !

    Sincères remerciements (que j'adresse également à l'ensemble des contributeurs de ce forum).

    GIBO35
    1. Contributeur
      Bonjour
      If Range("X3").Value <> "" Then
           vRéponse = MsgBox("Cette course a déjà été validée !." & Chr(10), vbOKOnly + vbCritical, "OUPS")
           If vRéponse = vbOK Then
                With Sheets("Menu")
                     .Visible = True
                     .Select
                End With
                Sheets("OA").Visible = False
           End If
      Else
           Sheets("OA").Visible = False
           With Sheets("Course4_8")
                .Visible = True
                .Select
                .Range("J6").Select
           End With
      End If

      1. Bonjour Myta,
        Tout d'abord merci d'avoir pris un peu de temps pour répondre à ma question.

        Cependant, après avoir recopier ta formule dans mon fichier, le résultat reste le même, c'est toujours la feuille "OA" qui est activée (malgré son statut "false" !) et non la feuille "Course4_8".

        J'ai tenté de contourner le problème en inversant les conditions (si "X3"="" alors feuille "Course4_8" active...) Si je mets une valeur en "X3", c'est la feuille "OA" qui est activée et le nom la feuille "Menu" alors que si "X3" est égal à rien c'est bien la feuille "Course4_8" qui est active.
        En fait, La 1ère condition est toujours bien appliquée mais dans la boucle le statut de la feuille "OA" est toujours "True".
        Comme toi, j'ai pensé que les "if", "Exit Sub" ...étaient mal placés mais en vain.
        C'est pourquoi après avoir passé mon samedi après midi à rechercher le "hic", j'ai posté ma question.

        Pour info, le fichier est composé de 52 feuilles, fait plus de 21 Mo, avec des macros et formules plus ou moins complexes. Dans 95% des cas j'ai pu m'en sortir en lisant des bouquins et en consultant les forums...je pensais que cette petite macro (qui devrait être la dernière !) allait être un jeu d'enfant...(pour un vieux comme moi) et bien non. Enfin restons zen...
        Encore merci de ta disponibilté.

        Bon dimanche et bonnes fêtes de fin d'année.
        Cordialement,

        GIBO35
        1. Contributeur
          Salut le forum

          Et en modifiant le code ainsi

          Sub Saisie_OA_Course4_8()
            Dim mdp As String
              With Application
                  .ScreenUpdating = False
                  .Calculation = xlCalculationManual
              End With
          
              mdp = Sheets("feuil1").Range("A1").Value
              ActiveSheet.Unprotect mdp
              ActiveWorkbook.Unprotect
              Sheets("OA").Visible = True
              Sheets("OA").Select
          
              If Range("X3").Value <> "" Then
                  vRéponse = MsgBox("Cette course a déjà été validée !." & Chr(10), vbOKOnly + vbCritical, "OUPS")
          
                  If vRéponse = vbOK Then
                      Sheets("Menu").Visible = True
                      Sheets("Menu").Select
                      Sheets("OA").Visible = False
                      Exit Sub
                  End If
          
              Else
                  Sheets("Course4_8").Visible = True
                  Sheets("Course4_8").Select
                  Range("J6").Select
                  ActiveSheet.Protect mdp
                  ActiveWorkbook.Protect
              End If
          
              With Application
                  .ScreenUpdating = True
                  .Calculation = xlCalculationAutomatic
              End With
          
          End Sub
          

          Mytå
          Merci de donner suite à votre question, nous ne sommes pas des robots...
          « Si le déboguage est l'art d'enlever les bogues, alors la programmation doit être l'art de les créer. »