Verrouillage partielle d'un classeur

L utilisation n'est pas quotidienne mais les personnes qui vont reprendre le fichier en main sont encore plus boulet que moi. Comme je change de boulot en septembre j'aimerais laisser un fichier à peu près propre pour les futurs utilisateurs. Tant que j'étais le seul à l'utiliser il y avait pas de problème. De plus le fichier servira d'éléments de preuve pour l'organisme accréditeur une fois par an pour valider notre travail. Les futurs utilisateurs sont aussi bien des médecins que des bac - 2.

A la base je voulais faire 3 niveaux :

un niveau consultation

un niveau utilisateur ( libérant quelques cellules pour la saisie de donnée)

et un niveau modérateur/administrateur qui donne la main sur l'ensemble des onglets,

et j'avait également la prétention de faire un journal de login qui ouvrirai le fichier selon le niveau de l'utilisateur...

Mais bon vu mon niveau en vba et la qualité du réseau de mon entreprise, je me suis rabattu sur un verrouillage partiel des cellules et des onglets (que galopin à réaliser avec brio et son clavier ). histoire que les macros s'executent pas trop lentement.

bonsoir,

J'ai bien planché sur ton classeur et je l'ai disséqué... Ce que je n'avais pas fait auparavant puisque je ne m'intéressait qu'à la protection.

En progressant dans la découverte, je me suis rendu compte que ce dernier avait été bâti sur des normes qui commencent un peu à dater... Je ne pense pas pouvoir remettre à plat tout le patakes pour le remettre au gout du jour. Aussi je pense qu'il vaut mieux en rester là.

Le problème est que pour gagner du temps... il y a 2 conditions maintenant au lieu d'une. Jusqu'à présent on ne protégeait que les feuilles dont les plages étaient déverouillées,

Maintenant il faut les protéger même si elles sont déjà déverouillées.

Et en plus je suppose que tu veux protéger les feuilles exclues de la précedente protection ??? C'est à dire les modèles et autres "Synthese ???

Je ne sais pas résoudre ce problème d'une manière satisfaisante avec ce type de programmation.

A mon sens la seule manière de le résoudre c'est de revenir à la macro précédente et virer le test :

If .Range("O10:X2744").Locked = True Then

ça sera plus long mais au moins tu auras l'assurance que c'est fait...

Il faut bien comprendre qu'une bonne partie du problème est issue d'un mode de programmation héritée d'Excel 5. Je le renie pas j'ai fait des prouesse en son temps avec ça, mais là on aurait bien besoin des outils des versions un peu plus récentes.

Essaie voir ça :

Dim Y, Y1, Y2, Y3, i% ' % = As integer
  For i = 1 To Worksheets.Count
      With Worksheets(i)
      Y1 = Left(.Name, 8) = "Synthese"
      Y2 = Left(.Name, 1) = "_"
      Y3 = Left(.Name, 6) = "Modele"
      Y = Y1 Or Y2 Or Y3
         If Not Y Then
               .Unprotect Password:="mdp"
               .Range("O10:X2744").Locked = False
               .EnableSelection = xlNoRestrictions
               .Protect Password:="mdp"
         Else 'Si tu veux aussi potéger les autres feuilles (Synthese, Modèle...)
            .Protect Password:="mdp"
         End If
      End With
   Next
End Sub

... Tu y perdra un peu de temps mais tu y gagneras en fiabilité...

Réflexion complémentaire : Pour des projets de cette envergure, il faut vite te dépêcher d'abandonner la prog Excel 5 et rentrer à fond dans les nouveaux Outils... au moins pour cette raison ! Déprotéger 100 ou 200 feuilles pour les reprotéger aussitôt après c'est vraiment fou...

A+

Ok merci pour ttes les explications. Il est vrai que j'ai construit mon fichier au grès de mes besoins. Et j'ai commencé à contruire mes macro avec ce que j arrivais à comprendre ... .je test ça demain !

Je garde mes onglets synthèse etc.... deverrouillés.

Encore merci pour les solutions et le temps passé à comprendre mon charabia.

