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

10 réponses

1 2
Avatar
LSteph
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.



Avatar
j-pascal
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.





Avatar
LSteph
Bonsoir,

exemple: http://cjoint.com/?icxBu5XwCF
une plage nommée maplage avec des cellules vérouillées sauf une colonne
pour saisir et celles verrouillées sur lesquelles on veut trier.
Une feuille avertissement (Feuil3) pour celui qui n'active pas les
macros, comprenant aussi un bouton de rétablissement pour qui vient
d'enregistrer.

''''''''''''''''''''Thisworkbook''''''''''
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
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

End Sub

Private Sub Workbook_Open()
Application.ScreenUpdating = False
Call restitue
End Sub
''''''''''''''''Module1'''''''''''''''
Sub montri1()
Feuil1.[maplage].Sort key1:=Range("c2")

End Sub
Sub montri2()
Feuil1.[maplage].Sort key1:=Range("b2")

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

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.








Avatar
LSteph
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.








Avatar
j-pascal
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.










Avatar
LSteph
Bonsoir,

As tu essayé celui que je t'ai mis sur cjoint? (cf 02/08 23:30)
http://cjoint.com/?icxBu5XwCF
(tu peux constater que cela fonctionne)

;-) je ne dis pas cela pour en ajouter un de plus
(Moment de solitude ...)


Les lignes que je lis en exemple me semblent assez... (je ne dirais pas
éloignées) mais dans l'incorporation de ce que j'avais proposé, peut
être le code ne va pas avec tout cela. Il y a effectivement un peu trop
de choses et évennements divers et variés qui semblent avoir fait
l'objet de propositions diverses à des questions toutes aussi diverses.

Repars de ce qui va bien et avance pas à pas.

(Désolé de ne pas t'aider davantage, je vais être absent du forum ces
prochains jours).

Bien Cordialement.

LSteph








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.













Avatar
LSteph
...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.













Avatar
j-pascal
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.















Avatar
LSteph
Bonjour,

1-Tu as mis call restitue, mais la sub restitue n'y est pas
et c'est elle qui remet tout à l'ouverture, si on a activé les macros
et avec userinterfaceonly en guise de protection.
A défaut le tri ne fonctionnera pas.
2-Pas sûr que le cumul de deux beforesave aille ainsi sans souci de
fermeture ou enregistrement.
Si ajout il y a , il doit avoir lieu avant enregistrement du classeur,
mais effectivement pas de la copie, sauf si'la copie, s'assortit
également des mêmes dispositions dans le workbook_open.
4-Attention j'avais utilisé Feuil3 (codename) en guise d'avertissement,
dans l'exemple en est-il ainsi dans le classeur.


(?) ...
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.


















Avatar
j-pascal
Re,

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

Bonjour,

1-Tu as mis call restitue, mais la sub restitue n'y est pas


Si, si, elle est dans un module à part !
J'ai reposté, pensant que tu étais déjà parti ...
Ca marche mieux depuis que j'ai coché "Tri" et "Objet" dans "Outils /
protection Feuille", mais ça n'enregistre pas ces modif (problème à la
fermeture que je vais étudier de plus près après lecture de ton présent
message ...)

et c'est elle qui remet tout à l'ouverture, si on a activé les macros et
avec userinterfaceonly en guise de protection.
A défaut le tri ne fonctionnera pas.

2-Pas sûr que le cumul de deux beforesave aille ainsi sans souci de
fermeture ou enregistrement.


Pas sûr non plus ;-)

Si ajout il y a , il doit avoir lieu avant enregistrement du classeur,
mais effectivement pas de la copie, sauf si'la copie, s'assortit également
des mêmes dispositions dans le workbook_open.
4-Attention j'avais utilisé Feuil3 (codename) en guise d'avertissement,
dans l'exemple en est-il ainsi dans le classeur.


Il faut que je mette à profit ce message d'alerte pour l'utilisateur.

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