Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb exécutions macros avec feuille protégée

11 réponses
Avatar
j-pascal
Bonjour,

Avant de poster, j'ai fait de multiples essais ... ;-)

J'ai bcp, bcp de mal avec les :

"ActiveSheet.Unprotect Password:=""" et les
"ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True"

J'ai essayé de m'inspirer d'un classeur qui avait fait l'objet d'un long fil
sur le sujet (UserInterfaceOnly), mais en vain.

La difficulté dans le cas présent, c'est que les problèmes ne sont pas
"systématiquement" reproductibles ...
Ex : dans la zone de saisies (feuille "jan 07", colonnes P à AT,
normalement, quand on clique deux fois sur une cellule, cela crée un
commentaire ... et parfois, ça ouvre la liste déroulante !!!
Idem pour les tris qui passent par "Worksheet-Change", etc et les
protections se perdent ...
Idem pour la protection des cellules vérouillées ... elles sont parfois
accessibles !!

En résumé, je ne comprends rien ;-(

Même allégé, mon classeur est trop lourd pour cjoint.com

Le code est là : http://cjoint.com/?ict07lK4xs

C'est amusant parce que j'avais sauvegardé le code dans un ficher crée avec
Notpad++ et je pensais que cjoint allait proposer le téléchargement dudit
fichier, en fait il le développe !

Sinon, c'est très joli avec :
http://notepad-plus.sourceforge.net/fr/download.php?lang=fr
avec le langage "VB" bien sûr ;-)

Merci d'avance pour vos lumières.

--
Cordialement @+
JP

1 réponse

1 2
Avatar
LSteph
Bon courage!
Merci.


Merci encore, et bonnes vacances !

JP


(?) ...
Oui!


@+

LSteph

Bonjour,

J'étudie toujours avec bcp de soin les réponses qu'on m'apporte sur
le forum. De même, j'enregistre et ouvre les classeurs qu'on met à ma
disposition sur cjoint.com. Assez souvent (comme c'est le cas pour
ton dernier classeur !) je les archive précieusement car il sont
simples et surtout très pédagogiques ;-)

Les problèmes compliqués, pris séparément, souvent "souvent"
intelligibles. Mais 2 petits problèmes combinés peuvent devenir un
GROS pb ... pour moi ;-)

Un grand merci pour l'aide que tu m'as apportée jusqu'ici et ...
bonnes vacances (?) ...

@+

JP


"LSteph" a écrit dans le message de news:

...oui tu l'as testé, j'avais mal lu la fin!
Si j'ai le temps demain avant de partir je jette un oeil.
Sinon il y a nombre de participants sur ce forum...

;-)

@+
Bonne nuit.

Bonsoir,

Merci pour tous ces détails. En te lisant, tout à l'air simple ...
;-)

Je me suis empressé d'essayer tout ceci ce matin au bureau ...

J'ai lancé un tri, ce qui m'a donné :

"Erreur d'exécution '1004':
Impossible de définir la propriété Text de la classe Characters."

(Moment de solitude ...)

Fenêtre de débogage apparue dans :
"Private Sub Worksheet_Change(ByVal Target As Range)"
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").Value (surligné en jaune !)

Je n'ai donc pas pu aller plus loin.

J'ai déjà qqch dans Workbook_open (et je pense que je n'ai pas dû
mettre ton code où il fallait :

----------------------------------------------
Sub auto_open()

'Worksheets("jan 07").Protect UserInterfaceOnly:=True

Call restitue 'ajout LSteph

Call DateEtHeure

MsgBox "Bonjour Xavier !" & Chr(10) & Chr(10) & "Nous sommes le
" & LaDate & Chr(10) & Chr(10) & "Il est " & Format(LHeure,
"hh:mm"), vbOKOnly + vbInformation, "hello"

End Sub
---------------------------------------------------------

Pour la fermeture, j'ai bcp de choses ... :

