Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1449 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel][VBA]Empêcher le changmt de mise en page

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Excel][VBA]Empêcher le changmt de mise en page

n°929544
Manu la Sc​ience
...la science ... pas toujours
Posté le 21-12-2004 à 21:59:44  profilanswer
 

Salut tout le monde,
 
J'aimerai empêcher le changement de mise en page de feuilles générées Excel par macro VBA. Les feuilles peuvent être des feuilles classiques ou des graphiques qui sont réalisées automatiquement.
 
J'ai fait une mise en page et je voudrais empêcher tout changement.
 
J'ai trouvé des codes pour empêcher l'impression mais pas le changement de mise en forme des pages.
 
Merci de vos réponses. :jap:  


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le 21-12-2004 à 21:59:44  profilanswer
 

n°929599
FlorentG
Unité de Masse
Posté le 21-12-2004 à 23:02:39  profilanswer
 

T'as une propriété Protected ou quelque chose comme ça pour un objet Sheet. Regarde dans la référence VBA pour Excel :)

n°929719
Manu la Sc​ience
...la science ... pas toujours
Posté le 22-12-2004 à 09:11:59  profilanswer
 

Voici ce que j'ai trouvé mais il n'y a rien pour empêcher la modification de la mise en page :

Code :
  1. .Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly)



---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°929725
FlorentG
Unité de Masse
Posté le 22-12-2004 à 09:18:09  profilanswer
 

L'argument Contents protège la mise en page aussi, non ?
 
Sinon sous Excel 2003, y'a toutes ces options :

Code :
  1. .Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)

n°929737
Manu la Sc​ience
...la science ... pas toujours
Posté le 22-12-2004 à 09:30:17  profilanswer
 

J'ai essayé

Code :
  1. sheet("mafeuille" ).protect Contents:=True

mais je peux modifier ma mise en page...
Ce serait quelle option pour Excel 2003 ?
 


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°929738
FlorentG
Unité de Masse
Posté le 22-12-2004 à 09:31:58  profilanswer
 

Celles-là je pense :

Code :
  1. AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows

n°929749
Manu la Sc​ience
...la science ... pas toujours
Posté le 22-12-2004 à 09:39:33  profilanswer
 

Je vais essayer mais je pense que cela ne correspond pas à ce que je souhaite.
Je fais une mise en page de feuille de calcul ou de graphe où je mets des données en entête et en pied de page pour impression.
Je souhaiterai que les personnes utilisant l'appli ne puissent pas modifier ces paramètres.
J'espère avoir été plus compréhensible...
Merci de ton intérêt...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°929786
Manu la Sc​ience
...la science ... pas toujours
Posté le 22-12-2004 à 10:18:49  profilanswer
 

Je peux modifier ma mise en page avec les options de protect...
Ca ne va pas, hélas...
Je crois que je vais me résoudre à reparamétrer la mise en page avant leur impression avec l'évènement Workbook_BeforePrint()...
 


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°929800
karoli
Posté le 22-12-2004 à 10:29:40  profilanswer
 

pour que la protection de la feuille soit efficace, ne faut-il pas aussi proteger le classeur ???

n°929801
Manu la Sc​ience
...la science ... pas toujours
Posté le 22-12-2004 à 10:32:57  profilanswer
 

Je ne pense pas car avec la protection de la feuille, je ne peux pas modifier le contenu des cellules de la feuille.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le 22-12-2004 à 10:32:57  profilanswer
 

n°929849
galopin01
Posté le 22-12-2004 à 11:10:48  profilanswer
 

Bonjour,
Oui, il ne me semble pas qu'il y ait de meilleure solution.
Mais s'il y a plusieurs feuilles dans le classeur il faut que tu inclues une clause :
Select case ActiveSheet.Index
A+

n°929938
Manu la Sc​ience
...la science ... pas toujours
Posté le 22-12-2004 à 12:31:56  profilanswer
 

galopin01 a écrit :


Select case ActiveSheet.Index


Cela marche sans, mais à quoi cela sert ?
J'ai fait cela:

Code :
  1. Private sub Workbook_BeforePrint(cancel as boolean)
  2.     With ActiveSheet.PageSetup
  3.          .LeftHeader="..."
  4.          .CenterHeader="..."
  5.          .....
  6.     End With
  7. End Sub


J'ai rajouté d'autres choses pour connaître l'utilisateur et mettre son nom dans la mise en page...
 


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°930389
galopin01
Posté le 22-12-2004 à 20:55:40  profilanswer
 

Bonsoir,
Tu vas avoir cette mise en page pour TOUTES les pages du classeur
Si tu n'as qu'une seule page à contrôler une condition if suffit
 
If ActiveSheet.Name = "MaFeuilleAControler" Then
With ActiveSheet.PageSetup  
         .LeftHeader="..."  
         .CenterHeader="..."  
         .....  
