XL 2016 finaliser mon code VBA

Linda42

XLDnaute Occasionnel
Bonjour,

Je tente d'affecter une macro à un contrôle case à cocher en souhaitant deux fonctions :
Si la case à cocher qui est dans Formulaire de saisie, a une valeur vrai, alors :
- Dans la feuille Formulaire de saisie, afficher les ligne 59-60, si faux, masquer ces lignes (le début de mon code est ok)
et (c'est là que je coince)
- Dans la feuille Fiche Stratégie, afficher et masquer les lignes citées.

Je n'arrive pas à valider mon code. Il dois me manquer qqchse mais je ne sais pas quoi. Merci pour votre aide.

Linda

Code:
Sub Essai()

Worksheets("Formulaire de saisie").Unprotect

    If Worksheets("Formulaire de saisie").Range("l58").Value = True Then

    Rows("59:60").EntireRow.Hidden = False

      Else

    Rows("59:60").EntireRow.Hidden = True

    End If

    


   Worksheets("Formulaire de saisie").Unprotect
    If Worksheets("Formulaire de saisie").Range("l58").Value = True Then

 

    Worksheets("Fiche Stratégie").Rows("134:134").EntireRow.Hidden = False

    Worksheets("Fiche Stratégie").Rows("138:138").EntireRow.Hidden = False

    Worksheets("Fiche Stratégie").Rows("142:144").EntireRow.Hidden = False

    Worksheets("Fiche Stratégie").Rows("147:151").EntireRow.Hidden = False

        Else

    Worksheets("Fiche Stratégie").Rows("134:134").EntireRow.Hidden = True

    Worksheets("Fiche Stratégie").Rows("138:138").EntireRow.Hidden = True

    Worksheets("Fiche Stratégie").Rows("142:144").EntireRow.Hidden = True

    Worksheets("Fiche Stratégie").Rows("147:151").EntireRow.Hidden = True

    Worksheets("Fiche Stratégie").Protect

    End If

Worksheets("Formulaire de saisie").Protect

End Sub
 
Solution
😂😂😂😂😂
Bonjour,
Ca c'est un piège VBA.
Il ne vous donne pas la ligne où il y a une erreur, mais la ligne qu'il ne peut pas exécuter.
Et effectivement il ne peut pas exécuter le End With car la boucle For n'est pas fermée.
Le "Next i" est en commentaire. 🙂

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Linda,
Ne serait pas Fiche stratégie ici :
VB:
Worksheets("Formulaire de saisie").Unprotect
    If Worksheets("Formulaire de saisie").Range("l58").Value = True Then
car la feuille Formulaire de saisie est déjà Unprotect.
et êtes vous sur de la position de la ligne Worksheets("Fiche Stratégie").Protect
Placée comme cela, la feuille n'est protégée que si le IF donne False, s'il donne True elle n'est pas protégée.

Un essai en aveugle :
VB:
Sub Essai()
With Worksheets("Formulaire de saisie")
    .Unprotect
    If .Range("l58").Value = True Then
        .Rows("59:60").EntireRow.Hidden = False
    Else
        .Rows("59:60").EntireRow.Hidden = True
    End If
End With
With Worksheets("Fiche Stratégie")
    .Unprotect
    If Worksheets("Formulaire de saisie").Range("l58").Value = True Then
        .Range("A134, A138, A142:A144, A147:A151").EntireRow.Hidden = False
    Else
        .Range("A134, A138, A142:A144, A147:A151").EntireRow.Hidden = True
    End If
End With
Worksheets("Fiche Stratégie").Protect
Worksheets("Formulaire de saisie").Protect
End Sub
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ou peut être encore plus simple, à tester :
Code:
Sub Essai()
Set Saisie = Worksheets("Formulaire de saisie")
Set Stratégie = Worksheets("Fiche Stratégie")
Saisie.Unprotect
Stratégie.Unprotect
If Saisie.Range("l58").Value = True Then FlagHidden = False Else FlagHidden = True
Saisie.Rows("59:60").EntireRow.Hidden = FlagHidden
Stratégie.Range("A134, A138, A142:A144, A147:A151").EntireRow.Hidden = FlagHidden
Saisie.Protect
Stratégie.Protect
End Sub
 

Linda42

XLDnaute Occasionnel
Ou peut être encore plus simple, à tester :
Code:
Sub Essai()
Set Saisie = Worksheets("Formulaire de saisie")
Set Stratégie = Worksheets("Fiche Stratégie")
Saisie.Unprotect
Stratégie.Unprotect
If Saisie.Range("l58").Value = True Then FlagHidden = False Else FlagHidden = True
Saisie.Rows("59:60").EntireRow.Hidden = FlagHidden
Stratégie.Range("A134, A138, A142:A144, A147:A151").EntireRow.Hidden = FlagHidden
Saisie.Protect
Stratégie.Protect
End Sub
Merci mais ca ne fonctionne pas.

Seul la page Formulaire se saisie réagi.

Je mets le document allégé.

La macro est affecter au contrôle "Accord-cadre"

Merci
 

Pièces jointes

  • essai.xlsm
    593.9 KB · Affichages: 2

Linda42

XLDnaute Occasionnel
Re moi ;-)
Bonjour,
Je tente de mettre un autre code vba avec deux actions et mon code ne fonctionne pas : message erreur "Erreur de compilation end with sans with", pourtant il y a bien des with

L'objectif est de récupérer des informations sur des feuilles diffrentes.
lé début du code fonctionne bien mais pas la fin.

VB:
Sub Worksheet_Activate()
Worksheets("Rapport de Choix").Unprotect
'rajout Linda
Worksheets("Fiche Stratégie").Unprotect
With Sheets("Formulaire de saisie")
    ' Remplissage Tablo : Cellule De Fiche stratégie, virgule puis Cellule à copier de Formulaire
    Tablo = Array("N6", "L23", "E8", "L25", "E9", "L27", "E10", "L29", "O8", "L31", "O9", "L33", "O10", "L35", _
                    "I12", "L38", "I13", "L40", "L15", "L44", "L16", "L46", "F20", "L42", "h46", "L62", "n46", _
                    "L64")
    For i = LBound(Tablo) To UBound(Tablo) Step 2
        If .Range(Tablo(i + 1)) <> "" Then Range(Tablo(i)) = .Range(Tablo(i + 1))
    Next i
    [E17].FormulaLocal = "=SIERREUR(RECHERCHEV($L$15;'3 - Nomenclatures_DGOS_Sept2018'!A:K;8;FAUX);"""")"
    [E17] = [E17].Value
    
End With
      
With Sheets("Fiche Stratégie")
Tablo = Array("I33", "K171", "i35", "M174", "n35", "q174", "C80", "c199", "C83", "c201")
   For i = LBound(Tablo) To UBound(Tablo) Step 2
     If .Range(Tablo(i + 1)) <> "" Then Range(Tablo(i)) = .Range(Tablo(i + 1))
    'Next i
    '[E17].FormulaLocal = "=SIERREUR(RECHERCHEV($L$15;'3 - Nomenclatures_DGOS_Sept2018'!A:K;8;FAUX);"""")"
    '[E17] = [E17].Value
    
End With

Worksheets("Rapport de Choix").Protect
Worksheets("Fiche Stratégie").Protect
End Sub

Merci
 

Discussions similaires

Statistiques des forums

Discussions
313 271
Messages
2 096 724
Membres
106 720
dernier inscrit
Alain EDZOA