Mode plein écran avec protection

Bonjour,

J'aimerai créer un code VBA pour mettre tout mon classeur en mode plein écran comprenant :

- masquer barre d'onglet

- masquer quadrillage

- masquer barre de formule

- masquer en-tête

- masquer le ruban

- garder la ligne du haut (pour imprimer, réduire ou fermé le document, ...)

- verrouiller les barres de défilement

- et protéger les cellule verrouillé

Le code ci-dessous fonctionne très bien seulement, je n'arrive pas à protéger toutes les feuilles du classeur pour ne pas ecrire dans les cellules vérouillé.

Quelqu'un à un idée?

Merci d'avance

macro pour tout masquer :

Sub AAA_masque_tout()

   Worksheets.Select

    With Application
        .WindowState = xlMaximized
        .DisplayFormulaBar = False       ' Masquer barre de formule
        .DisplayStatusBar = False        ' Masque barre status
        .DisplayScrollBars = False
        .ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", false)" '***********
    End With
    With ActiveWindow
        .DisplayHeadings = False        ' Masque quadrillage
        .DisplayWorkbookTabs = False    ' Masquer nom onglets
    End With

           ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingRows:=True

   End Sub

macro pour tout afficher :

Sub AAA_affiche_tout()

    ' enléve la protection
    ActiveSheet.Unprotect

'activer déffilement
With ActiveSheet
    .ScrollArea = .Cells.Address
End With

    With ActiveWindow
        .DisplayHeadings = True
        .DisplayWorkbookTabs = True
    End With
    With Application
        .WindowState = xlNormal
        .DisplayFormulaBar = True
        .DisplayStatusBar = True
        .DisplayScrollBars = True
        .ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", true)" '***********
End With

End Sub

macro pour déverrouiller barre de défilement :

Sub activer_defilement()

With ActiveSheet
    .ScrollArea = .Cells.Address
End With

End Sub

et le fichier test

bonjour,

Pour toutes les feuilles au lieu de Activesheet, mettre :

Dim o as Worksheet
For Each o In Worksheets
    o.Protect
Next

A=

Super merci.

Quel serai le code pour désactiver la protection le temps d'exécuter d'autre macro?

Merci

Bonjour,

Je suis désolé mais j'ai un message d'erreur avec ce code "erreur d'incompatibilité".

Quelqu'un à une idée pour protéger toutes les cellules et les désactiver lors d'une macro?

Merci d'avance

Bonjour,

En général les intervenants n'apprécient guère ce genre de démarche parce que ça fout le binz dans leur config, tu supprimes tout et tu remets tout sans te préoccuper de la config initiale des utilisateurs qui n'ont plus qu'à se débrouiller pour restaurer leur config initial.

Une démarche soucieuse des utilisateurs mémorise leur config avant d'installer ta config, et restitue la config mémorisée avant de quitter.

Quand à déprotéger pour reprotéger ça n'a pas un grand intéret. Une feuille protégée doit permettre des modifications aux utilisateurs. En principe YAPA besoin de dérrotéger quoi qu'il arrive : Si le boulot est bien fait les macros peuvent travailler quand même avec l'option UserInterfaceOnly = True

Enfin ta demande n'est pas claire : On ne protège pas des cellules : On protège la feuille avec un mot de passe ou pas. Quand la feuille est protégée, par défaut toutes les cellules sont verrouillée. On ne peut pas les modifier. Si on les déverrouille avent de protéger la feuille, Alors on peut les modifier sans avoir à déprotéger la feuille...

A+

Bonjour Galopin,

Merci pour ta réponse.

Idéalement je cherche à se que toutes les feuilles du classeur soit verrouillés avec ou sans mot de passe (jusque la tout vas bien).

Seulement dés que j'active une macro dans le workbook ou module ou userform ça coince!

Tu me dis "Si le boulot est bien fait les macros peuvent travailler quand même avec l'option UserInterfaceOnly = True"

Peux-tu développer ta remarque STP?

Merci

Cette instruction est volatile. Aussi surtout en période de bricolage ou tu provoques involontairement beaucoup d'erreur d'exécution dans VBA. Il est prudent de la répéter dans la plupart des macros qui doivent travailler sur feuille protégée.

Sub MaBelleMacro()
Worksheets("Feuil1").Protect Password:="Galopin", UserInterfaceOnly: = True
'la suite de ton code
End Sub

Après quand ton programme est terminé, et qu'i n'y a quasiment plus d'erreur d'exécution, il est suffisant de coller ça dans le Workbook_Open

