Protéger la mise en page

chris

XLDnaute Barbatruc
Bonjour

Dans ce fil

http://www.excel-downloads.com/forum/89960-verrouiller-la-mise-en-page.html

staple donne une solution pour protéger la mise en page en agissant sur 3 éléments
Code:
Application.CommandBars("Worksheet Menu Bar").Controls("&Fichier").Controls("Mise en Page...").Enabled = False
Application.CommandBars.FindControls(ID:=30255).Item(1).Enabled = False
Application.CommandBars.FindControls(ID:=109).Item(3).Enabled = False
Le premier fait disparaître l'accès au menu Fichier, Mise en page
Le second celui à Fichier, Zone d'impression
Mais je ne sais pas à quoi correspond la troisième.

Je cherche l'identifiant

  • du menu Affichage, En-tête et pied de pages
  • du bouton page de l'aperçu
qui accèdent aussi au menu Mise en page.

De façon générale où trouver les ID des menus et boutons ?

Enfin si une autre solution existe pour interdire la modif de la mise en page et plus particulièrement des en-tête, je suis preneuse.
Mon but étant de protéger les logos, je ne peux reconstruire l'en-tête dans le beforePrint car cela nécessite le fichier image d'origine.

Merci et bon week-end
 

myDearFriend!

XLDnaute Barbatruc
Re : Protéger la mise en page

Bonjour chris,

Chris à dit:
staple donne une solution pour protéger la mise en page en agissant sur 3 éléments
Code:

Application.CommandBars("Worksheet Menu Bar").Controls("&Fichier").Controls("Mise en Page...").Enabled = False
Application.CommandBars.FindControls(ID:=30255).Item(1).Enabled = False
Application.CommandBars.FindControls(ID:=109).Item(3).Enabled = False

Le premier fait disparaître l'accès au menu Fichier, Mise en page
Le second celui à Fichier, Zone d'impression
Mais je ne sais pas à quoi correspond la troisième.
Dans l'éditeur VBE, tu fais : menu Affichage / Fenêtre d'exécution (ou Ctrl + G) et tu saisis:
Code:
? Application.CommandBars.FindControls(ID:=109).Item(3).caption
et tu fais Entrée.
Tu obtiens : "Ape&rçu avant impression"

Chris à dit:
De façon générale où trouver les ID des menus et boutons ?
Tu trouveras en téléchargement sur le présent site un fichier de Frédéric Lhommé pouvant répondre à ton attente : LIEN

Cordialement,
 

chris

XLDnaute Barbatruc
Re : Protéger la mise en page

Bonjour

Merci Didier.

J'avais finalement trouvé pour l'ID 109 mais cela n'a pas simplifié les choses car il y a plusieurs items et un seul semble fonctionner (item 2 et non 1 sur ma version 2002) et j'ai donc un nouvel inconnu à comprendre.

Le fichier de Frédéric Lhommé me servira pour d'autre cas mais il sert plus à afficher les boîtes de dialogue qu'à en interdire l'affichage du moins à mon niveau de compréhension.

Mon but est d'empêcher l'accès à l'en-tête et si, en partant du code de Staple, j'ai pu griser les accès dans les menus Excel, il reste encore l'accès via le bouton aperçu du dialogue Imprimer.
Idéalement je ne souhaite pas interdire l'aperçu mais seulement l'accès à l'en-tête.
 

myDearFriend!

XLDnaute Barbatruc
Re : Protéger la mise en page

Re,
Le fichier de Frédéric Lhommé me servira pour d'autre cas mais il sert plus à afficher les boîtes de dialogue qu'à en interdire l'affichage du moins à mon niveau de compréhension.
Heu... sauf erreur de ma part chris, ce fichier contient plusieurs onglets et te permet notamment de connaitre les ID que tu recherches... (en plus de te donner les arguments des boites de dialogue en effet).

Cordialement,
 

chris

XLDnaute Barbatruc
Re : Protéger la mise en page

RE

En fait cela liste les ID des barres d'outils Excel ou utilisateur mais pas les ID utilisés par la commande FindControls qui elle semble se référer aux menus.

Je continue mes explorations...
 

myDearFriend!

XLDnaute Barbatruc
Re : Protéger la mise en page

Re Chris,

