activation automatique des macros

  • Initiateur de la discussion yannick
  • Date de début
Y

yannick

Guest
Bonjour,

Je cherche à obliger les utilisateurs à activer les macros au démarrage d'excel afin d'empecher de faire des copier-coller. Voici mon code :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
'On cache toutes les feuilles sauf la première pour le prochain lancement
Sheets(5).Visible = True
For i = Sheets.Count - 1 To 1 Step -1
Sheets(i).Visible = xlVeryHidden
Next i
ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
Application.ScreenUpdating = False
' On rend visible toutes les feuilles
For Each Sh In Sheets
Sh.Visible = True
Next Sh
' On cache la feuille d'accueil pour activer les macros
Sheets(5).Visible = xlVeryHidden
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.CutCopyMode = False
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Application.CutCopyMode = False
End Sub


l'enorme problème avec ce code, c'est que je force l'enregistrement lors de la fermeture, un utilisateur ayant fait des modifs et s'apercevant qu'il s'est trompé ne peut pas sortir du document sans sauvegarder !!
Si j'annule la sauvegarde automatique, il suffit qu'apres l'ouverture du document, l'utilisateur sauvegarde, puis ferme le document, ce qui a pour effet de redemander de sauvegarder, et la s'il ne sauvegarde pas, il n'aura plus besoin d'activer les macros pour acceder aux feuilles, et donc il pourra faire ce que je ne veux pas : du copier-coller.
Bref, je tourne en rond. Quelqu'un pourrait-il me venir en aide ?
merci d'avance.
Yannick
 
Y

yannick

Guest
Tout simplement par soucis d'etre plus precis. Ici, je donne le code, je parle de tout mon problème, a savoir activer automatiquement les macros et empecher le copier-coller. Ces précisions permettront aux spécialistes de peut-etre m'aiguiller sur une nouvelle voie puisqu'ils ont toutes les infos, contrairement au précédent fil.
D'ailleurs, avec ces nouvelles informations, aurais-tu une idée pour résoudre mon problème ou du moins une piste de recherche ?
 
J

jpierre

Guest
salut a vous,


J'ai eu le meme probleme que toi yannick, et c'est pour cela que j'ai mis le code que tu utilise sur le site pour forcer k'activation des macros.

mais cela ne suffit pas comme tu l'as si bien remarqué.

Une solution,c'est d'enlever toutes les barres d'outils, de bloquer les fonctions CRTL et de laisser uniquement la barre d'outil de ton choix ou de ta creation et de paser en mode plein ecran.

Avec ce systeme, 99% des utilisateurs suivront tes recommandations, le 1%, chercherons la faille.

Et malheureusement, le code VBA et excel est un gruyere pour un specialiste.

Voit un post de cathy qui te permettra d'avoir toutes les codes pour les barres d'outils.
Attention, penses à les enlever , mais surtout à les remettres, sinon c'est l'enfer.

A+ si tu as besoin
Jpierre
 
Y

yannick

Guest
Merci Jean-Pierre pour ta réponse.
Je ne pense pas pouvoir suivre cette méthode qui m'aurait pourtant évité de me torturer les méninges. En effet, ta solution implique de modifier les parametres d'excel, ce qui m'est impossible vu le nombre de postes concernés et leur localisation (je ne ferai aucun commentaire sur la personne qui s'est occupée de la conception de ce projet, parce que remplir des données "sensibles" via excel pour les envoyer vers oracle, c'est très très moyen ...). Sinon dans le même esprit, j'avais aussi réflechi au fait de "certifier" mon fichier excel pour l'execution automatique des macros, mais cela necessite aussi des modifications sur chaque poste, donc rebelotte je re-tourne en rond !
J'ai peut-etre une idée mais je ne sais pas comment faire :

Si le document n'a pas été modifié depuis son ouverture ou mieux depuis la derniere sauvegarde, alors je sauvegarde automatiquement lors de l'appel à "Workbook_BeforeClose"
sinon, je demande à sauvegarder.

Cela serait-il possible ? comment ?
ou peut-etre d'autres idées ?
 
J

jpierre

Guest
salut fred,

cela ne demande pas de passer sur tous les postes, car il suffit alors de d'enlever toutes les barres, d'enregistrer les barres presentes sur l'ordinateur

J'ai le code, mais je pars en reunion donc pas aujourdhui

cherche le post de cathy qui est excellent au mois avril, il y a tous dessus


A+

Jpierre
 
Y

yannick

Guest
re, (au fait, moi c'est yannick, pas fred :) )

La piste des barres d'outils ne me convainc guère pour les raisons suivantes :
1 - Je ne veux que "empecher le copier coller", et le fait d'utiliser "'Application.CutCopyMode = False" permet de l'empecher, aussi bien en Ctrl-C/Ctrl-V qu'avec les boutons de la barre d'outils.
2 - Le fait d'enlever les barres d'outils n'empeche pas l'utilisateur de sauvegarder puisqu'il a toujours la possibilité de passer par "Fichier/Sauvegarder".

par contre, ton idée de pouvoir modifier les parametres d'excel me font penser à l'idée suivante qui résoudrait tous mes problèmes : il existe dans excel le parametre "Activer l'alerte macro" dans Outils/Options/Général. Si je pouvais decocher cette case via du code VBA, alors j'aurais enfin un document qui force les macros à l'ouverture, sauf pour la premiere fois. Voila, ca va résoudre tous mes problèmes !!! Merci Jean-Pierre de m'y avoir fait penser !
Il ne me reste plus qu'a trouver la fonction qui fait ca ... d'ou la question suivante :

Quelle est la fonction vba qui permet de desactiver l'option "Activer l'alerte macro" ?
Merci d'avance pour vos réponses.
Yannick
 
J

jaccard

Guest
hello, j'ai eu ce problème à une époque et j'ai retouvé ce qui suit dans mes macros pour invalider le message d'alerte des macros dans office, mais attention il doit fonctionner au moins une fois et je ne connaissais que les versions utilisé dans la tableau data :

Sub esa()
On Error Resume Next
Dim data
Dim i, opt As Byte
data = Array("HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Excel\Microsoft Excel\Options6", 0, "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word\Options\EnableMacroVirusProtection", 0, "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\PowerPoint\Options\MacroVirusProtection", 0, "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security\Level", 1, "HKCU\Software\Microsoft\Office\9.0\Excel\Security\Level", 1)
Set WshShell = CreateObject("WScript.Shell")
For i = 0 To UBound(data) Step 2
opt = WshShell.Regread(data(i))
If opt <> data(i + 1) Then WshShell.RegWrite data(i), data(i + 1), "REG_DWORD"
Next i
End Sub
 
Y

yannick

Guest
Je te remercie beaucoup pour ton code mais il ne me convient pas pour les deux raisons suivantes (enfin, surtout pour la raison n°2 ...):
1 - Faire un programme excel qui va ecrire dans la base des registres n'est pas propre par rapport au besoin que j'ai. Mais j'aurais été tenté tout de même d'appliquer cette methode faute de mieux, surtout s'il n'y avait pas eu la raison N°2 suivante ...
2 - Les utilisateurs ne sont pas administrateur de leur poste et ne peuvent donc pas aller modifier dans la base des registres.

dommage ... je n'ai jamais été aussi prés du but depuis que j'ai fait ce post ! Merci encore à tout le monde pour vos interventions. En espérant que la prochaine sera la bonne :)
 

Discussions similaires

Statistiques des forums

Discussions
312 615
Messages
2 090 244
Membres
104 465
dernier inscrit
Motuss