Eviter l'alerte macro sur un fichier particulier
Avec un raccourci sur le bureau, comment lancer un fichier Excel contenant des macros sans avoir le message : " Le fichier tartenpion.xls Contient des macros Etc..." Avec Excel 2000, tu peux modifier le niveau de sécurité dans la base de
registre (bonjour, la sécurité !). Ce genre de changements doit cependant être
effectué avant l'ouverture d'Excel pour être pris en compte. Ce n'est donc pas
possible à faire depuis un classeur. Par contre, un script fait très bien
l'affaire. Il nécessite WScript.exe dans ton répertoire Windows (livré en
standard depuis Win 98 je pense, sinon téléchargeable chez Microsoft).
href="http://www.microsoft.com/france/scripting/default.php">
http://www.microsoft.com/fran
e/sc
ipting/default.php
Dans un fichier texte (Notepad) recopie le code ci-dessous puis enregistre le
fichier 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, 2
ou 3) est récupéré puis fixé à 1 (pas d'alerte macro). Le fichier qui
t'intéresse est ensuite lancé et enfin le niveau de sécurité de départ est
restauré.
Un raccourci sur le bureau vers le script, tu changes d'icone et de nom, et le
tour 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| '===================
'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 = "HKCU\Software\Microsoft\Office\9.0\Excel\Security\Level"
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 macro
Retour=wsh.Run("D:\6OfficeVBA\ClasseurTestSecurite.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, (N°29)
Partager