Problème macro sur feuille protégée [résolu]

LOLO13130

XLDnaute Nouveau
Bonjour à tous,

Je suis débutant sur Excel et en vba, mais grâce à vos précédents conseils, j'ai réalisé un fichier utilisant 2 macros (sûrement mal écrites mais l'essentiel c'est qu'elles fonctionnent !) qui permettent de masquer/afficher des feuilles et des colonnes en fonction de la valeur de certaines cellules de la feuille "ACCUEIL".

J'ai verrouillé toutes les feuilles du classeur (méthode "protéger la feuille") par mot de passe (deblock) pour éviter une mauvaise manipulation par les futurs utilisateurs (mes élèves !).
Cependant, quand la macro se lance sur une feuille protégée, un message de débogage s'affiche.
J'ai bien essayé toutes les solutions proposées sur le forum (unprotect...), mais sans succès vu mon niveau.

Je joins le fichier en question en espérant que quelqu'un pourra me venir en aide... et éventuellement aussi répondre au problème de perte de mise en forme des images à chaque changement de valeur des cellules de la feuille "ACCUEIL".

Merci d'avance pour votre aide si précieuse pour les novices.
Laurent
 

Pièces jointes

  • Kit demi-fond N1 et N2.xlsm
    1.2 MB · Affichages: 46

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Peut-être en mettant ceci dans le module des feuilles concernées :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Protect userInterfaceOnly:=True
End Sub

A+ à tous
 

LOLO13130

XLDnaute Nouveau
Bonjour JCGL et merci pour ta réponse.
J'ai bien essayé de suivre tes conseils mais sans succès...
Je me permets de joindre les codes, si quelqu'un peut y jeter un coup d’œil expert, moi je suis dépassé.
Merci d'avance.
Laurent

CODE FEUILLE "ACCUEIL" :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Union([D12], [D14], [D16], [D18], [F28])) Is Nothing Then 'lors d'un changement de l'une des cases, on appelle la macro
    AfficherMasquerFeuilles

If Application.Intersect(Target, Range("F28")) Is Nothing Then Exit Sub
    MasquerColonnesSaisie

End If

End Sub

CODE MODULE 1 (MACRO MASQUER COLONNES) : c'est sur ce code qu'apparaît le message de débogage
Code:
Sub MasquerColonnesSaisie()

    Sheets("Résultats à remplir").Columns("C:K").Hidden = False
    Sheets("Résultats à remplir").Columns("L:W").Hidden = False
    Sheets("Notation et socle commun").Columns("C:CZ").Hidden = False

If Range("F28") = "OUI" Then
    Sheets("Résultats à remplir").Columns("C:K").Hidden = True
    Sheets("Notation et socle commun").Columns("C:BA").Hidden = True
    Sheets("Notation et socle commun").Columns("BE:BJ").Hidden = True
    Sheets("Notation et socle commun").Columns("BL").Hidden = True
    Sheets("Notation et socle commun").Columns("BO:BP").Hidden = True
    Sheets("Notation et socle commun").Columns("BR:BT").Hidden = True
    Sheets("Notation et socle commun").Columns("BW:BX").Hidden = True
    Sheets("Notation et socle commun").Columns("BZ:CA").Hidden = True
    Sheets("Notation et socle commun").Columns("CD:CE").Hidden = True
    Sheets("Notation et socle commun").Columns("CG:CH").Hidden = True
    Sheets("Notation et socle commun").Columns("CK:CL").Hidden = True
    Sheets("Notation et socle commun").Columns("CN:CO").Hidden = True
    Sheets("Notation et socle commun").Columns("CR").Hidden = True
    Sheets("Notation et socle commun").Columns("CW").Hidden = True
    Sheets("Notation et socle commun").Columns("CZ").Hidden = True

ElseIf Range("F28") = "NON" Then
    Sheets("Résultats à remplir").Columns("L:T").Hidden = True
    Sheets("Notation et socle commun").Columns("F:K").Hidden = True
    Sheets("Notation et socle commun").Columns("M").Hidden = True
    Sheets("Notation et socle commun").Columns("P:Q").Hidden = True
    Sheets("Notation et socle commun").Columns("S:U").Hidden = True
    Sheets("Notation et socle commun").Columns("X:Y").Hidden = True
    Sheets("Notation et socle commun").Columns("AA:AB").Hidden = True
    Sheets("Notation et socle commun").Columns("AE:AF").Hidden = True
    Sheets("Notation et socle commun").Columns("AH:AI").Hidden = True
    Sheets("Notation et socle commun").Columns("AL:AM").Hidden = True
    Sheets("Notation et socle commun").Columns("AO:AP").Hidden = True
    Sheets("Notation et socle commun").Columns("AS").Hidden = True
    Sheets("Notation et socle commun").Columns("AX").Hidden = True
    Sheets("Notation et socle commun").Columns("BA:CZ").Hidden = True

