Colle du mois

[Résolu]
Signaler
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011
-
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011
-
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

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
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+
Messages postés
160
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
8 juillet 2008

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
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

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 ^^)
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

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.
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
...
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+
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

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??
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

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.
Messages postés
160
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
8 juillet 2008

et si tu fais
for each oRef  in ThisWorkbook.VBProject.References
   msgbox oRef.name
next

Cramsoturf le VBien en quête de nouveau programme
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

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
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

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??
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

http://pagesperso-orange.fr/joelgarbe/ProcedureVBA.htm

voila la page ou je l'ai trouvé au cas ou^^