bonsoir,

Ne crois pas que je mésestime ton travail ! Bien au contraire...

Je n'ignore pas que pour la plupart, vous maitrisez plusieurs autres langages de programmation, et c'est souvent ce qui "colore" vos productions d'un charme exotique...

Je me suis penché à fond sur ton truc et je suis en particulier admiratif sur le fichier "Acrobat" !

Comme promis je me suis un peu amusé à lifter ton code et en particulier

Le ThisWorkbook

Le USF "U_Contrôle"

Les modules :

Affichage

Ajout_Feuille

Modérateur

Bon c'est juste un peu dégrossi : J'ai pas perdu de temps à fignoler mébon ça te donnera déjà une idée de ce que je voulais dire...

Il faudrait faire la même chose avec les modules de "synthèse" et un ou 2 autres qu'on pourrait surement réduire des 3/4 en optimisant un peu...

Je voulais t'avertir que ce fichier frise l'apoplexie. Au fil de mes modifs la taille à tendance à augmenter démesurément.

J'en suis arrivé à 18 Mo. Ce qui signifie que le fichier sature avec beaucoup de résidus de bricolage.

J'ai donc du le compresser fortement

1 - en .xlsb

2 - en le zippant

Je suppose que si ça m'est arrivé ça ne va pas tarder à t'arriver aussi :

Je t'engage donc à être très prudent avec ton classeur parce que quand ça part comme ça, ça finit souvent par un gros plantage...

Moi quand ça commence comme ça je fais carrément un clone de mon fichier. Mais pas en exportant les feuilles hein ! Sinon tu exporte en même temps tous les résidus de bricolage. Il faut d'abord préparer autant de feuille que tu vas dupliquer, Les nommer comme l'original puis il faut tout basculer en Copier / Coller avec les zones exacte de travail... Si tu importes les feuilles entières tu as toutes les chances d'importer aussi 1000000 de lignes formatées pour rien, le tout multiplié par 100 ou 200 feuilles....

Pareil pour les modules, il faut d'abord les optimiser ensuite les copier / Coller en mode Texte si tu fais glisser les modules d'un projet à l'autre, tu vas importer aussi les résidus de construction...

Il n'y a guère que le USF qui ne craint pas trop, il y a peu de code donc peu de chance qu'il embarque beaucoup de vieux souvenirs...

Bon enfin si tu veux regarder mon essai :

Mon fichier de W

A+

Bonsoir,

J'ai parcouru le fichier, effectivement c'est nettement plus épuré., bien que certain passage me semble encore obscure.

Quand je vois tes codes je me dis que j'aurai du poster mes problèmes plutôt.

j'ai juste constater un petit bug sur

Sub affiche_enceinte()
   AfficheWs ("ENC")
   AfficheWs ("PCE")
   With Sheets("Synthese des enceintes")
      .Visible = xlSheetVisible
      .Select
      .Cells.EntireColumn.Hidden = False
      .Cells.EntireRow.Hidden = False
         If .AutoFilterMode Then
             If .FilterMode Then .ShowAllData
         End If
         .Range("A10:AB10").AutoFilter
         If .AutoFilterMode = False Then
             .Range("A10:AB10").AutoFilter
         End If
      .Cells(1, 10).Select
   End With
End Sub

Seul les PCE s'affichent.

et j'arrive pas à modifier le zoom d'affichage des syntheses, n'y la colonne qui fige les volets, mais ca reste du fignolage.

pour info

vous maîtrisez plusieurs autres langages de programmation, et c'est souvent ce qui "colore" vos productions d'un charme exotique...

non je maîtrise qu' un peu le français et vaguement l'anglais et l’allemand, je suis juste technicien de laboratoire.

je suis en particulier admiratif sur le fichier "Acrobat" !

je vois meme pas de quoi tu parles mais merci c'est toujours bon a prendre !

Il faut d'abord préparer autant de feuille que tu vas dupliquer, Les nommer comme l'original puis il faut tout basculer en Copier / Coller