End With  
End If
 
Bien sur si ton classeur ne comporte qu'une feuille imprimable ou si elles ont toutes la même mise en page la question ne se pose pas...
 
A+

n°930472
Manu la Sc​ience
...la science ... pas toujours
Posté le 22-12-2004 à 21:28:56  profilanswer
 

Merci.
 
En effet, je vais avoir la mise en page pour toutes les feuilles. Mais c'est ce que je souhaitais, donc c'est nikel.  :sol:  
 
Encore merci à tous le monde.  :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°930699
Manu la Sc​ience
...la science ... pas toujours
Posté le 23-12-2004 à 09:44:52  profilanswer
 

C'est encore moi avec une autre question tordue...  :lol:  
 
Voilà, j'ai une macro de création de graphique qui s'exécue normalement, je mets en forme le graphique (axe, échelle,...) et lorsque je veux sauver mon travail, je fais appel à la fonction ActiveWorkbook.Save.
 
J'ai conditionné l'application pour qu'elle vérifie avant sauvegarde des "trucs" sur une feuille cachée ( :D ) (dans ThisWorkbook avec Workbook_BeforeSave).
 
La fonction de sauvegarde conditionnelle marche toute seule, mais lorsque je l'appelle dans ma macro de création de graphiques, elle ne marche plus car incapable de faire fonctionner le fonction suivante :

Code :
  1. Worksheets(mafeuille).Visible=True


J'ai tout fait pour voir ce qui ne vas pas. J'avais enlevé la mise à jour de l'écran pour ma fonction et je l'ai restauré avant l'appel de la sauvegarde => rien.
J'ai sélectionné une autre feuille que celle du graphe (feuille sélectionnée avant appel de la sauvegarde) pour voir si ce n'était pas la sélection du graphe qui empêchait de sauvegarder => rien.
 
N'y aurait il pas des limites pour ce genre de scénario de code ? J'ai d'ailleurs découvert que Excel ne permet pas de réaliser un graphe à partir d'une feuille ayant un nom trop long (plus de 20 caractères, je crois...).
 
Y a t'il quelqu'un qui a été confronté au même problème ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°931131
galopin01
Posté le 23-12-2004 à 18:44:34  profilanswer
 

Bonsoir,
Des guillemets peut-être (sinon il considère mafeuille comme une variable...)
Worksheets("mafeuille" ).Visible=True
A+

n°931153
Manu la Sc​ience
...la science ... pas toujours
Posté le 23-12-2004 à 19:10:29  profilanswer
 

Il y a bien des guillemets dans ma macro... Je me suis aperçu que dans d'autres macros faisant appel au Workbook.Save "conditionné", cela plante également. :sweat:  
Tant pis, il faut bien que l'utilisateur fasse au moins quelque chose. Charge sera à lui de sauver le travail que l'appli aura effectuée (à sa place  :lol: ).


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°931172
Profil sup​primé
Posté le 23-12-2004 à 19:34:11  answer
 

j'ai eu ce genre de probléme aussi avec une feuille cachée, et c'etait justement le fait qu'elle soit cachée qui generait une erreur.
 
Apparement VBA n'aime pas qu'on execute des codes sur des feuilles qui sont cachées.
Tu la passe en visible avant d'executer le code qui s'y trouve ?
 

n°931178
Profil sup​primé
Posté le 23-12-2004 à 19:38:06  answer
 

ah ben je viens d'essayer et ca marche quand meme :D

n°931211
Manu la Sc​ience
...la science ... pas toujours
Posté le 23-12-2004 à 20:28:31  profilanswer
 

En fait, j'ai une feuille cachée qui stocke le nom de l'utilisateur. J'ai modifié le "ThisWorkbook" de manière à vérifier l'utilisateur avant l'enregistrement. Cela fonctionne lorsque je veux enregistrer (en cliquant sur la disquette par exemple).
Mais si je fais appel à la fonction Workbook.Save dans une macro, Excel tient compte de la sauvegarde "conditionnée", mais il n'arrive pas à décacher la feuille, et donc récupérer le nom de l'utilisateur...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°931260
galopin01
Posté le 23-12-2004 à 22:03:20  profilanswer
 

