Peut-on forcer une macro à s'ouvrir avec un code de ce type?
3 réponses
Pierre Giro
Bonjour à tous,
J'ai besoin de votre aide car je suis un nullos en informatique...
malheureusement je cherche à protéger une base de donnée que j'ai crée dans
excel. Pour cela j'aimerais juste forcer une macro (empechant l'impression
et la sauvegarde) à s'ouvrir à l'ouverture d'un classeur.
A travers le forum j'ai bien compris qu'il y avait un problème avec les
niveaux de sécurité d'excel et que l'on puvait donc facilement supprimer
l'ouverture cette macro mais ne peut-on pas imaginer quelque chose comme ca:
1) Le classeur désiré contient la macro voulue (macros 1) et celle-ci est du
type auto-open,
2) une supra-macro (contenu dans le perso.xls?) qui vérifie la présence de
la macro 1 sinon ferme le classeur ou fait tourner un calcul sans fin?
si oui quel pourrait etre un code pour ça? N'y t il pas sinon un moyen de
bloquer le niveau de sécurité sur "acceper les macros"? D'autres idées?
Pour forcer l'activation des macros, pourquoi nepas imaginer que la feuille concernée ne se dévoile que par macro -à développer- Bien cordialement,
-- ==================================== Pour me contacter, remplacez "Chez" par @ dans l'adresse
Une foule de conseils utiles sur le site de Misange : http://www.excelabo.net
j'ai bien compris qu'il y avait un problème avec les niveaux de sécurité d'excel et que l'on puvait donc facilement supprimer l'ouverture cette macro
Pierre Giro
J'ai trouvé une astuce sur le forum excellente qui doit pouvoir s'adapter pour XP toutefois j'ai des problème avec le script ci-dessous car je suis sous excel 2002 le niveau de sécurité dans le registre est "HKCUSoftwareMicrosoftOffice10.0ExcelSecurityLevel" or en remplaçant la ligne concernée dans le script ci-dessous rien ne se passe... porqué?
Dans un fichier texte (Notepad) recopie le code ci-dessous puis enregistre lefichier sous, par exemple, "ModifTemporaireSecurite.vbs". Le nom importe peu,seule l'extension a de l'importance.Après avoir vérifié qu'Excel est bien fermé, le niveau de sécurité actuel (1, 2ou 3) est récupéré puis fixé à 1 (pas d'alerte macro). Le fichier quit'intéresse est ensuite lancé et enfin le niveau de sécurité de départ estrestauré. Un raccourci sur le bureau vers le script, tu changes d'icone et de nom, et letour est joué.Le même genre de manip est peut-être possible avec Excel 97 et/ou Xp, si leur niveau de sécurité est également stocké dans le registre. '=================== 'Excel doit être fermé On Error Resume Next Set objXl=GetObject(,"Excel.Application") If Not IsEmpty(objXl) Then Msgbox "Excel doit être fermé pour exécuter ce script..." WScript.Quit End If Err.Clear 'objet script et chemin de la clé du registre pour Excel 2000 Set wsh = WScript.CreateObject("WScript.Shell") Cle2000 "HKCUSoftwareMicrosoftOffice9.0ExcelSecurityLevel" If Not IsExcel2000 Then MsgBox "Ce script ne peut désactiver l'alerte macro que pour Excel 2000..." WScript.Quit End If Dim NiveauSecurite, wsh 'niveau de sécurité en début d'exécution NiveauSecurite = wsh.RegRead(Cle2000) 'changement pour le niveau le plus faible wsh.RegWrite Cle2000, 1,"REG_DWORD" 'ouverture du classeur sans alerte macroRetour=wsh.Run("D: 6OfficeVBAClasseurTestSecurite.xls", 3, False) 'rétablissement du niveau de sécurité de départ wsh.RegWrite Cle2000, NiveauSecurite,"REG_DWORD" 'pour vérifier si la clé pour Excel 2000 existe bien Function IsExcel2000() On Error Resume Next Res=wsh.RegRead(Cle2000) IsExcel2000=(Err=0) End Function Frédéric Sigonneau
J'ai trouvé une astuce sur le forum excellente qui doit pouvoir s'adapter
pour XP toutefois j'ai des problème avec le script ci-dessous car je suis
sous excel 2002 le niveau de sécurité dans le registre est
"HKCUSoftwareMicrosoftOffice10.0ExcelSecurityLevel" or en remplaçant
la ligne concernée dans le script ci-dessous rien ne se passe... porqué?
Dans un fichier texte (Notepad) recopie le code ci-dessous puis enregistre
lefichier sous, par exemple, "ModifTemporaireSecurite.vbs". Le nom importe
peu,seule l'extension a de l'importance.Après avoir vérifié qu'Excel est
bien fermé, le niveau de sécurité actuel (1, 2ou 3) est récupéré puis fixé à
1 (pas d'alerte macro). Le fichier quit'intéresse est ensuite lancé et enfin
le niveau de sécurité de départ estrestauré. Un raccourci sur le bureau vers
le script, tu changes d'icone et de nom, et letour est joué.Le même genre de
manip est peut-être possible avec Excel 97 et/ou Xp, si leur niveau de
sécurité est également stocké dans le registre. '=================== 'Excel
doit être fermé On Error Resume Next Set
objXl=GetObject(,"Excel.Application") If Not IsEmpty(objXl) Then Msgbox
"Excel doit être fermé pour exécuter ce script..." WScript.Quit End If
Err.Clear 'objet script et chemin de la clé du registre pour Excel 2000 Set
wsh = WScript.CreateObject("WScript.Shell") Cle2000 "HKCUSoftwareMicrosoftOffice9.0ExcelSecurityLevel" If Not
IsExcel2000 Then MsgBox "Ce script ne peut désactiver l'alerte macro que
pour Excel 2000..." WScript.Quit End If Dim NiveauSecurite, wsh 'niveau
de sécurité en début d'exécution NiveauSecurite = wsh.RegRead(Cle2000)
'changement pour le niveau le plus faible wsh.RegWrite Cle2000,
1,"REG_DWORD" 'ouverture du classeur sans alerte
macroRetour=wsh.Run("D: 6OfficeVBAClasseurTestSecurite.xls", 3, False)
'rétablissement du niveau de sécurité de départ wsh.RegWrite Cle2000,
NiveauSecurite,"REG_DWORD" 'pour vérifier si la clé pour Excel 2000
existe bien Function IsExcel2000() On Error Resume Next
Res=wsh.RegRead(Cle2000) IsExcel2000=(Err=0) End Function Frédéric
Sigonneau
J'ai trouvé une astuce sur le forum excellente qui doit pouvoir s'adapter pour XP toutefois j'ai des problème avec le script ci-dessous car je suis sous excel 2002 le niveau de sécurité dans le registre est "HKCUSoftwareMicrosoftOffice10.0ExcelSecurityLevel" or en remplaçant la ligne concernée dans le script ci-dessous rien ne se passe... porqué?
Dans un fichier texte (Notepad) recopie le code ci-dessous puis enregistre lefichier sous, par exemple, "ModifTemporaireSecurite.vbs". Le nom importe peu,seule l'extension a de l'importance.Après avoir vérifié qu'Excel est bien fermé, le niveau de sécurité actuel (1, 2ou 3) est récupéré puis fixé à 1 (pas d'alerte macro). Le fichier quit'intéresse est ensuite lancé et enfin le niveau de sécurité de départ estrestauré. Un raccourci sur le bureau vers le script, tu changes d'icone et de nom, et letour est joué.Le même genre de manip est peut-être possible avec Excel 97 et/ou Xp, si leur niveau de sécurité est également stocké dans le registre. '=================== 'Excel doit être fermé On Error Resume Next Set objXl=GetObject(,"Excel.Application") If Not IsEmpty(objXl) Then Msgbox "Excel doit être fermé pour exécuter ce script..." WScript.Quit End If Err.Clear 'objet script et chemin de la clé du registre pour Excel 2000 Set wsh = WScript.CreateObject("WScript.Shell") Cle2000 "HKCUSoftwareMicrosoftOffice9.0ExcelSecurityLevel" If Not IsExcel2000 Then MsgBox "Ce script ne peut désactiver l'alerte macro que pour Excel 2000..." WScript.Quit End If Dim NiveauSecurite, wsh 'niveau de sécurité en début d'exécution NiveauSecurite = wsh.RegRead(Cle2000) 'changement pour le niveau le plus faible wsh.RegWrite Cle2000, 1,"REG_DWORD" 'ouverture du classeur sans alerte macroRetour=wsh.Run("D: 6OfficeVBAClasseurTestSecurite.xls", 3, False) 'rétablissement du niveau de sécurité de départ wsh.RegWrite Cle2000, NiveauSecurite,"REG_DWORD" 'pour vérifier si la clé pour Excel 2000 existe bien Function IsExcel2000() On Error Resume Next Res=wsh.RegRead(Cle2000) IsExcel2000=(Err=0) End Function Frédéric Sigonneau
Pierre Giro
oui en effet très bonne idée! j ai trouvé une autre astuce consistant à créer un script modifiant le niveau de sécurité en ouvrant Excel seulement j'arrive aps à l'adapter sig...
Merci!
oui en effet très bonne idée! j ai trouvé une autre astuce consistant à
créer un script modifiant le niveau de sécurité en ouvrant Excel seulement
j'arrive aps à l'adapter sig...
oui en effet très bonne idée! j ai trouvé une autre astuce consistant à créer un script modifiant le niveau de sécurité en ouvrant Excel seulement j'arrive aps à l'adapter sig...