tu as une macro qui sais faire ça? à la main c'est titanesque !

Bonjour,

Pas tant que ça..

Tu peux t'aider d'un classeur intermédiaire :

Slave.xlsm

Créer un Fichier Cible (Cible.xlsm)

Ouvrir ton fichier Source

Ensuite (en petit nègre)

For each o in Source

FichierSource.Worksheets.Add Name := o.Name

Next

Les feuilles sont crées

Après on peut encore s'aider un peu de VBA, mais je pense que tu irais aussi vite à sélectionner chaque feuille et à faire un Copier / Coller strict de la plage utile...

Il faut pas hésiter à créer des routines dans Slave pour lister tout ce dont tu as besoin...

La liste des names du Gestionnaire et le ReferTo...

En dernier tu crées les USF : ça je pense que tu pourrais les transférer par Glisser / Déplacer. C'est pas forcément ce qu'il y a de plus boulimique.

Et en dernier la création des modules... épurés !

Bon je t'accorde qu'on peut y passer une après midi... surtout quand on n'a pas l'habitude !

Si tu savais le nombre de nuits que j'ai passer à faire ce genre d'exercices...

Un petit regret quand même l'idéal serait de ne mettre aucune macro dans le fichier de travail et de mettre toutes les macros dans un classeur de macros complémentaire.

Comme ça au niveau maintenance ce serait plus cool... pas besoin de bricoler le fichier de W pour revoir le code...

Et tu peux travailler ton code sur un fichier bidon sans altérer le fichier de travail par les scories de tes nombreux essais.

A+

bonjour,

bon j'ai passer la matinée à ne rien réussir!!

j'ai essayé de faire le "clone" des noms des onglets mais rien à faire impossible de générer le moindre onglet, dans mon fichier Cible

l faut pas hésiter à créer des routines dans Slave pour lister tout ce dont tu as besoin...

La liste des names du Gestionnaire et le ReferTo...

alors là j'ai rien compris à la manœuvre.

et je suis incapable de reprendre les modules et de les épurés.

J'avoue que j'ai mis presque 3 ans à créer mon code bordélique, et je ne me vois pas réaliser tous ce que m'a dit en une 1/2 journée.... mais je ne perd pas espoirs.

je te tiens au courant dès que j'arrive à avancer sur 'un des point.

Bonjour,

Patience ! je travaille dessus...

Je me marre... tu m'étonnes qu'il va bientôt exploser le pov !

je viens de lister les feuilles et leur .usedrange.Address

La plupart sont : $A$1:$X$2744 ...Alors que la plupart des feuilles ne dépassent pas 45 lignes et 18 colonnes...

Le tout répété 189 fois...

A+

oui effectivement je me suis un peu enflammé sur le 2700 lignes avec 500 j'assurerai une traçabilité pour près de 10 ans.

et effectivement il doit y avoir qu'une feuille qui arrive jusqu’à la colonne AC. la plupart s’arrête à la colonne Q.