(J'ai mis seulement ton code situé entre "Private sub ... et End
Sub" )

----------------------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel
As Boolean)
Dim tst
If SaveAsUI Then
'MsgBox "Désolé " & Application.UserName & " on ne doit pas
enregistrer sous "
'MsgBox ("Désolé, vous ne pouvez pas enregistrer sous...,
vbOKOnly, option invalide")
MsgBox "Désolé, l'option Enregistrer sous... est impossible
!", vbExclamation, "choix possibles : Enregistrer ou Fermer"

Cancel = True

Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la
forme : " & "Date Heure Fichier.xls" & " ?", vbYesNo)
'& vbCrLf &

With ThisWorkbook
ChDir .Path
If tst = 6 Then
'.SaveCopyAs Format(Now, "yyyymmmdd-hhnn") & .Name
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " "
& .Name

Else
Cancel = True
End If
End With
End If

'---------------- ajout LSteph

Dim sh As Worksheet
Application.EnableCancelKey = xlDisabled

Application.ScreenUpdating = False
'Feuil3.Visible = xlSheetVisible

For Each sh In ThisWorkbook.Sheets
sh.Protect userinterfaceonly:=True
'If sh.CodeName <> "Feuil3" Then
'sh.Visible = xlSheetVeryHidden
'End If
Next

'---------------- fin ajout LSteph
End Sub

---------------------------------------------------------

Je n'ai pas traîté l'aspect 'message si macro non activée". Chaque
chose en son temps ;-)

Merci pour ton classeur joint que je garde précieusement car très
pédagogique.
Je crains que dans mon classeur, je sois confronté à des messages
d'erreurs pour les "text", les "shapes", etc.

@+ ?

JP







"LSteph" a écrit dans le message de news:

Bonjour,
...suite à l'exemple
(qui n'a aucun intérêt autre que d'exemple pour ce
userinterfaceonly et montrer qu'on peut faire un tri ..par macro,
bien sûr)

je réponds à tes questions

Oui, tout à fait basique comme protection
Si tu utilises userinterfaceonly, il ne s'agit plus de déprotèger
reprotèger, il n'y aura donc plus de soucis du style:

"ActiveSheet.Unprotect Password:=""" et les
"ActiveSheet.Protect Password:="", DrawingObjects:=True,
Contents:=True"

... ne sont pas à leurs places ... et qu'il doit manquer des



Et concernant ceci:
La question résumée serait : où faut-il mettre le
"UserInterfaceOnly" et autre "Protect.." et "Deprotect" ? J'ai
lu sur un forum :
....



Instruction à mettre dans Workbook_Open, cette propriété n'étant
pas

enregistrée avec le classeur.
C'est bien cela, dans le workbook open

On peut mettre des dispositions autres de protection en
beforesave (comme j'ai fait dans l'exemple).
Si on y met la protection elle subsitera à l'ouverture, c'est
l'intérêt,
mais seulement
tu ne pourra pas trier car le userinterfaceonly lui aura
disparu..§!...

donc il faut appeller essentiellement cette protection comme je
l'ai fait ici et comme tu avais lu:

