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.
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'arguments
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" <ciol...@gmail.com> a écrit dans le message de news:
1178654538.0...@o5g2000hsb.googlegroups.com...
mais cela protege et deprotege la feuille de calcul et non pas l'acces
au VBA
c'est ce truc la que je souhaite
merci de ton aide quand meme
On 8 mai, 22:12, "Gérald ROUSSEL" <gerald.rous...@free.fr> wrote:
> 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'arguments
> 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...
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" <ciol...@gmail.com> a écrit dans le message de news:
1178654538.0...@o5g2000hsb.googlegroups.com...
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
> "magic-dd" <ciolan...@gmail.com> a écrit dans le message de news:
> 1178654538.032062.206...@o5g2000hsb.googlegroups.com...
magic-dd a écrit :
mais comment ?
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
si ca mamrche merci
et si ca marche pas merci kan meme
à bientot
Les codes que tu nous fournis sont très intéressants et non moins complexes.
J'ai donc essayé d'en faire une petite synthèse susceptible de répondre au
problème initialement soulevé par Magic DD.
Citation:
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.
Fin de citation.
Voici ce que j'ai testé avec succès sur ma configuration (WinXP SP2 + XL
2003):
Dans le classeur Perso.xls
Ouvrir VBE>Outils>References
Cocher Microsoft Visual Basic for Applications Extensibility 5.3
Puis insérer un module de classe (garder le nom Classe1 par défaut) et y
copier le code suivant:
Public WithEvents ThisApplication As Application
Private Sub ThisApplication_WorkbookOpen(ByVal Wb As Workbook)
If Wb.VBProject.Protection = vbext_pp_locked Then
Application.VBE.CommandBars.FindControl(, 2578).Execute
SendKeys "shazam" 'Le mdp de tous tes classeurs
SendKeys "{ENTER}"
SendKeys "{ESC}" 'Quitte la fenetre propriete du projet
End If
End Sub
Dans le module ThisWorkbook de Perso.xls copier le code suivant:
Dim xlApp As Classe1
Private Sub Workbook_Open()
Set xlApp = New Classe1
Set xlApp.ThisApplication = Application
End Sub
Enregistrer le tout, fermer Excel, ouvrir Excel. Ouvrir un classeur
quelconque, normalement le projet VBA est dévérouillé sans qu'on ait rien eu
à faire si tant est bien sur que le mot de passe soit correct, dans le cas
contraire la boite de dialogue demandant le mot de passe s'affiche.
Cordialement,
Manu/
"tissot.emmanuel" <tissot....@free.fr> a écrit dans le message de news:
uuBeY6c...@TK2MSFTNGP02.phx.gbl...
super ca mais j'ai une erreur ici
dans class1
If Wb.VBProject.Protection = vbext_pp_locked Then
surligné en jaune et ca bloque
prrrrrr je bloque
comme depuis le debut d'ailleurs
On 9 mai, 12:36, "MichDenis" <michde...@hotmail.com> wrote:
> Une façon intéressante de traiter la problématique...
> C'est Magic ...;-)
>
> "tissot.emmanuel" <tissot.emman...@free.fr> a écrit dans le message de news:
> uuBeY6ckHHA....@TK2MSFTNGP02.phx.gbl...
| Dans le classeur Perso.xls
| Ouvrir VBE>Outils>References
| Cocher Microsoft Visual Basic for Applications Extensibility 5.3
Et n'oublie pas par la suite d'enregistrer ton classeur perso.xls.
"magic-dd" <ciol...@gmail.com> a écrit dans le message de news:
1178737167....@q75g2000hsh.googlegroups.com...
On 9 mai, 21:26, "MichDenis" <michde...@hotmail.com> wrote:
> Tu as oublié cet opération à faire lorsque la fenêtre de l'éditeur
> de code de ton classeur Perso.xls est active.
>
> | Dans le classeur Perso.xls
> | Ouvrir VBE>Outils>References
> | Cocher Microsoft Visual Basic for Applications Extensibility 5.3
>
> Et n'oublie pas par la suite d'enregistrer ton classeur perso.xls.
>
> "magic-dd" <ciolan...@gmail.com> a écrit dans le message de news:
> 1178737167.987616.55...@q75g2000hsh.googlegroups.com...
WB dans la ligne de code
If Wb.VBProject.Protection = vbext_pp_locked Then
Par
If ActiveWorkbook.VBProject.Protection = vbext_pp_locked Then
"magic-dd" <ciol...@gmail.com> a écrit dans le message de news:
1178740647.3...@e65g2000hsc.googlegroups.com...
erreur 1004
acces par programme au visual basic n'est pas fiable
.............
c'est pourtant ce qu'on veut
lol ))
dans l'inferface de la feuille de calcul,
Barre des menus / outils / macro / sécurité / onglet Éditeurs approuvés,
et tu coches les 2 cases à cocher au bas de la fenêtre.
"magic-dd" <ciol...@gmail.com> a écrit dans le message de news:
1178741570.9...@n59g2000hsh.googlegroups.com...
je reprendrai ca à tete reposée
merci de votre investissement
:)
Ci-dessous quelques test un peu plus poussés que je viens d'effectuer.
1) En ouvrant Excel depuis le raccourci bureau, Perso.xls s'ouvre puis un
classeur vierge s'ouvre:
a) Si "Faire confiance au projet VB" est décochée alors Erreur 1004 "L'acces
au programme par Vb n'est pas fiable" alors que la procedure examine le
projet de Perso.xls
b) Si "Faire confiance au projet VB" est cochée et que le projet de
Perso.xls est lui meme protege par le meme mot de passe alors la procédure
examine le projet de Perso.xls, le projet Perso.xls n'est pas déverouillé
mais aucune erreur ne se produit.
c) Si "Faire confiance au projet VB" est cochée et que le projet de
Perso.xls n'est pas protégé alors la procédure s'exécute normalement cad ne
fait rien.
2) En supposant le projet Perso.xls non protégé, ouverture d'Excel en
ouvrant un classeur non protégé quelconque
a) Si "Faire confiance au projet VB" est décochée alors Erreur 1004 "L'acces
au programme par Vb n'est pas fiable" alors que la procedure examine le
projet de Perso.xls (meme cas de figure que 1a)
b) Si "Faire confiance au projet VB" est cochée alors la procédure se
deroule normalement cad examine d'abord le projet de Perso.xls puis celui du
classeur quelconque.
3) En supposant le projet Perso.xls non protégé, ouverture d'Excel en
ouvrant un classeur dont le projet est protégé avec le bon mot de passe
a) Si "Faire confiance au projet VB" est décochée alors Erreur 1004 "L'acces
au programme par Vb n'est pas fiable" alors que la procedure examine le
projet de Perso.xls (meme cas de figure que 1a), que l'on clique sur "Fin"
ou "debug" le classeur s'ouvre mais son projet n'est pas déverrouillé, si
l'on a cliqué sur debug VBA reste en mode arret.
b) Si "Faire confiance au projet VB" est cochée alors la procédure se
deroule normalement cad examine d'abord le projet de Perso.xls puis celui du
classeur quelconque et deverouille le projet.
4) En supposant le projet Perso.xls non protégé, ouverture d'Excel en
ouvrant un classeur dont le projet est protégé avec un autre mot de passe
a) Si "Faire confiance au projet VB" est décochée alors Erreur 1004 "L'acces
au programme par Vb n'est pas fiable" alors que la procedure examine le
projet de Perso.xls (meme cas de figure que 1a et 3a), que l'on clique sur
"Fin" ou "debug" le classeur s'ouvre mais son projet n'est pas déverrouillé,
si on a clique sur debug VBA reste en mode arret.
b) Si "Faire confiance au projet VB" est cochée alors la procédure se
deroule normalement cad examine d'abord le projet de Perso.xls puis celui du
classeur, aucune erreur ne se produit mais la boite de saisie du mot de
passe s'affiche.
5)Excel déja ouvert, en supposant le projet Perso.xls non protégé, "Faire
confiance au projet VB" est cochée.
a) Ouverture via le menu fichier>ouvrir d'un fichier dont le projet est
protégé par le bon mot de passe. La procédure se deroule normalement aucune
erreur ne se produit, le projet est deverouille.
b) Ouverture via le menu fichier>ouvrir d'un fichier dont le projet est
protégé par un autre mot de passe. La procédure se deroule normalement
aucune erreur ne se produit mais la boite de saisie du mot de passe
s'affiche.(meme cas de figure que 4b)
Conclusion:
Rien ne sert de protéger le projet de Perso.xls.
"Faire confiance au projet VBA" doit impérativement etre cochée.
Tous ces test avec Excel 2003.
Merci à MichDenis pour le suivi.
Bonne chance Magic DD
Cordialement,
Manu/
Un grand merci à vous tous
tout fonctionne
juste un pb de cablage dans ma tete, bref, c'est exactement ce qu'il
me fallait
encore une fois merci mille fois
J'ai copier cet macro et cela fonctionne bien sur un de mes Laptop et
ne fonctionne pas sur 2 autre appareille???
en ouvrant le message d'erreur " 70 " , medemande d'entré le mot de
passe et le VBA est arrêter sur la ligne du mot de passe.
Pourquoi et comment corriger ?
Merci
Donne quelques caractéristiques de tes 2 autres appareils:
Version du Windows , Français ou Anglais ?
Version d'Excel ?
As-tu exécuté la procédure à partir de la fenêtre de la feuille
de calcul et non de la fenêtre vba ?
"pellet15" <pell...@videotron.ca> a écrit dans le message de news:
1179097249.7...@e65g2000hsc.googlegroups.com...
Bonsoir MichDenis
Les trois appareilles ont la même version 2003 sp2 Francais
mais les deux qui ne fontionne pas sont sur Vista !!!
je l'exécuter en ouvrant le fichier excel.
la macros utiliser est la suivante:
Public WithEvents ThisApplication As Application
Private Sub ThisApplication_WorkbookOpen(ByVal Wb As Workbook)
If Wb.VBProject.Protection = vbext_pp_locked Then
Application.VBE.CommandBars.FindControl(, 2578).Execute
SendKeys "dddddd" 'Le mdp de tous tes classeurs
SendKeys "{ENTER}"
SendKeys "{ESC}" 'Quitte la fenetre propriete du projet
End If
End Sub
Dans le module ThisWorkbook de Perso.xls copier le code suivant:
Dim xlApp As Classe1
Private Sub Workbook_Open()
Set xlApp = New Classe1
Set xlApp.ThisApplication = Application
End Sub
Gros Merci
Causes et solutions de l'erreur 70 selon l'aide de XL 2003:
Vous avez tenté d'ouvrir un fichier protégé en écriture pour un accès
séquentiel Output ou Append.
Ouvrez le fichier pour un accès Input ou changez l'attribut de protection en
écriture du fichier.
Vous avez tenté d'ouvrir un fichier sur un disque protégé en écriture pour
un accès séquentiel Output ou Append.
Retirez la protection en écriture du disque ou ouvrez le fichier pour un
accès Input.
Vous avez tenté d'écrire dans un fichier qu'un autre processus a verrouillé.
Attendez que l'autre processus libère le fichier pour l'ouvrir.
Vous avez tenté d'accéder à la base de registres, mais vos permissions
utilisateur n'incluent pas ce type d'accès.
Sur des systèmes Microsoft Windows 32 bits, un utilisateur doit avoir les
permissions appropriées pour accéder à la base de registres du système.
Changez vos permissions ou demandez à l'administrateur système de le faire.
Les cas 1 et 2 me semblent les plus probables. Toutefois s'il s'agit d'un
probleme de compatibilité avec Windows Vista comme ton message semble le
suggérer, ne disposant pas de cet Os, je ne peux t'en dire plus.
Cordialement,
Manu/