par contre le fichier que tu as ne représente un peu plus d'un tiers des onglets totaux. le fichier original dépasse les 50 Mo avec presque 500 onglets. et vu la qualité du réseau et de la puissance des serveurs de l'hopital ( près d'un tiers des poste sont sur un serveur win 2000 !!) j'ai toujours peur quand je lance une macro que le programme plante, ou pire face planté le serveur de l'hospital.

Pfff... rien que ça !

Tu devrais essayer de le zipper. ça te donnerai une idée du gain que tu peux espérer en travaillant l'optimisation.

Moi je pense qu'on devrait sans doute pouvoir diviser ça par 10 au moins...

Ceci dit c'est effectivement un travail considérable surtout qu'après il faut encore le tester...

ça serait aussi une raison supplémentaire d'externaliser toute la partie programme dans une macro complémentaire.

Maintenant si tu dois partir dans 2 mois ça va sans doute faire juste...

Dis moi ce qui te reste une fois zippé avec le fichier original. Je serais curieux de savoir !

Pour le fun je te donne un embryon de modèle d'un classeur de W pour dupliquer TOUSSA.

Bon c'est un peu bordélique je te l'accorde mais on part pas non plus d'un modèle de simplicité... Je suis parti du dernier fichier que je t'ai transmis hier et j'ai été jusqu'à un premier transfert de la feuille "Sources"

il y a pas mal d'explications dans le code...

Les boucles For doivent être exécutées (ou pas...) l'une après l'autres (en enlevant le quote (') qui les commente...

ensuite tu commentes à nouveau celle que tu as exécuté, pour passer à la suivante...

Bien sur les 3 classeur doivent être ouvert en même temps hein...

Je n'ai pas encore fais le Copier/Coller en multiple Format, mais bien sùr j'ai passé l'après midi dessus d'autant qu'en plus je répond à d'autres, je sors faires des courses, je bricole un peu... Je te fais des commentaires... Mébon !

Tu as le dégraisseur en pièce jointe et ma cible en l'état actuel sur ce lien

Je vais tacher d'aller jusqu'au bout et de te donner un clone fini pour que tu puisses te rendre compte de la pertinence de cette opération...

A+

11degraisseur.xlsm (22.84 Ko)

Pff du me déprime , ça parait tellement plus simple lorsque l' on voit ton code..

Si j'ai bien compris il suffit que je complete la colonne E du dégraisseur, qui correspondra aux zones copier / coller importées ?

ces zones seront définitivement figée ou dois-je prévoir un peu plus large pour les mises à jour des onglets ?

par-contre tu as utilisé une macro pour récupérer les données de la feuilles 1 du dégraisseur, j'en vais en avoir besoin lors du transfère du fichier original, non?

ici je supprime manuellement la dernière feuille(190) du nouveau classeur

j'en ai 189 dans mon test

en tous cas jusque la c'est parfait !

Bonjour,

Pour la première question, Là tu me demandes un peu de lire dans le marc de café...

Je serais tenté de répondre non... Il n'y a -en principe- aucune raison de prévoir 1 ligne de plus ni 1 colonne de plus que celles qui sont utilisées actuellement.

Naturellement il y a des prérequis, mais quand même la philosophie générale est celle là...

La macro est déjà dans le dégraisseur : il suffit de décommenter au fur et à mesure !

Sub galopin()
Dim i%, k%
Dim WbS As Workbook, WbC As Workbook, WsS As Worksheet, WsC As Worksheet
Set WbS = Workbooks("edlede_Suivi-light-lock3_VG1.xlsm")
Set WbC = Workbooks("Cible.xlsm")
k = WbS.Worksheets.Count
Application.ScreenUpdating = False
         'Ici je liste toutes les feuilles du WbS dans le Dégraisseur
For i = 1 To k
Set WsS = WbS.Worksheets(i)
ActiveWorkbook.Worksheets(1).Cells(i, 1) = WsS.Name
ActiveWorkbook.Worksheets(1).Cells(i, 4) = WsS.UsedRange.Address
Next
End Sub

Je vais être un peu coincé aujourd'hui... au moins jusqu'à 15h ou 16 h : je reçois les gamins !

Je te mets aussi un message en MP

A+

Bonjour,

En pièce jointe les macros pour virer tous tes logos et les remplacer par des moins encombrants...

Lire attentivement les commentaires...

16changelogo.xlsm (82.48 Ko)

super,

Merci ca devrait me retirer quelques Mo du pied,

Toujours aussi rapide et efficace.

a bientôt,

Bonsoir,

Mais si en plus tu arrives à mettre en place le VBA que je t'ai donné, en plus tu gagnerais en vélocité.

YAKE les 5 ou 6 modules que j'ai pas touchés qui sont indigestes mais pour le reste il va pédaler comme un dératé !

Je t'ai mis ta macro retraitée en MP. Bon j'ai pas trop touché aux Redim hein ! Même botoxé ça restera une brouette

Mébon YAPA de honte : Il n'y en a pas beaucoup qui s'y collerait...

A+

Rechercher des sujets similaires à "verrouillage partielle classeur"