End If

End Sub

CODE MODULE 2 (MACRO MASQUER FEUILLES) :
Code:
Sub AfficherMasquerFeuilles()

With Sheets("ACCUEIL")
    If (.[D12] = "" Or .[D14] = "" Or .[D16] = "" Or .[D18] = "" Or .[F28] = "") Then
        Sheets("Informations à remplir").Visible = False
        Sheets("Barême à choisir").Visible = False
        Sheets("Saisie en temps réel").Visible = False
        Sheets("Saisie course n°1").Visible = False
        Sheets("Saisie course n°2").Visible = False
        Sheets("Saisie course n°3").Visible = False
        Sheets("Saisie course n°4").Visible = False
        Sheets("Résultats à remplir").Visible = False
        Sheets("Notation et socle commun").Visible = False
        Sheets("Tableau PLOTS").Visible = False
        Sheets("Tableau TEMPS").Visible = False
        Sheets("Débloquer le fichier").Visible = True
        Sheets("Listes déroulantes").Visible = False
    End If
  
    If (.[D12] <> "" And .[D14] <> "" And .[D16] <> "" And .[D18] = "1" And .[F28] = "OUI") Then
        Sheets("Informations à remplir").Visible = True
        Sheets("Barême à choisir").Visible = True
        Sheets("Saisie en temps réel").Visible = True
        Sheets("Saisie course n°1").Visible = True
        Sheets("Saisie course n°2").Visible = False
        Sheets("Saisie course n°3").Visible = False
        Sheets("Saisie course n°4").Visible = False
        Sheets("Résultats à remplir").Visible = True
        Sheets("Notation et socle commun").Visible = True
        Sheets("Tableau PLOTS").Visible = True
        Sheets("Tableau TEMPS").Visible = True
        Sheets("Débloquer le fichier").Visible = True
        Sheets("Listes déroulantes").Visible = True
    End If

    If (.[D12] <> "" And .[D14] <> "" And .[D16] <> "" And .[D18] = "2" And .[F28] = "OUI") Then
        Sheets("Informations à remplir").Visible = True
        Sheets("Barême à choisir").Visible = True
        Sheets("Saisie en temps réel").Visible = True
        Sheets("Saisie course n°1").Visible = True
        Sheets("Saisie course n°2").Visible = True
        Sheets("Saisie course n°3").Visible = False
        Sheets("Saisie course n°4").Visible = False
        Sheets("Résultats à remplir").Visible = True
        Sheets("Notation et socle commun").Visible = True
        Sheets("Tableau PLOTS").Visible = True
        Sheets("Tableau TEMPS").Visible = True
        Sheets("Débloquer le fichier").Visible = True
        Sheets("Listes déroulantes").Visible = True
    End If

    If (.[D12] <> "" And .[D14] <> "" And .[D16] <> "" And .[D18] = "3" And .[F28] = "OUI") Then
        Sheets("Informations à remplir").Visible = True
        Sheets("Barême à choisir").Visible = True
        Sheets("Saisie en temps réel").Visible = True
        Sheets("Saisie course n°1").Visible = True
        Sheets("Saisie course n°2").Visible = True
        Sheets("Saisie course n°3").Visible = True
        Sheets("Saisie course n°4").Visible = False
        Sheets("Résultats à remplir").Visible = True
        Sheets("Notation et socle commun").Visible = True
        Sheets("Tableau PLOTS").Visible = True
        Sheets("Tableau TEMPS").Visible = True
        Sheets("Débloquer le fichier").Visible = True
        Sheets("Listes déroulantes").Visible = True
    End If

    If (.[D12] <> "" And .[D14] <> "" And .[D16] <> "" And .[D18] = "4" And .[F28] = "OUI") Then
        Sheets("Informations à remplir").Visible = True
        Sheets("Barême à choisir").Visible = True
        Sheets("Saisie en temps réel").Visible = True
        Sheets("Saisie course n°1").Visible = True
        Sheets("Saisie course n°2").Visible = True
        Sheets("Saisie course n°3").Visible = True
        Sheets("Saisie course n°4").Visible = True
        Sheets("Résultats à remplir").Visible = True
        Sheets("Notation et socle commun").Visible = True
        Sheets("Tableau PLOTS").Visible = True
        Sheets("Tableau TEMPS").Visible = True
        Sheets("Débloquer le fichier").Visible = True
        Sheets("Listes déroulantes").Visible = True
    End If
      
    If (.[D12] <> "" And .[D14] <> "" And .[D16] <> "" And .[D18] <> "" And .[F28] = "NON") Then
        Sheets("Informations à remplir").Visible = True
        Sheets("Barême à choisir").Visible = True
        Sheets("Saisie en temps réel").Visible = False
        Sheets("Saisie course n°1").Visible = False
        Sheets("Saisie course n°2").Visible = False
        Sheets("Saisie course n°3").Visible = False
        Sheets("Saisie course n°4").Visible = False
        Sheets("Résultats à remplir").Visible = True
        Sheets("Notation et socle commun").Visible = True
        Sheets("Tableau PLOTS").Visible = True
        Sheets("Tableau TEMPS").Visible = True
        Sheets("Débloquer le fichier").Visible = True
        Sheets("Listes déroulantes").Visible = True
    End If
  