Bien que je ne sois pas très fan de ce genre de code, voici peut-être un début de solution pour ton problème :
Code:
[COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]
[COLOR=GREEN]'myDearFriend! - www.mdf-xlpages.com[/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Workbook_Activate()
    [COLOR=NAVY]With[/COLOR] Application.CommandBars
        .FindControls(ID:=109).Item(1).OnAction = "ThisWorkbook.ApercuPerso"
        .FindControls(ID:=109).Item(3).OnAction = "ThisWorkbook.ApercuPerso"
        .FindControls(ID:=247).Item(8).Enabled = [COLOR=NAVY]False[/COLOR]
        .FindControls(ID:=4).Item(3).Enabled = [COLOR=NAVY]False
    End With
End Sub[/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Workbook_Deactivate()
    [COLOR=NAVY]With[/COLOR] Application.CommandBars
        .FindControls(ID:=109).Item(1).OnAction = ""
        .FindControls(ID:=109).Item(3).OnAction = ""
        .FindControls(ID:=247).Item(8).Enabled = [COLOR=NAVY]True[/COLOR]
        .FindControls(ID:=4).Item(3).Enabled = [COLOR=NAVY]True
    End With
End Sub[/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] ApercuPerso()
    ActiveSheet.PrintPreview [COLOR=NAVY]False
End Sub[/COLOR]
Ce code empêche l'accès au PageSetup par les voies classiques.

Un inconvénient toutefois : pour imprimer, l'utilisateur devra utiliser le bouton Imprimer de la barre d'outils standard ou passer par Aperçu avant impression...

En espérant t'avoir aidé,

Cordialement,

EDITION:
ATTENTION : En cas de problème (plantage), le code présent dans la procédure Workbook_Deactivate() devra être lancé pour rétablir le fonctionnement normal de la barre de menu.
 
Dernière édition:

myDearFriend!

XLDnaute Barbatruc
Re : Protéger la mise en page

Re,

Petit complément d'info :
En fait cela liste les ID des barres d'outils Excel ou utilisateur mais pas les ID utilisés par la commande FindControls qui elle semble se référer aux menus.
Tu as raison, je viens de vérifier. Tu n'as pas les ID des différents contrôles de la barre de menu (qui est aussi une CommandBar au même titre que les barres d'outils).

Pour ma part, je procède comme expliqué plus haut. Pour obtenir le numéro ID d'un contrôle, j'ai l'habitude de me servir tout simplement de la fenêtre d'exécution.
Par exemple, pour connaître l'ID de l'option Mise en page du menu Fichier, je m'en réfère au menu que j'ai sous les yeux et je saisis :
Code:
[COLOR=GRAY][B][I]DANS LA FENETRE D'EXECUTION (CTRL+G)[/I][/B][/COLOR]

? Application.CommandBars("Worksheet Menu Bar").Controls("Fichier").Controls("Mise en Page...").[B]ID[/B]
... et j'obtiens le bon numéro ID, à savoir 247.

L'intéret d'utiliser FindControls et l'ID ? C'est que le code peut ainsi fonctionner dans toutes les langues et toutes les configurations de barre d'outils chez l'utilisateur.

Cordialement,
 

chris

XLDnaute Barbatruc
Re : Protéger la mise en page

Bonjour
Merci Didier

J'ai fabriqué une boucle pour avoir tous les ID.
Néanmoins pour nombre d'entre eux il y a plusieurs items : je ne sais pas à quoi ils correspondent.
Par exemple pour
.FindControls(ID:=109).Item(1)

Il faut souvent que je change le numéro d'item pour que cela marche par rapport aux exemples que j'ai trouvés ou que tu m'as donnés. J'ai l'impression qu'en fonction de la version Excel ou Win cela est variable et comme mon programme doit tourner sur diverses configs, je ne sais trop comment gérer cela.

Et je cherche toujours comment ne pas tout verrouiller mais seulement l'accès à l'en-tête.

En fait si j'avais pas une image dans l'en-tête, je pourrais tout gérer dans le before print mais je n'ai pas trouvé de solution pour remettre l'image du logo si celle-ci n'est pas sur le disque, au bon endroit et avec le bon nom.

Néanmoins je conserve ta méthode pour avoir des infos dans la fénêtre d'exécution.
 

Discussions similaires

Statistiques des forums

Discussions
312 509
Messages
2 089 145
Membres
104 050
dernier inscrit
Pepito93100