For each Ws in Worksheets

For each Ws in Worksheets
    WS.Protect Password:="Galopin", UserInterfaceOnly: = True
Next

Ou on peut également le mettre dans le Worksheet_Activate si on veut une piqure de rappel de temps en temps.

Après il y a de nombreuses options (liés à Protect), Il y a aussi des exceptions liés en particulier aux tableaux structurés. C'est à voir au cas par cas.

En tout cas moi j'ai oublié Protect/Unprotect avec mes dernières couches culottes... Je m'étonne toujours qu'on en parle encore dans les forums !

A+

Bonjour Galopin,

Merci pour ta réponse.

Alors j'ai essayé suivant tes conseils mais dès l'ouverture du fichier le message d'alerte de VBA se lance est dit :

- erreur d'exécution 1004 mot de passe non valide. vérifier touche VERR.MAJ ....

Je te joins mon fichier test pour que tu vois ce problème.

Merci d'avance pour ta réponse.

Bah ! Evidemment : Si tu mets :

Password:=""
Alors que le mot de passe est "Galopin" ou "Tartempion", ça a des chances de ne pas marcher ! VBA ne fait pas dans le marc ce café...

A+

Super galopin merci beaucoup j'ai réussit pour le verrouillage.

As-tu également des idées pour mes autres interrogations comme cette mise en forme conditionnelle avant impression que j'ai expliquer précédement?

Merci d'avance

Euh... Tu eux reformuler cette question : Je ne vois pas de quoi tu parles.

A=

Bonsoir Galopin,

Aprés avoir modifié mes code VBA pour la protection, tout marche sauf à l'ouverture du fichier.

avec le code ci-dessous qui est inséré dans le workbook_open ça met un code erreur "1004 mot de passe non valide".

Pour le moment je ne souhaite pas mettre de mot de passe.

    Dim ws As Worksheet
    For Each ws In Worksheets
    ws.Protect Password:="", UserInterfaceOnly:=True
    Next

Et si je met ce code dans workbook_sheetactivate tout fonctionne très bien mais à l'ouverture du fichier (avec le code ci dessus désactiver) ça met "la méthode de l'objet_worsheet à échoué"

'active protection
    Dim ws As Worksheet
    Set ws = ActiveSheet
    ws.Protect Password:="", UserInterfaceOnly:=True

As-tu des idées?

Merci

Quand tu cites du code, tu dois mettre tout le code :

De Sub... jusqu'à End Sub

Pas besoin de Dim, pas nesoin de Set.

S'il n'y a pas de mot de passe inutile de spécifier Password = "" ... Mets :

Private Sub Workbook_Open()
    ActiveSheet.Protect UserInterfaceOnly:=True
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Sh.Protect UserInterfaceOnly:=True
End Sub

A+

Bonjour Galopin,

je viens de modifier mon code en ce sens mais j'ai toujours un code erreur a l'ouverture "erreur définir par l'objet 1004" et le débogage m'indique l'erreur sur le code "Private Sub Workbook_SheetActivate(ByVal sh As Object)
sh.Protect UserInterfaceOnly:=True

Merci d'avance pour ton aide

Private Sub Workbook_Open()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

'active mode plein écran
    Worksheets.Select
    With Application
        .WindowState = xlMaximized
        .DisplayFormulaBar = False       ' Masquer barre de formule
        .DisplayStatusBar = False        ' Masque barre status
        .DisplayScrollBars = False
        .ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", false)" '***********

    End With
    With ActiveWindow
        .DisplayHeadings = False        ' Masque quadrillage
        .DisplayWorkbookTabs = False    ' Masquer nom onglets
    End With

'selectionne premiere ouverture si non rempli
    If WorksheetFunction.CountA(Sheets("premiere ouverture").Range("g9")) = 0 Then
    Sheets("premiere ouverture").Select
        Else: Sheets("ACCUEIL").Select

    If WorksheetFunction.CountA(Sheets("premiere ouverture").Range("g10")) = 0 Then
    Sheets("premiere ouverture").Select
        Else: Sheets("ACCUEIL").Select

    If WorksheetFunction.CountA(Sheets("premiere ouverture").Range("g11")) = 0 Then
    Sheets("premiere ouverture").Select
        Else: Sheets("ACCUEIL").Select

    If WorksheetFunction.CountA(Sheets("premiere ouverture").Range("g12")) = 0 Then
    Sheets("premiere ouverture").Select
        Else: Sheets("ACCUEIL").Select
    End If
    End If
    End If
    End If

