Problème avec une macro conditionnelle

Résolu
GIBO35 Messages postés 9 Statut Membre -  
GIBO35 Messages postés 9 Statut Membre -
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. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    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. »
    0
  2. GIBO35 Messages postés 9 Statut Membre
     
    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
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    0
  4. GIBO35 Messages postés 9 Statut Membre
     
    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
    0