Colle du mois

Résolu
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011 - 9 avril 2008 à 15:55
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011 - 10 avril 2008 à 14:53
Bonjour ami(e)s programeurs et programmeuzes,

Pour faire fonctionner mes macros sur un ordinateur non configuré, je doit desactiver une fonction depuis l'outil de developpement VBA dans Option->references.

Le probleme c'est que mes macros vont etre securisé et les personnes qui voudront les utilisées ne pourront pas sans desactiver cette fonction.

Existe il un moyen pour le décocher? par un fichier BAT par exemple, ou avec une ligne de code VBA?

11 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
9 avril 2008 à 16:22
Salut,

Il existe plusieur methode. je te donne une methode que j'utilise, la premiere partie active la reference, la deuxieme partie enregistre dans un fichier text ce qui c'est passé, ce qui permet de savoir si des utilisateurs on ouvert le fichier sans accepter l'activation de la reference. Pour cette methode tu doit connaitre le chemin de la reference, son nom et son extention

Sub ActiveRef() 'activation of the reference *Microsoft Visual Basic for Applications Extensibility 5.3*
    Dim MyRef As String, RefPath As String, TypeError As String
    RefPath = "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6"
    MyRef = "Vbe6ext.olb"
    MyRef = Dir(RefPath & MyRef) 'ici on verifi l'existance de la reference
    If MyRef <> "" Then
        Application.DisplayAlerts = False
        On Local Error Resume Next
        ThisWorkbook.VBProject.References.AddFromFile RefPath & MyRef
        If Err = 1004 Then
            Err.Clear
            TypeError = " The Reference could not be added "
            MsgBox TypeError & " or the Trust access to Visual Basic Project is disable or both !" _
            & vbCrLf & vbCrLf & "In order to allow the activation of the references, follow the process below :" & vbCrLf _
            & vbCrLf & "Point to Macro on the Tools menu, and then click Security." _
            & vbCrLf & "On the Trusted Publishers tab, check the Trust access to Visual Basic Project box. " _
            & vbCrLf & vbCrLf & "For more information please contact your administrator", vbExclamation, "Reference Missing..."
            TypeError = " The Reference could not be added "
        Else
            TypeError = " **Reference Activated** "
        End If
        Application.DisplayAlerts = True
    Else
        TypeError = " Reference not found "
    End If
    Application.DisplayAlerts = False
    RecError (TypeError)
End Sub

Sub RecError(ByVal TypeError As String) 'error report
    Dim CMDAppli As Double, CurrentPath As String, ErrorFile As String, MsgError As String, NbSub As Long
    CurrentPath = ThisWorkbook.Path & "" 'ici tu dois definir l'emplacement du fichier error.txt pour moi c'est une zone reseau non modifiable
    ErrorFile = "Error.txt"
    MsgError = Now & TypeError & ThisWorkbook.Name 'pour moi le nom du fichier contient le nom de l'utilisateur ce qui me permet de pister completement
    CMDAppli = Shell("cmd.exe /c echo " & MsgError & " >> " & ErrorFile, 0)
    End
End Sub

Pour plus d'info ou pour d'autre methodes (2 autres il me semble) tu peux aller voir ici(puis editeur de code, modules, projet) et la.

Vala

A+
3
Cramfr Messages postés 160 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 8 juillet 2008
9 avril 2008 à 16:03
Non, tu es obligé de le faire à partir de l'interieur de ton fichier car comme tu le dis c'est sécurisé ;-)

Cramsoturf le VBien en quête de nouveau programme
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
9 avril 2008 à 16:10
Bin ouais mais ca ca va me posé un serieu gros gros gros probleme, va ptete du coup falloir que je me deplace jusque dans le sud de la france pour desactiver ca T_T (j'habite dans le nord), c'est pas supprimable dans le dossier de Excel sur le disque dur? (je regarde en meme temps ^^)
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
9 avril 2008 à 16:29
Omg, je pensais que c'etait pas commun comme manip', qu'il faudrait farfouiller et tout et tout...bin non la colle du mois se transforme en colle de 20 minutes.

C'est pile ce qu'il me fallait, merci beaucoup tout plein BigFish.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
9 avril 2008 à 16:30
...
ouais ! cela ne repond pas directement a ta question vu que tu veux desactivé une reference mais il y a tout ce dont tu as besoin notament via les liens que je t'ai donné.

A+
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
10 avril 2008 à 09:20
Le code que je dois utilisé c'est donc celui ci :
Sub suppreF()
Dim oRef As Object

Set oRef = ThisWorkbook.VBProject.References("Word")
ThisWorkbook.VBProject.References.Remove oRef

End Sub

Mais quand je le lance il me dit "l'indice n'appartient pas a la selection".

En fait je pense que je me goure au niveau de "word", faut le remplacer par le nom de la référence ou son chemin d'accés... ou autre chose??
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
10 avril 2008 à 10:06
J'ai trouvé que si on mettait un chiffre à la place de "word" ca retirait la reference correspondante dans la liste, le probleme c'est si la reference est spas a la meme place.
Ya pas un moyen de plutot rentré le chemin d'accés? j'ai essayer en m'inspirant du code servant a cocher une reference mais ya des problemes de blocs with.
0
Cramfr Messages postés 160 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 8 juillet 2008
10 avril 2008 à 11:27
et si tu fais
for each oRef  in ThisWorkbook.VBProject.References
   msgbox oRef.name
next

Cramsoturf le VBien en quête de nouveau programme
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
10 avril 2008 à 13:44
excuse moi, tu pourrais expliquer ton code stp, par ce que si je traduis de l'anglais au francais ca donne : Pour chaque Référence du projet, afficher un msgbox. Mais de vba au francais ? XD
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
10 avril 2008 à 14:51
J'ai trouvé un code a peu pres comme celui que propose Cramfr :
Sub SupprimerReference()

Dim LesRef As Object

For Each LesRef In ActiveWorkbook.VBProject.References

If Len(LesRef.GUID) > 0 Then

If UCase(LesRef.Name) = "WORD" Then

ActiveWorkbook.VBProject.References.Remove LesRef

Exit For

End If

End If

Next
End Sub

Mais je ne comprend pas cette ligne :
If UCase(LesRef.Name) = "WORD" Then

Le "word" aurait il une importance finalement??
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
10 avril 2008 à 14:53
http://pagesperso-orange.fr/joelgarbe/ProcedureVBA.htm

voila la page ou je l'ai trouvé au cas ou^^
0
Rejoignez-nous