'active protection
    ActiveSheet.Protect UserInterfaceOnly:=True

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

Private Sub Workbook_SheetActivate(ByVal sh As Object)

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

' masque pointillé mise en page
    sh.DisplayAutomaticPageBreaks = False

'active protection
    sh.Protect UserInterfaceOnly:=True

'pour verrouiller les barres defilement
    With ActiveSheet
    .ScrollArea = .UsedRange.Address
    End With

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

Si tu me donnes pas le fichier, je vais pas pouvoir te dire grand chose : C'est du débogage qu'il faut faire... Tester la feuille active et vérifier si tout à fait par hasard elle n'aurait pas un mot de passe... Si tu es toujours sur le classeur qu tu as joins, la Feuil1 en a un de mot de passe alors là évidement ça fonctionne moins bien...

Après je peux pas t'en dire plus...

A+

Bonjour Galopin,

Oui en effet ça te guidera mieux vers ma demande.

les mots de passe pour déverrouiller sont "mdp".

J'ai remarqué que le code de débogage se faisait 1 fois sur 2!

Merci d'avance

Je ne m'attendais pas à un tel W... Du coup je ne vais pas m'attarder à éplucher toutes tes feuilles ni tout tes codes d'autant que ce n'est pas du code optimisé (Il y a abondance d' ActiveSheet et de Select) C'est donc pratiquement impossible à corriger par un autre que toi.

Visiblement il y a des feuilles protégées d'autres pas. Cette macro provoque une erreur si tu la passes avec un Password erroné ou si tu la passes sans PassWord alors que la feuille est protégée.

Mon conseil est de commencer par mettre un :

Worksheets("ACCUEIL").Activate 'dans ton Workbook_BeforeClose

...Afin d'être certain que à l'ouverture tu ne vas pas te retrouver dans une feuille imprévue.

Après c'est à toi de gérer tes protections et tes mots de passe si tu en mets... Mais le premier boulot à mon avis serait d'optimiser et de normaliser un peu ton code parce que visiblement là tu es bien parti pour nous faire une usine à gaz...

Pour éviter de te faire un "roman" sur ce fil, autres commentaires éventuels en Messages privés SVP.

A+

Comme promis je te donne un classeur minimaliste qui fait ce que tu attends tout en préservant la Config des utilisateurs : En entrant on mémorise la config dans la feuille Param : Il y a des feuilles cachées : les "HWs..." et les autres Je ne les ai même pas renommées (sauf ACCUEIL que j'ai renommé "FeuilA") et en quittant on restore la Conf de l'utilisateur...

Je gère l'affichage des zones non verrouillées avec un format conditionnel : Quand on imprime, la Sub écrit "I" dans la feuille "Prm" Cellule "AA1" : le format conditionnel s'applique et les cellules ne sont plus colorées...

Pour le reste c'est juste un jeu de chaises musicales.

Tu remarqueras que lors de l'impression quand on écrit en "AA1" il n'y a pas d'erreur. Pourtant la cellule est verrouillée et la macro n'a pas envoyé de "piqure de rappel" pour pouvoir écrire. Preuve que le UserIntefaceOnly fonctionne bien. Et à la sortie, c'est pareil la cellule "AA1" est vidée pour rétablir la mise en forme de la couleur...

Je n'ai pas de Worksheets.Select et tu as bien un PleinEcran. De même je n'ai pas travaillé les "Calculation" dans la mesure ou les instructions de Conf n'interviennent pas dans le processus d'ouverture. Après pour la mise à jour des données si tu as des liens externes, bah... de toute façon il faudra ben que ça se fasse.

J'ai supprimé le OverWriting qui gère une Alerte en cas de Glisser/Déplacer : Je la juge inutile : De toute façon tu ne peut pas gérer tous les paramètres possible de la Config d'Excel donc il y aura forcément des trous das la raquette. Demander un Message d'Alerte suppose que tu autorises le Glisser Déposer mais on peut aussi l'interdire auquel cas YAPU de message... mébon encore une fois ça devient un peu extravagant il y a des limites à ce qu'on peut et/ou doit imposer.

A mon avis tu as bien d'autres choses à vérifier pour fiabiliser ton appli que ces queues de prunes. Parce que ce genre d'appli "fermé" nécessite souvent un temps considérable dans la maintenance au fil de l'eau...

Bon mais toussa c'est le plus facile... Le plus sérieux ça devrait être de faire un peu de ménage dans ton code hein !

A+

58democonfetprot.xlsm (63.02 Ko)
Rechercher des sujets similaires à "mode plein ecran protection"