Private Sub Workbook_Open()
Call restitue
End Sub
'''''

Sub restitue()
Dim sh As Worksheet

Application.ScreenUpdating = False
For Each sh In ThisWorkbook.Sheets
sh.Protect userinterfaceonly:=True
sh.Visible = xlSheetVisible
Feuil3.Visible = xlSheetVeryHidden
Next
End Sub

Ainsi on peut trier avec la macro prévue pour.

Cordialement.

LSteph

Bonsoir,

En l'occurence, j'ai besoin d'une protection "basique" pour
éviter les effacements par inadvertance ...

As-tu accès au code que j'ai joint ?
Avec NotePad++, ce qui est bien, c'est qu'on peut réduire le code
(je veux dire, en cliquant sur les petits "moins" ;-) ). Une
fois "épuré", pour un oeil averti, il doit être possible de voir
que les

"ActiveSheet.Unprotect Password:=""" et les
"ActiveSheet.Protect Password:="", DrawingObjects:=True,
Contents:=True"

... ne sont pas à leurs places ... et qu'il doit manquer des
"UserInterfaceOnly" ça et là ....

Si je prends un exemple, simple, j'ai vérifié sur d'autre applis,
que le fait de lancer un tri par macro sur une feuille protégée
génére des "bugs" ... Dans le cas présent, si je clique sur F8
(pas à pas) au début de ma procédure de Tri, je me retrouve dans
la procédure "Worksheet_Change", etc, et là je me dis que les
"protections" et "déprotections" consécutives provoquent des
effets non voulus ...

La question résumée serait : où faut-il mettre le
"UserInterfaceOnly" et autre "Protect.." et "Deprotect" ? J'ai lu
sur un forum :
Worksheets("Feuil1").Protect UserInterfaceOnly:=True permet de
manipuler par macro une feuille protégée, tout en laissant la
protection active par rapport aux manipulations de l'utilisateur.

Private Sub Workbook_Open()
Worksheets("Feuil1").Protect UserInterfaceOnly:=True
End Sub

Instruction à mettre dans Workbook_Open, cette propriété n'étant
pas enregistrée avec le classeur.

Dans Workbook_open ?? J'ai essayé, mais j'ai déjà pas mal de
trucs dedans et ça n'a pas marché !

Tu parles d'une solution "simple et efficace". Efficace, j'en ai
fait l'expérience, mais simple !!!

Peut-être (????) @+ ?

JP


"LSteph" a écrit dans le message de news:

Bonjour,

J'ai essayé de m'inspirer d'un classeur qui avait fait


l'objet d'un long fil sur le sujet (UserInterfaceOnly), mais en
vain.

C'est pourtant la solution simple et efficace , tu protèges
tout et par macro, on peut agir. Donc on passe par ce qui est
prévu dans le programme et pour celui qui code , quel soulagement.
Reste que l'on peut contourner la protection par une autre macro.
Alors dans ce cas, tu as au moins affaire à quelqu'un qui sait à
peu près ce qu'il fait( à bon ou mauvais essient certes ) mais
quoi qu'il en soit dans toute autre alternative faut oublier la
protection parceque même quelqu'un qui ne sait pas écrire un
bout de code a vite fait sur la toile de trouver de quoi la
faire sauter.

Pour le reste , il faudrait préciser davantage les problèmes que
tu rencontre...

Cordialement.

LSteph

Bonjour,

Avant de poster, j'ai fait de multiples essais ... ;-)

J'ai bcp, bcp de mal avec les :

"ActiveSheet.Unprotect Password:=""" et les
"ActiveSheet.Protect Password:="", DrawingObjects:=True,
Contents:=True"

J'ai essayé de m'inspirer d'un classeur qui avait fait l'objet
d'un long fil sur le sujet (UserInterfaceOnly), mais en vain.

La difficulté dans le cas présent, c'est que les problèmes ne
sont pas "systématiquement" reproductibles ...
Ex : dans la zone de saisies (feuille "jan 07", colonnes P à
AT, normalement, quand on clique deux fois sur une cellule,
cela crée un commentaire ... et parfois, ça ouvre la liste
déroulante !!!
Idem pour les tris qui passent par "Worksheet-Change", etc et
les protections se perdent ...
Idem pour la protection des cellules vérouillées ... elles sont
parfois accessibles !!

En résumé, je ne comprends rien ;-(

Même allégé, mon classeur est trop lourd pour cjoint.com

Le code est là : http://cjoint.com/?ict07lK4xs

C'est amusant parce que j'avais sauvegardé le code dans un
ficher crée avec Notpad++ et je pensais que cjoint allait
proposer le téléchargement dudit fichier, en fait il le
développe !

Sinon, c'est très joli avec :
http://notepad-plus.sourceforge.net/fr/download.php?lang=fr
avec le langage "VB" bien sûr ;-)

Merci d'avance pour vos lumières.























1 2