End With

End Sub
 

PMO2

XLDnaute Accro
Bonjour,
Essayez de remplacer le code CODE MODULE 1 (MACRO MASQUER COLONNES) par le code suivant
VB:
Sub MasquerColonnesSaisie()
Dim S1 As Worksheet
Dim S2 As Worksheet
Dim bool1 As Boolean
Dim bool2 As Boolean
'---
Set S1 = Sheets("Résultats à remplir")
Set S2 = Sheets("Notation et socle commun")
'--- Déprotection ---
If S1.ProtectContents Then
  S1.Unprotect ("deblock")
  bool1 = True
End If
If S2.ProtectContents Then
  S2.Unprotect ("deblock")
  bool2 = True
End If
'---
S1.Columns("C:K").Hidden = False
S1.Columns("L:W").Hidden = False
S2.Columns("C:CZ").Hidden = False

If Range("F28") = "OUI" Then
  S1.Columns("C:K").Hidden = True
  S2.Columns("C:BA").Hidden = True
  S2.Columns("BE:BJ").Hidden = True
  S2.Columns("BL").Hidden = True
  S2.Columns("BO:BP").Hidden = True
  S2.Columns("BR:BT").Hidden = True
  S2.Columns("BW:BX").Hidden = True
  S2.Columns("BZ:CA").Hidden = True
  S2.Columns("CD:CE").Hidden = True
  S2.Columns("CG:CH").Hidden = True
  S2.Columns("CK:CL").Hidden = True
  S2.Columns("CN:CO").Hidden = True
  S2.Columns("CR").Hidden = True
  S2.Columns("CW").Hidden = True
  S2.Columns("CZ").Hidden = True
ElseIf Range("F28") = "NON" Then
  S1.Columns("L:T").Hidden = True
  S2.Columns("F:K").Hidden = True
  S2.Columns("M").Hidden = True
  S2.Columns("P:Q").Hidden = True
  S2.Columns("S:U").Hidden = True
  S2.Columns("X:Y").Hidden = True
  S2.Columns("AA:AB").Hidden = True
  S2.Columns("AE:AF").Hidden = True
  S2.Columns("AH:AI").Hidden = True
  S2.Columns("AL:AM").Hidden = True
  S2.Columns("AO:AP").Hidden = True
  S2.Columns("AS").Hidden = True
  S2.Columns("AX").Hidden = True
  S2.Columns("BA:CZ").Hidden = True
End If
'--- Protection ---
If bool1 Then S1.Protect ("deblock")
If bool2 Then S2.Protect ("deblock")
End Sub
 

LOLO13130

XLDnaute Nouveau
Bonsoir PM02 et un immense merciiiiiiiiii !!!
Ton code fonctionne à merveille !
Je n'aurais jamais réussi sans toi et espère te renvoyer l'ascenseur un jour, dans un autre domaine qui sait..?

Merci encore au forum pour le partage de vos connaissances et compétences.
Je marque le sujet comme [résolu].

Cordialement.
Laurent
 

Discussions similaires

Réponses
4
Affichages
536
Réponses
25
Affichages
603

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof