Bonsoir,
Sub Deproteger()
Worksheet.Unprotect(MotDePasse)
end sub
Et bien sur l'inverse pour la protéger :
Sub Deproteger()
Worksheet.Protect(.............)
End sub
mais dans le cas de la protection, il y a un très grand nombre d'argume nts
possible (histoire de cocher ou non les cases qui vont bien... :
Worksheet.Protect(MotDePasse, ObjetsDessin, Contenu, Scénarios,
InterfaceUtilisateurUniquement, AutoriserCellulesMiseEnForme,
AutoriserColonnesMiseEnForme, AutoriserLignesMiseEnForme,
AutoriserInsertionColonnes, AutoriserInsertionLignes,
AutoriserInsertionLiensHypertexte, AutoriserSuppressionColonnes,
AutoriserSuppressionLignes, AutoriserTri, AutoriserFiltrage,
AutoriserUtilisationTableauxCroisésDynamiques)
Courage et persévérence...
Gérald ROUSSEL.
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Bonsoir,
Sub Deproteger()
Worksheet.Unprotect(MotDePasse)
end sub
Et bien sur l'inverse pour la protéger :
Sub Deproteger()
Worksheet.Protect(.............)
End sub
mais dans le cas de la protection, il y a un très grand nombre d'argume nts
possible (histoire de cocher ou non les cases qui vont bien... :
Worksheet.Protect(MotDePasse, ObjetsDessin, Contenu, Scénarios,
InterfaceUtilisateurUniquement, AutoriserCellulesMiseEnForme,
AutoriserColonnesMiseEnForme, AutoriserLignesMiseEnForme,
AutoriserInsertionColonnes, AutoriserInsertionLignes,
AutoriserInsertionLiensHypertexte, AutoriserSuppressionColonnes,
AutoriserSuppressionLignes, AutoriserTri, AutoriserFiltrage,
AutoriserUtilisationTableauxCroisésDynamiques)
Courage et persévérence...
Gérald ROUSSEL.
"magic-dd" <ciolan...@gmail.com> a écrit dans le message de news:
1178654538.032062.206...@o5g2000hsb.googlegroups.com...
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Bonsoir,
Sub Deproteger()
Worksheet.Unprotect(MotDePasse)
end sub
Et bien sur l'inverse pour la protéger :
Sub Deproteger()
Worksheet.Protect(.............)
End sub
mais dans le cas de la protection, il y a un très grand nombre d'argume nts
possible (histoire de cocher ou non les cases qui vont bien... :
Worksheet.Protect(MotDePasse, ObjetsDessin, Contenu, Scénarios,
InterfaceUtilisateurUniquement, AutoriserCellulesMiseEnForme,
AutoriserColonnesMiseEnForme, AutoriserLignesMiseEnForme,
AutoriserInsertionColonnes, AutoriserInsertionLignes,
AutoriserInsertionLiensHypertexte, AutoriserSuppressionColonnes,
AutoriserSuppressionLignes, AutoriserTri, AutoriserFiltrage,
AutoriserUtilisationTableauxCroisésDynamiques)
Courage et persévérence...
Gérald ROUSSEL.
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Si tu travailles réseau, tu devrais expliquer davantage l'environnement dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l'ext ension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Windows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés que toi.
B ) La problématique est le même pour le classeur Perso.xls qui sert ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) que t u peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour réso udre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, fac ile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Si tu travailles réseau, tu devrais expliquer davantage l'environnement dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l'ext ension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Windows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés que toi.
B ) La problématique est le même pour le classeur Perso.xls qui sert ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) que t u peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour réso udre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, fac ile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" <ciolan...@gmail.com> a écrit dans le message de news:
1178654538.032062.206...@o5g2000hsb.googlegroups.com...
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Si tu travailles réseau, tu devrais expliquer davantage l'environnement dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l'ext ension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Windows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés que toi.
B ) La problématique est le même pour le classeur Perso.xls qui sert ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) que t u peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour réso udre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, fac ile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
MichDenis
sur mon pc, j'ai tous mes classeurs excel (120 environ)
ceux ci ont leurs projet macro de proteger ce qui veux dire que si on
veut acceder au VBA, il faut ce mot de passe.
je suis le seul autorisé à modifier eventuelement des lignes de code
dans VBA
c'est pourquoi je recherche la methode pour desactiver ce mot de passe
à chaque ouverture de fichier sur et uniquement sur mon pc.
j'espere avoir été clair
merci
On 8 mai, 22:18, "MichDenis" wrote:Si tu travailles réseau, tu devrais expliquer davantage l'environnement dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l'extension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Windows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés que toi.
B ) La problématique est le même pour le classeur Perso.xls qui sert ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) que tu peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour résoudre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, facile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
MichDenis
sur mon pc, j'ai tous mes classeurs excel (120 environ)
ceux ci ont leurs projet macro de proteger ce qui veux dire que si on
veut acceder au VBA, il faut ce mot de passe.
je suis le seul autorisé à modifier eventuelement des lignes de code
dans VBA
c'est pourquoi je recherche la methode pour desactiver ce mot de passe
à chaque ouverture de fichier sur et uniquement sur mon pc.
j'espere avoir été clair
merci
On 8 mai, 22:18, "MichDenis" <michde...@hotmail.com> wrote:
Si tu travailles réseau, tu devrais expliquer davantage l'environnement dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l'extension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Windows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés que toi.
B ) La problématique est le même pour le classeur Perso.xls qui sert ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) que tu peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour résoudre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, facile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" <ciolan...@gmail.com> a écrit dans le message de news:
1178654538.032062.206...@o5g2000hsb.googlegroups.com...
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
MichDenis
sur mon pc, j'ai tous mes classeurs excel (120 environ)
ceux ci ont leurs projet macro de proteger ce qui veux dire que si on
veut acceder au VBA, il faut ce mot de passe.
je suis le seul autorisé à modifier eventuelement des lignes de code
dans VBA
c'est pourquoi je recherche la methode pour desactiver ce mot de passe
à chaque ouverture de fichier sur et uniquement sur mon pc.
j'espere avoir été clair
merci
On 8 mai, 22:18, "MichDenis" wrote:Si tu travailles réseau, tu devrais expliquer davantage l'environnement dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l'extension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Windows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés que toi.
B ) La problématique est le même pour le classeur Perso.xls qui sert ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) que tu peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour résoudre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, facile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Bonsoir, en mettant une condition du type si l'utilisateur se nomme
magic-dd, pas de protection....
If Environ("UserName") = "magic-dd" Then 'toutes les procédures de
déprotection'
dans le This Workbook_Open, peut-être?
Une piste?MichDenis
sur mon pc, j'ai tous mes classeurs excel (120 environ)
ceux ci ont leurs projet macro de proteger ce qui veux dire que si on
veut acceder au VBA, il faut ce mot de passe.
je suis le seul autorisé à modifier eventuelement des lignes de code
dans VBA
c'est pourquoi je recherche la methode pour desactiver ce mot de passe
à chaque ouverture de fichier sur et uniquement sur mon pc.
j'espere avoir été clair
merci
On 8 mai, 22:18, "MichDenis" wrote:Si tu travailles réseau, tu devrais expliquer davantage l'environnem ent dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l' extension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Wind ows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés q ue toi.
B ) La problématique est le même pour le classeur Perso.xls qui se rt ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) qu e tu peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour r ésoudre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, facile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Bonsoir, en mettant une condition du type si l'utilisateur se nomme
magic-dd, pas de protection....
If Environ("UserName") = "magic-dd" Then 'toutes les procédures de
déprotection'
dans le This Workbook_Open, peut-être?
Une piste?
MichDenis
sur mon pc, j'ai tous mes classeurs excel (120 environ)
ceux ci ont leurs projet macro de proteger ce qui veux dire que si on
veut acceder au VBA, il faut ce mot de passe.
je suis le seul autorisé à modifier eventuelement des lignes de code
dans VBA
c'est pourquoi je recherche la methode pour desactiver ce mot de passe
à chaque ouverture de fichier sur et uniquement sur mon pc.
j'espere avoir été clair
merci
On 8 mai, 22:18, "MichDenis" <michde...@hotmail.com> wrote:
Si tu travailles réseau, tu devrais expliquer davantage l'environnem ent dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l' extension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Wind ows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés q ue toi.
B ) La problématique est le même pour le classeur Perso.xls qui se rt ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) qu e tu peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour r ésoudre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, facile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" <ciolan...@gmail.com> a écrit dans le message de news:
1178654538.032062.206...@o5g2000hsb.googlegroups.com...
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
Bonsoir, en mettant une condition du type si l'utilisateur se nomme
magic-dd, pas de protection....
If Environ("UserName") = "magic-dd" Then 'toutes les procédures de
déprotection'
dans le This Workbook_Open, peut-être?
Une piste?MichDenis
sur mon pc, j'ai tous mes classeurs excel (120 environ)
ceux ci ont leurs projet macro de proteger ce qui veux dire que si on
veut acceder au VBA, il faut ce mot de passe.
je suis le seul autorisé à modifier eventuelement des lignes de code
dans VBA
c'est pourquoi je recherche la methode pour desactiver ce mot de passe
à chaque ouverture de fichier sur et uniquement sur mon pc.
j'espere avoir été clair
merci
On 8 mai, 22:18, "MichDenis" wrote:Si tu travailles réseau, tu devrais expliquer davantage l'environnem ent dans lequel tu travailles
et le rôle de la macro que tu cherches car tu vas être confronter à diverses problématiques :
A ) le menu des barres d'outils est confiné dans un fichier ayant l' extension .xlb sur ton
ordinateur, tu peux faire une recherche via l'explorateur de Wind ows
*** les usagers sur les autres ordinateurs n'ont pas accès à ce fichier et par
conséquent aux mêmes barres d'outils personnalisés q ue toi.
B ) La problématique est le même pour le classeur Perso.xls qui se rt ton poste de travail
les macros qu'il contient ne sont utiles qu''à ton poste ....
C ) Il y a la création d'une macro complémentaire (fichier xla) qu e tu peux distribuer
pour l'ensemble des usagers... mais est-ce nécessaire pour r ésoudre ton problème ?
D ) si c'est seulement pour ton poste, ce type de macro devrait faire
en supposant que tu utilises le même mot de passe pour toutes tes feuilles
( en passant, c'est une sécurité plus illusoire que réel, facile à passer outre )
DAns ton classeur Perso.xls
Sub Déprotéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.unprotect "MotDePasse"
Next
End sub
Sub protéger()
dim sh as worksheet
For each sh in ActiveWorkbook.Worksheets
sh.protect "MotDePasse", true, true, true, true
Next
End sub
"magic-dd" a écrit dans le message de news:
bonjour
par un bouton dans ma barre d'otils, je souhaiterais y affecter une
macro pour desactiver le mot de passe de mes feuilles excel pour
lequel je suis le seul à pouvoir modifier les lignes de code
le probleme est que le mot de passe etant long, cela est penible de le
retaper a chaque fois que jo'uvre une feuille.
merci de votre aide.
2 Méthodes :
A )
Dans un module standard, tu copies ce qui suit :
Et tu exécutes la macro "Test" en MODIFIANT
l'adresse et le nom du classeur à ouvrir ... à la ligne
suivante, tu dois aussi modifier le mot de passe "denis"
pour le tien.
La macro test S'EXÉCUTE à partir de L'INTERFACE
de la feuille de calcul et NON à partir de la fenêtre VBA.
Ce type de truc à déjà été soumis ici par Laurent Longre
Tu dois ajouter au classeur à partir de la fenêtre VBA, sous
le menu outils / références, la référence suivante :
"Microsoft for visual basic for applications extensibility 5.3"
Une section de la procédure Test ajoute un module ....
cela n'est pas nécessaire c'est seulement un test pour prouver
comme quoi le fichier VBA fut ouvert !
Dans le HAUT du module, tu copies ces API
'-------------------------------------
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetForegroundWindow Lib "User32" () As Long
Private Declare Function SetForegroundWindow Lib "User32" _
(ByVal hWnd As Long) As Long
'----------------------------------------
Function Déprotège(Classeur As String, MdP As String) As Boolean
Dim XLhWnd As Long, VBEhWnd As Long, CurhWnd As Long
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Workbooks(Dir$(Classeur))
On Error GoTo Fin
If Not Wbk Is Nothing Then
If Wbk.FullName <> Classeur Then Exit Function
If Not Wbk.Saved Then Wbk.Save
Else: Application.ScreenUpdating = False
End If
CurhWnd = GetForegroundWindow
XLhWnd = FindWindowA(vbNullString, Application.Caption)
With Application.VBE
VBEhWnd = FindWindowA(vbNullString, .MainWindow.Caption)
If CurhWnd = XLhWnd Then SetForegroundWindow VBEhWnd
.CommandBars.FindControl(ID:%57).Execute
' NE PAS EFFACER, même si le classeur est déjà ouvert !!!!!!
Workbooks.Open Classeur
If ActiveWorkbook.VBProject.Protection = vbext_pp_locked Then
SendKeys "~" & MdP & "~", True
.ActiveCodePane.Window.Close
End If
End With
SetForegroundWindow CurhWnd
Déprotège = True
Exit Function
Fin:
End Function
'--------------------------------------------
Sub Test()
Const Classeur = "C:classeur3.xls"
If Not Déprotège(Classeur, "denis") Then
MsgBox "Erreur"
Else
MsgBox "Projet VBA déprotégé."
'stop
With Workbooks(Dir$(Classeur))
.VBProject.VBComponents.Add vbext_ct_StdModule
.Close True
End With
Workbooks.Open Classeur
MsgBox "Projet reprotégé, ajout d'un module standard."
End If
End Sub
'-----------------------------------------------------
B ) De Bill Manville, 29-Jan-2000
Plus simple car elle n'a pas besoin des API de windows mais
requiert toujours la référence :
"Microsoft for visual basic for applications extensibility 5.3"
'need reference To VBA Extensibility
'need To make sure that the target project Is the active project
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub test()
UnprotectVBProject Workbooks("ABook.xls"), "password"
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
'
' Bill Manville, 29-Jan-2000
'
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
If VBP.Protection <> vbext_pp_locked Then Exit Sub
Application. ScreenUpdating = False
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "%{F11}%TE" & Password & "~~%{F11}", True
If VBP.Protection = vbext_pp_locked Then
' failed - maybe wrong password
SendKeys "%{F11}%TE", True
End If
' leave no evidence of the password
Password = ""
' go back To the previously active workbook
wbActive.Activate
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & Password & "~"
Application.VBE. CommandBars(1).FindControl(Id:%78, recursive:= True).Execute
WB.Save
End Sub
2 Méthodes :
A )
Dans un module standard, tu copies ce qui suit :
Et tu exécutes la macro "Test" en MODIFIANT
l'adresse et le nom du classeur à ouvrir ... à la ligne
suivante, tu dois aussi modifier le mot de passe "denis"
pour le tien.
La macro test S'EXÉCUTE à partir de L'INTERFACE
de la feuille de calcul et NON à partir de la fenêtre VBA.
Ce type de truc à déjà été soumis ici par Laurent Longre
Tu dois ajouter au classeur à partir de la fenêtre VBA, sous
le menu outils / références, la référence suivante :
"Microsoft for visual basic for applications extensibility 5.3"
Une section de la procédure Test ajoute un module ....
cela n'est pas nécessaire c'est seulement un test pour prouver
comme quoi le fichier VBA fut ouvert !
Dans le HAUT du module, tu copies ces API
'-------------------------------------
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetForegroundWindow Lib "User32" () As Long
Private Declare Function SetForegroundWindow Lib "User32" _
(ByVal hWnd As Long) As Long
'----------------------------------------
Function Déprotège(Classeur As String, MdP As String) As Boolean
Dim XLhWnd As Long, VBEhWnd As Long, CurhWnd As Long
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Workbooks(Dir$(Classeur))
On Error GoTo Fin
If Not Wbk Is Nothing Then
If Wbk.FullName <> Classeur Then Exit Function
If Not Wbk.Saved Then Wbk.Save
Else: Application.ScreenUpdating = False
End If
CurhWnd = GetForegroundWindow
XLhWnd = FindWindowA(vbNullString, Application.Caption)
With Application.VBE
VBEhWnd = FindWindowA(vbNullString, .MainWindow.Caption)
If CurhWnd = XLhWnd Then SetForegroundWindow VBEhWnd
.CommandBars.FindControl(ID:=2557).Execute
' NE PAS EFFACER, même si le classeur est déjà ouvert !!!!!!
Workbooks.Open Classeur
If ActiveWorkbook.VBProject.Protection = vbext_pp_locked Then
SendKeys "~" & MdP & "~", True
.ActiveCodePane.Window.Close
End If
End With
SetForegroundWindow CurhWnd
Déprotège = True
Exit Function
Fin:
End Function
'--------------------------------------------
Sub Test()
Const Classeur = "C:classeur3.xls"
If Not Déprotège(Classeur, "denis") Then
MsgBox "Erreur"
Else
MsgBox "Projet VBA déprotégé."
'stop
With Workbooks(Dir$(Classeur))
.VBProject.VBComponents.Add vbext_ct_StdModule
.Close True
End With
Workbooks.Open Classeur
MsgBox "Projet reprotégé, ajout d'un module standard."
End If
End Sub
'-----------------------------------------------------
B ) De Bill Manville, 29-Jan-2000
Plus simple car elle n'a pas besoin des API de windows mais
requiert toujours la référence :
"Microsoft for visual basic for applications extensibility 5.3"
'need reference To VBA Extensibility
'need To make sure that the target project Is the active project
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub test()
UnprotectVBProject Workbooks("ABook.xls"), "password"
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
'
' Bill Manville, 29-Jan-2000
'
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
If VBP.Protection <> vbext_pp_locked Then Exit Sub
Application. ScreenUpdating = False
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "%{F11}%TE" & Password & "~~%{F11}", True
If VBP.Protection = vbext_pp_locked Then
' failed - maybe wrong password
SendKeys "%{F11}%TE", True
End If
' leave no evidence of the password
Password = ""
' go back To the previously active workbook
wbActive.Activate
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & Password & "~"
Application.VBE. CommandBars(1).FindControl(Id:=2578, recursive:= True).Execute
WB.Save
End Sub
2 Méthodes :
A )
Dans un module standard, tu copies ce qui suit :
Et tu exécutes la macro "Test" en MODIFIANT
l'adresse et le nom du classeur à ouvrir ... à la ligne
suivante, tu dois aussi modifier le mot de passe "denis"
pour le tien.
La macro test S'EXÉCUTE à partir de L'INTERFACE
de la feuille de calcul et NON à partir de la fenêtre VBA.
Ce type de truc à déjà été soumis ici par Laurent Longre
Tu dois ajouter au classeur à partir de la fenêtre VBA, sous
le menu outils / références, la référence suivante :
"Microsoft for visual basic for applications extensibility 5.3"
Une section de la procédure Test ajoute un module ....
cela n'est pas nécessaire c'est seulement un test pour prouver
comme quoi le fichier VBA fut ouvert !
Dans le HAUT du module, tu copies ces API
'-------------------------------------
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetForegroundWindow Lib "User32" () As Long
Private Declare Function SetForegroundWindow Lib "User32" _
(ByVal hWnd As Long) As Long
'----------------------------------------
Function Déprotège(Classeur As String, MdP As String) As Boolean
Dim XLhWnd As Long, VBEhWnd As Long, CurhWnd As Long
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Workbooks(Dir$(Classeur))
On Error GoTo Fin
If Not Wbk Is Nothing Then
If Wbk.FullName <> Classeur Then Exit Function
If Not Wbk.Saved Then Wbk.Save
Else: Application.ScreenUpdating = False
End If
CurhWnd = GetForegroundWindow
XLhWnd = FindWindowA(vbNullString, Application.Caption)
With Application.VBE
VBEhWnd = FindWindowA(vbNullString, .MainWindow.Caption)
If CurhWnd = XLhWnd Then SetForegroundWindow VBEhWnd
.CommandBars.FindControl(ID:%57).Execute
' NE PAS EFFACER, même si le classeur est déjà ouvert !!!!!!
Workbooks.Open Classeur
If ActiveWorkbook.VBProject.Protection = vbext_pp_locked Then
SendKeys "~" & MdP & "~", True
.ActiveCodePane.Window.Close
End If
End With
SetForegroundWindow CurhWnd
Déprotège = True
Exit Function
Fin:
End Function
'--------------------------------------------
Sub Test()
Const Classeur = "C:classeur3.xls"
If Not Déprotège(Classeur, "denis") Then
MsgBox "Erreur"
Else
MsgBox "Projet VBA déprotégé."
'stop
With Workbooks(Dir$(Classeur))
.VBProject.VBComponents.Add vbext_ct_StdModule
.Close True
End With
Workbooks.Open Classeur
MsgBox "Projet reprotégé, ajout d'un module standard."
End If
End Sub
'-----------------------------------------------------
B ) De Bill Manville, 29-Jan-2000
Plus simple car elle n'a pas besoin des API de windows mais
requiert toujours la référence :
"Microsoft for visual basic for applications extensibility 5.3"
'need reference To VBA Extensibility
'need To make sure that the target project Is the active project
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub test()
UnprotectVBProject Workbooks("ABook.xls"), "password"
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
'
' Bill Manville, 29-Jan-2000
'
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
If VBP.Protection <> vbext_pp_locked Then Exit Sub
Application. ScreenUpdating = False
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "%{F11}%TE" & Password & "~~%{F11}", True
If VBP.Protection = vbext_pp_locked Then
' failed - maybe wrong password
SendKeys "%{F11}%TE", True
End If
' leave no evidence of the password
Password = ""
' go back To the previously active workbook
wbActive.Activate
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & Password & "~"
Application.VBE. CommandBars(1).FindControl(Id:%78, recursive:= True).Execute
WB.Save
End Sub