Niveau de sécurité macro

popof

XLDnaute Occasionnel
Bonjour le forum,
Bonjour à tous

Voici ma question, g mis en place un fichier utilisant des macros et un système de usf avec mot de passe pour libérer accès à des boutons

Problème, si les gens désactives les macros il ont accés à l'ensemble du fichier, chose que j'essai delimiter donc voivi ma question...

Peut on faire une macro qui baisse le niveau de sécurité à 'moyen' ??
Avec l'enregistreur, la chose est impossible

Merci à tous
 

Creepy

XLDnaute Accro
Hello,

C'est possible mais pas par excel mais avec Wscript, qui est un peu comme le VBA d'excel.

je n'ai pas le temps de t'expliquer, mais voici un lien qui je pense te donnera la solution que tu cherche.


Ce lien n'existe plus

Rubrique : Eviter l'alerte macro sur un fichier particulier

++

Creepy

Message édité par: Creepy, à: 20/06/2005 16:06
 

popof

XLDnaute Occasionnel
re :unsure:

snif snif, fonctionne pour excel 2000 mais pas pour 2003, sinon le lien est intéressant, cela fonctionne pour tous les utilisateurs ayant une version sous 2000 30% des utilisateurs pour ma part

Merci encore et suis preneur pour un script général*

*si demande impossible une marmotte, un alu et du chocolat font l'affaire :woohoo:

Merci
 

Creepy

XLDnaute Accro
Hello,

Tu es allé voire sous ta base de registre si une clef Excel 2003 n'existait pas ?

Au taf, j'ai 2000 aussi mais dans la base de registre je vois une vieille entrée qui date d'avant quand on avait 97 : Excel/8.0 et celle pour 2000 : Excel/9.0.

ca m'etonnerait bien que microsoft est pas fait la même connerie pour 2003.

J'ai 2003 à la maison ce soir je regarderais et posterais (si j'y repense lol).

Pour le script general c'est possible suffit de dupliquer l'exemple : Cle2000 = 'HKCU\\Software\\Microsoft\\Office\\9.0\\Excel\\Security\\Level'

avec if is Cle2000 = 'HKCU\\Software\\Microsoft\\Office\\9.0\\Excel\\Security\\Level'
blabla bla
elseif Cle2003 = 'HKCU\\Software\\Microsoft\\Office\\10.0\\Excel\\Security\\Level'
blablabla

etc...

Voila je pense que tu devrais y arriver c'est comme du VBA à 95%

++

Creepy

PS : Eventuellement si tu m'envoie du chocolat je pourrais conclure avec toi
:)
 

Ti_

Nous a quitté
Repose en paix
euh, en l'occurence, je ne vois pas en quoi le fait d'aller charcuter la base de registre change quelque chose, puisque si les macros sont désactivées à l'ouverture du fichier, aucune d'entre elles ne s'exécutera, donc on n'ira pas lire non plus dans cette base de registre.

Personnellement je ne connais qu'une façon de forcer l'activation des macros à l'ouverture d'un fichier, quel que soit le niveau de sécurité des macros défini dans les options d'Excel : il suffit d'ouvrir le programme depuis un autre programme par un simple Workbook.Open.
Dans ce cas, Excel laisse tout passer, sans aucune mise en garde. C'est d'ailleurs un problème, puisque je pense qu'il serait relativement facile via un peu de programmation, de forcer l'activation des macros de tous les fichiers normalement ouverts sur une machine. Mais bon, je ne donnerai pas plus de détails...
En attendant, si ton fichier est ouvert normalement, il sera toujours possible d'aller voir le contenu de ton fichier quelles que soient les astuces que tu y mettras.
 

popof

XLDnaute Occasionnel
Re le fil

Le fait est que le fichier utilisé va être utilisé par environ 30 personnes situées à plusieurs endroits de l'aéroport et c tout un binss si je dois aller dans chaque bureau pour mettre les macros à un niveau utilisable du coup j'avais dans l'idée de faire un script qui s'occupé de ça à ma place ... c juste pour le principe car tout le monde ne bidouille pas sous excel ... that all et de là j'aurais souhaitais un petit coup pouce that all
je vais tout de même tenter de 'charcuter' les bases de registre pour 2003 ... voili voilou


creepy pour le chocolat la marmotte est parti en livraison :woohoo:
 

Gael

XLDnaute Barbatruc
Bonjour Popof,

