XL 2010 Verouillage de cellules et macro

alexandra13

XLDnaute Nouveau
Bonjour,

Tout d'abord, j'apprécie vraiment la qualité de ce forum ! Beaucoup d'aide en ligne, mais je n'ai pas encore trouvé mon petit bonheur.

Je débute en macro, un collèque m'a créé et expliqué la macro présente dans mon fichier.
Tout fonctionne bien, les données sont saisies en B21, et de C23 à G24.
Les calculs sont fait au fur et à mesure de la saisie (en itérant ligne après ligne), et sont protégés une fois la saisie faite.
Cela répondait exactement à mon besoin.

MAIS

Depuis l'écriture de la macro, mon fichier a évolué.
Je souhaite maintenant
1/ autoriser également la saisie sur la plage de P28 à AE28, au fur et à mesure de la saisie (en itérant ligne après ligne).
2/ protéger la dernière plage saisie, une fois la saisie faite.

Je ne sais pas comment faire. Pouvez-vous m'aider ?

Merci !
Alexandra
 

Pièces jointes

  • Test macro -v2.xlsm
    98.5 KB · Affichages: 31

alexandra13

XLDnaute Nouveau
Re,
Vraiment désolée, pour moi il n'y a pas de protection sur la feuille.

J'ai rechargé le fichier à partir d'un chemin different.
Si vous voyez la feuille verrouillée en utilisant l'excel ci-dessous, pouvez-vous essayer d'ôter la protection sans rentrer de mot de passe ?
Sinon, il nous faudra abandonner ...
 

Pièces jointes

  • Test macro -v2.xlsm
    98.8 KB · Affichages: 30

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Non le problème n'est pas là. Avec le mot de passe on a accès au code. Il y a une macro nommée CalculAbsoption et du code commenté (événement Change) dans le composant Feuil2(Carte de contrôle) (tiens je connais l'auteur...). J'aimerais savoir laquelle des deux a un rapport avec ta requête parce qu'en lisant les codes je ne comprends pas...
 

alexandra13

XLDnaute Nouveau
Re,

Il ne faut pas prendre en compte le code commenté (en vert, évènement Change).

La macro CalculAbsoption agit bien, mais lorsqu'elle protège l'onglet, elle protège la plage P28:AE28 : impossible de saisir de données manuellement.
Je voudrais
1/ que la saisie soit autorisée, puis protégée dans les plages B21 (c'est le cas actuellement), C23 à G24 (c'est le cas actuellement) et de P28 à AE28 (ce n'est pas le cas)
2/ que la macro se positionne à la ligne suivante pour permettre une autre saisie, ultérieurement (c'est pour cela que l'onglet ZN est créé)

Bien à toi,
Alexandra
 

Pièces jointes

  • upload_2018-6-25_12-51-16.png
    upload_2018-6-25_12-51-16.png
    23.7 KB · Affichages: 37

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Alexandra, le code me paraît très complexe pour si peu de choses. D'abord, tu n'as absolument pas de l'onglet ZN juste pour savoir sur quelle ligne travailler. Voilà ce que je te propose. Supprime l'onglet ZN et remplace le code par celui-ci :


VB:
Sub CalculAbsoption()
Dim CC As Worksheet 'déclare la variable CC (Carte de Contrôle)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim MA As Double 'déclare la variable MA (Moyenne Absorption)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CC = Worksheets("Carte de contrôle") 'définit l'onglet CC
CC.Unprotect 'déprotège l'onglet CC
LI = IIf(CC.Range("C28").Value = "", 28, CC.Cells(Application.Rows.Count, "C").End(xlUp).Row + 1) 'définit la ligne LI (première ligne vide de la colonne C)
For COL = 3 To 7 'boucle sue les colonnes de 3 à 7
  MA = (CC.Cells(23, COL) - CC.Cells(24, COL) - CC.Cells(21, 2)) / CC.Cells(24, COL) 'définit la moyenne d'absortion MA de la colonne de la boucle
  CC.Cells(LI, COL).Value = MA 'renvoie cette moyenne dans la ligne LI de la colonne de la boucle
Next 'prochaine colonne de la boucle
CC.Rows(LI).Cells.Locked = True  'verrouille la ligne LI
'protège l'onglet CC
CC.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
  , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
  AllowFormattingRows:=True
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
 

alexandra13

XLDnaute Nouveau
Bonjour Robert,

J'ai retesté le fichier avec un oeil plus frais : il y a un dernier os :
1/ Je déverrouille des cellules de la plage P28 à AE 28
2/Je lance la macro
3 tout va bien, les saisies sont protégées, il faut ôter la protection de la feuille pour pouvoir modifier les données.

Mon fichier est amené à être partagé. Sauf qu'un esprit malin peut ôter la protection...tant qu'un mot de passe n'existe pas.
Si je rentre un mot de passe pour vraiment bien protéger les données, la macro a besoin du mot de passe pour s'éxécuter.
Donc mon fichier ne peut être partagé en l'état.

Quelle ligne de code dois-je rentrer, et où dois-je la rentrer, pour que la macro se dévérouille avec le mot de passe ?

Merci !
Alexandra
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Alexandra, bonjour le forum,

Il faut quand même bien être conscient qu'un "esprit malin" pourrait retrouver ton mot de passe. Les protections Excel sont facilement craquables pour des balaises.
Dans le code remplace la ligne de déprotection :
CC.Unprotect

par :
CC.Unprotect "Toto"


Puis la ligne de protection :
CC.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True

par :
CC.Protect Password:="Toto", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True
En adaptant le mot de passe "Toto" à tes besoins...

 

alexandra13

XLDnaute Nouveau
Bonjour Robert, bonjour le forum,

Je vais encore avoir besoin de vos lumières...
Après discussion avec mes supérieurs, je dois totalement revoir l'ergonomie de mon fichier Excel.

Je passé donc du fichier Excel attaché au premier message de la discussion au fichier excel attaché dans cette discussion.
Du coup ça change la macro (je ne pense pas que la boucle sur les colonnes soit dorénavant possible).
J'ai modifié le code, sans succès...

Pouvez-vous m'aider pour le code ?
 

Pièces jointes

  • Absorption d'eau méthode panier -v3 macro.xlsm
    92.6 KB · Affichages: 22

Discussions similaires