Merci encore, et bonnes vacances !
JP(?) ...
Oui!
@+
LStephBonjour,
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
pasenregistré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.
LStephBonsoir,
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.
LStephBonjour,
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.
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" <lecocosteph@frite.fr> a écrit dans le message de news:
e4ri8Zi1HHA.6072@TK2MSFTNGP03.phx.gbl...
...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" <lecocosteph@frite.fr> a écrit dans le message de news:
eBqwyba1HHA.3768@TK2MSFTNGP06.phx.gbl...
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" <lecocosteph@frite.fr> a écrit dans le message de news:
uUPsnNT1HHA.4816@TK2MSFTNGP04.phx.gbl...
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.
Merci encore, et bonnes vacances !
JP(?) ...
Oui!
@+
LStephBonjour,
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
pasenregistré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.
LStephBonsoir,
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.
LStephBonjour,
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.