Ce problème a déjà été traité dans ce forum (fais une recherche sur sécurité macro).

La solution préconisée que je viens de mettre en place sur une application est la suivante:

Il faut certifier ton appli donc:

1 - Créer un certificat avec le programme Selfcert.exe qui se trouve dans le répertoire Office.

2 - Ouvrir ton appli puis l'éditeur VB et lancer Outils / signatures électroniques / Choisir puis tu sélectionnes le certificat que tu viens de créer.

3 - Tu enregistres l'appli et tu l'ouvres. il te propose une fenêtre dans laquelle tu coches la case 'Toujours faire confiance aux macros...'

4 - tu enregistres à nouveau l'appli et à la prochaine ouverture, il ne te poseras plus de question. Les macros seront activées même avec l'option 'Niveau sécurité bas'.

Par contre pour chaque utilisateur, il faudra cocher la case 'faire confiance...' à la première ouverture.

@+

Gael
 

Creepy

XLDnaute Accro
RE all,

1 - Ti_ le fait est que nous ne passerons pas par les macros, mais par un fichier script donc on ne passe pas par les macros
Si on ne passe pas par les macros, pas de pb de 'blocage' !!!

2 - Gael avec un script on evite toute cette misere !

3 - popof : J'ai regardé dans ma base de registre il y a Office/11 !!
Donc c'est possible !

++

Creepy
 

popof

XLDnaute Occasionnel
Re le fil, creepy, gael,

Gael, c pour éviter de faire cette macro que je veux créer un script, comme je l'explique sur mon mess précédent,le fichier et multiple utilisateur et la manip n'est pas forcement facile si l'on ne connait pas excel

Creepy merci, je tente cela demain au boulot et fait un test avec l'antivirus du service info voir si il ne me vire pas le bébé

Merci encore


Nota: La marmotte est à mis chemin :whistle:
 

Gael

XLDnaute Barbatruc
Bonjour Popof, bonjour à tous,

Je comprends que tu préfères un script pour que tout soit automatisé à l'ouverture du fichier.

J'ai mis en place sur une appli la solution que je t'ai décrite et te confirme qu'il ne s'agit pas de créer une macro mais simplement de signer les macros existantes.

que la manip est simple et n'est à faire qu'une fois, donc ne nécessite aucune connaissance d'Excel pour les utilisateurs qui devront simplement cocher la case de confiance à la première ouverture.

Que cela fonctionne très bien quel que soit le niveau de sécurité positionné par l'utilisateur.

Comme je n'ai pas bien compris le script, je me reconnecterai sur ce fil pour essayer aussi cette solution.

@+

Gael
 

Ti_

Nous a quitté
Repose en paix
ok d'accord, je n'avais pas compris le problème sous cet angle. Si ça fonctionne ainsi (je n'ai jamais testé), ça nous montrera une nouvelle fois qu'Office a encore bien du chemin à faire pour vraiment sécuriser ses applications.
 

popof

XLDnaute Occasionnel
Re le fil

Bon là j'avoue je bloque mais bon c normal suis pas non plus une bête de compétition :p

Voici le code... si quelqu'un veut essayer, je tente de corriger les erreurs mais bon c pas gagné


'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

Dim acces_shell
Dim cle As String
Set acces_shell = CreateObjectwscript('Wscript.Shell')
Cle2003 = 'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security\\Level'

If Not IsExcel2003 Then
MsgBox 'Ce script ne peut désactiver l'alerte macro que pour Excel 2003...'
WScript.Quit
End If

Dim NiveauSecurite, acces_shell

'niveau de sécurité en début d'exécution
NiveauSecurite = acces_shell.RegRead(Cle2003)

'changement pour le niveau le plus faible
acces_shell.RegWrite Cle2003, 1,'REG_DWORD'

'ouverture du classeur sans alerte macro
Retour=acces_shell.Run('C:\\Documents and Settings\\morozofc\\Bureau', 3, False)


'rétablissement du niveau de sécurité de départ
acces_shell.RegWrite Cle2003, NiveauSecurite,'REG_DWORD'

'pour vérifier si la clé pour Excel 2003 existe bien
Function IsExcel2003()
On Error Resume Next

Res=acces_shell.RegRead(Cle2003)
IsExcel2003=(Err=0)
End Function
 

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 980
Membres
103 997
dernier inscrit
SET2A