Bonsoir,
Je ne pense pas.  
Visible ou non n'a rien à voir avec l'exécution d'une macro.
Tu n'as pas besoin de rendre une feuille visible pour connaitre le contenu d'une cellule : il suffit de faire  
Msgbox Worksheets("mafeuillecachée" ).Range("A1" ).Value  
...pour se rendre compte que le contenu reste accessible pour VBA.
Je pense plutôt à une autre erreur,classeur protégé par exemple ou appel d'une Private Sub?
En fait si j'ai bien compris tu essaies d'appeler Workbook_BeforeSave depuis une autre macro et celà ne PEUT pas marcher parce que Workbook_BeforeSave est Private
Aucune procédure évènementielle (Private Sub) ne devrait être appelée par une macro en tout cas elle ne PEUT pas être appelée à partir d'un autre module.
Sinon, as-tu un gestionnaire d'erreur? Il faudrait plutôt envisager un débogage. Pose un stop et effectue la zone de macro douteuse ligne par ligne avec F8 pour vérifier ce qu'il se passse.
Mais as-tu vraiment besoin de stocker le nom de l'utilisateur dans une feuille cachée? Une variable publique pourrait suffire...
A+


Message édité par galopin01 le 23-12-2004 à 22:04:07
n°931281
Manu la Sc​ience
...la science ... pas toujours
Posté le 23-12-2004 à 22:36:13  profilanswer
 

galopin01 a écrit :

Bonsoir,
Je ne pense pas.  
Visible ou non n'a rien à voir avec l'exécution d'une macro.
Tu n'as pas besoin de rendre une feuille visible pour connaitre le contenu d'une cellule : il suffit de faire  
Msgbox Worksheets("mafeuillecachée" ).Range("A1" ).Value  
...pour se rendre compte que le contenu reste accessible pour VBA.


En effet, je peux accéder sans "décacher" la feuille...

galopin01 a écrit :


Je pense plutôt à une autre erreur,classeur protégé par exemple ou appel d'une Private Sub?
En fait si j'ai bien compris tu essaies d'appeler Workbook_BeforeSave depuis une autre macro et celà ne PEUT pas marcher parce que Workbook_BeforeSave est Private
Aucune procédure évènementielle (Private Sub) ne devrait être appelée par une macro en tout cas elle ne PEUT pas être appelée à partir d'un autre module.


Je ne fais pas appel directement à Workbook_BeforeSave mais à Workbook.save... Mes modules sont tous privés et mes fonction ont des arguments factices pour éviter qu'on puisse les lancer comme on veut.

galopin01 a écrit :

Sinon, as-tu un gestionnaire d'erreur? Il faudrait plutôt envisager un débogage. Pose un stop et effectue la zone de macro douteuse ligne par ligne avec F8 pour vérifier ce qu'il se passse.


J'ai fait ce que tu as dit avant de poster mon problème et c'est là que j'ai vu qu'il exécute bien 'Worksheets("maFeuille" ).Visible = xlSheetVeryHidden' mais que cela n'a aucune action sur la feuille. Maintenant que je sais qu'on n'est pas obligé de "décacher" une feuille pour y accéder par VBA. Je pense que je pourrai me débrouiller autrement.

galopin01 a écrit :

Mais as-tu vraiment besoin de stocker le nom de l'utilisateur dans une feuille cachée? Une variable publique pourrait suffire...
A+


Je gère à la fois le nom d'utilisateur, le nom du fichier et son emplacement et une clé (xxxx-xxx-x...) donnée (pour l'utilisation de l'application).Je fais cela pour éviter que mon appli ne circule sans mon accord ou que si c'est le cas, cela se voit (voir mon problème de mise en page de feuille)


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°931290
Manu la Sc​ience
...la science ... pas toujours
Posté le 23-12-2004 à 23:29:30  profilanswer
 

Encore Merci à tous,
 
J'ai pu résoudre le problème. Je peux donc faire appel à la fonction ActiveWorkbook.Save "conditionnée" même à partir d'une macro "private". Cela ne marchait pas car je décachais la feuille, que je sélectionnais la cellule de la feuille active (normalement la feuille qui se décache) et je prenais mes infos.
Maintenant, je prends mes infos directement. Cela m'évite des traitements et je gagne du temps d'exécution.
Merci encore
 :jap:   :jap:   :jap:  
 
Joyeux Noël à tous


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°931294
Profil sup​primé
Posté le 23-12-2004 à 23:43:54  answer
 

Si ca peut t'aider ,pour supprimer temporairement l'evenement BeforeSave:
 

Code :
  1. Application.EnableEvents = False
  2. ThisWorkbook.Save
  3. Application.EnableEvents = True


 
Désactive les evenements avec EnableEvents en false puis remet en True aprés

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel][VBA]Empêcher le changmt de mise en page

 

Sujets relatifs
Inserer un son .mid sur une page html ? ( debutant )VBA EXCEL - copie de graphique
VBA EXCEL création liste de validation de donnéesGros pb de mise en page Css
[VBA] Outlook: option pour ne pas sauvegarder un email envoyéinsérer du php dans une page html resolu
[VBA Excel] [Résolu] Problème de librairies de fonctions vba 
Plus de sujets relatifs à : [Excel][VBA]Empêcher le changmt de mise en page


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR