enregistrer references VBA definitif

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Je n'ai pas trouvé comment , ou si on peut ? , enregistrer définitivement les références ajoutées de VBA
exemple ; j'ai ajouté Outlook pour l'envoi mail
SI je reprends l'appli dans un nouveau fichier excel : ça plante ..outlook n'est pas coché
Merci
 

Tentative

XLDnaute Occasionnel
Re : enregistrer references VBA definitif

Bonjour,

Une solution que j'ai utilisée pour l'inscription d'événements dans le calendrier Outlook, avec l'aimable aide des gens de ce forum, est de ne pas utiliser la référence à Outlook; on peut le faire en déclarant les objets au début de la macro ... au lieu de les lire dans la référence.

Un des gros avantages, que j'y ai trouvé, est que ça devient transparent d'une version de Excel à l'autre.

Il y a de multiples exemples sur ce forum.

Espérant que cette idée puisse être utile.


Tentative
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : enregistrer references VBA definitif

Bonsoir,

J'ai été confronté à ton souci il y de cela un bout de temps. J'avais fait pas mal de recherches sur ce forum et d'autres ainsi que sur le net. J'avais trouvé une solution qui depuis la sortie d'office 2010, je me suis aperçu que ce n'était pas la bonne solution.

La solution n'est pas de moi. Mais je te l'explique (ci-joint le fichier qui te récupère les adresses où sont inscrites les différentes bibliothèques préalablement cochées):

1 - ouvre le fichier joint
2- ensuite sur option excel Pour activer references.jpgtu clique sur centre de gestion de la confidentialité ---> suit l'image
3- dans le VBE mets-toi dans un module ----> option ---> réferences ----> cocher la références voir imageMicrosoft visual basic for application extensibilty 5.3.JPG
4- enregistre le fichier, ferme-le et tu l'ouvres une seconde fois, une feuille sera créée avec les références GUIDS
5 - ce sont ces réferences que tu mettras dans thisworkbook (Workbook_Open)
6 -dans le fichier texte, il y a les références qui s'activaient à l'ouverture du classeur, ainsi que code pour désactiver les bibliothèques manquantes.

Tout ceci n'est pas de moi, mais je l'utilise sur mon fichier (excel 2007). Mais depuis que mon ami est passé à excel 2010 le fichier bogue sur le module de thisworkbook.

J'espère qu'il te donnera satisfaction. J'attends la solution de tentative (déclarer dans le module).
 

Pièces jointes

  • TEST_REFERENCES.xlsm
    19.8 KB · Affichages: 56

herve62

XLDnaute Barbatruc
Supporter XLD
Re : enregistrer references VBA definitif

Merci bien à vous
David : c'est vrai et + simple , j'avait fait exactement pareil pour Word dans un fichier excel
Là après plusieurs exemple j'ai gardé ça :
Code:
Public Sub Smail()
    Dim nompdf As String, LeRep As String
    [B]Dim ol As New Outlook.Application[/B]
    Dim olmail As MailItem
    Dim MailAD As String
    Dim corps As String
    prep_mail ' Il faut que la feuille INFO soit complétée pour enreg. et envoi
    
    corps = "Bonjour  " & Box2.Value & Chr(13) _
    & "Veuillez trouver ci joint votre fiche individuelle de renseignements" & Chr(13) _
    & "Cordialement" & Chr(13) & Chr(13) & "Ceci est un mail automatique Merci de ne pas répondre"
        
        nompdf = Sheets("IMPRESSION SIGNALETIQUE").Range("B31") & " " & Sheets("IMPRESSION SIGNALETIQUE").Range("E31")
    LeRep = ThisWorkbook.Path
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        LeRep & "\" & nompdf & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        From:=1, To:=2, OpenAfterPublish:=False
 MailAD = Box10.Value
 [B]Set ol = New Outlook.Application[/B]
 Set olmail = ol.CreateItem(olMailItem)
 With olmail
 .To = MailAD 'adresse destinataire
 .Subject = "Fiche Individuelle SPV" 'ici le sujet
 .Body = corps 'ici le corps du mail
 .Attachments.Add LeRep & "\" & nompdf & ".pdf" 'ici la pièce jointe
 .Send '  : Display correspond à l'affichage du message / Send demande un envoi direct
 End With
       
    End Sub
Est ce que je remplace les 2 lignes GRAS par ton code ? je suppose que c'est ça ( Zut on les voit pas donc c'est les )

j'ai encore un fichier du boulot de 2002 ... avec du vieux VBA qui fonctionne encore mais bon .....! j'ai voulu évoluer car il faudra que cela tourne aussi en 2010 !!

Cathodique : je garde ton fichier dans mon "grenier" sinon aussi j'aime bien ta phrase :
Mais depuis que mon ami est passé à excel 2010 le fichier bogue sur le module de thisworkbook.
Moi déjà c'est avec THISWORKBOOK.path !!!! plus le Calendar que tout Bug chez lui
Je lui ai fait un truc qui tourne bien chez moi avec 2007 ( même encore avec 2003) et quand je lui envoie , Il bloque à l'ouverture du 1er USF ?? !!! j'ai aussi 2010 mais je suis revenu à 2007

Bonne soirée
 

MJ13

XLDnaute Barbatruc
Re : enregistrer references VBA definitif

Bonjour à tous

J'ai retrouvé dans mon Pense-Bête ces procédures de Frédéric Sigonneau. Malheureusement, son site est fermé depuis Janvier 2015, il avait été logé chez Misange :eek:.

Code:
Sub AjouteRéférence()
'Addref F. Sigonneau
'nom du classeur auquel renvoie la référence : "D:\Classeur1.xls"
'nom du projet VBA de ce classeur : TestRéférence(Classeur1.xls)
On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files\Microsoft Office\Office15\MSOUTL.OLB"
End Sub

Sub EnlèveRéférence()
    With ThisWorkbook.VBProject.References
        .Remove .Item("TestRéférence")
    End With
End Sub
 

david84

XLDnaute Barbatruc
Re : enregistrer references VBA definitif

Déclare tous les objets en Object (ol et olmail), instancie l'objet Outlook par un CreateObject
Code:
Set ol=CreateObject("Outlook.Application")
et remplace
Code:
olMailItem
par la valeur de sa constante (je crois que c'est 0)
Code:
Set olmail = ol.CreateItem(0)'à vérifier de ton côté
A+
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : enregistrer references VBA definitif

Bon MJ , si je comprends , t'ajoutes le module direct via vba , et il reste ?
Quand il y a ..euh ?, pour excel2003 ajouté le calendrier et DTpicker après j'avais plus besoin de rajouter , déclarer ...etc
est ce que cela ne serait pas dû aussi à l'instal. ? ou l'on ne coche pas des "options" via instal.perso.

PS : Misange , des nouvelles ... plus jamais rien ici depuis longtemps ? , la Reine des Formules (et autres tuto) qui avait tenté de me convertir au lieu du vba .... j'ai jamais su !!
 

MJ13

XLDnaute Barbatruc
Re : enregistrer references VBA definitif

Re

Normalement avec le code que j'ai donné, en prenant les références fournies par cathodique dans son fichier avec les chemins des Dll, tu peux cocher les références automatiquement. Tu peux essayer avec Scripting Runtime par exemple.

Mais il faut être sûr du chemin et du nom de la DLL et souvent quand tu regardes dans la fenêtre des références, le nom est masqué car le chemin est trop grand :(.
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : enregistrer references VBA definitif

Bonsoir
Ce qu'explique Cathodique , j'ai vu et normalement je sais ? car j'ai fait
Mais c'est quand on ouvre un fichier XXXYYY d'Excel et que l'on incorpore le VBA d'un fichier qui utilisait déjà OuTlook et qui fonctionne
J'ai vérifié : le fichier qui utilise OUTlook , les références sont bien cochées , mais l'autre ... NON ?
Donc dans ce fichier si je veux utiliser aussi Outlook , je dois cocher à nouveau ?
Ou vos procédures évitent tout cela et Outlook devient en "Dur" ?
 

cathodique

XLDnaute Barbatruc
Re : enregistrer references VBA definitif

Bonsoir,

Hervé62, il fallait ouvrir le fichier joint, cocher les références dont tu as besoin dans ton projet, enregistrer et fermer le fichier.

ça c'est la première étape ensuite en ré-ouvrant le fichier, tu auras les adresses des bibliothèques que tu intégreras dans le module WorkbookOpen. Ainsi, si tu travailles sur un autre pc les références seront cochés automatiquement.

J'ai utilisé cette méthode et elle fonctionnait très bien. J'avais envoyé une petite application à un ami, qui la utilisée sans problème durant 2 années. Mais depuis qu'il est passé à excel 2010 et windows 7. L'appli bug.

Je soupçonne l'activation des références. J'ai lu qu'on pouvait utiliser le early et late binding, mais je ne me suis pas encore mis dessus (en fait, je ne sais pas ce que c'est) .

En espérant que ça puisse t'aider.

Bon week-end à toutes et à tous.
 

david84

XLDnaute Barbatruc
Re : enregistrer references VBA definitif

Bonsoir,
quel est pour vous l'intérêt de vouloir absolument cocher les bibliothèques d'un projet alors que l'on peut aisément s'en passer avec un CreateObject ?
C'est justement tout l'intérêt d'un CreateObject de rendre le classeur fonctionnel quelle que soit la version d'Excel utilisée et sans se préoccuper de savoir si les bibliothèques adéquates sont cochées donc quel est l'intérêt de procéder autrement ?
A+
 

cathodique

XLDnaute Barbatruc
Re : enregistrer references VBA definitif

Bonsoir David84,

N'étant pas à la base informaticien et encore moins développeur. Je me suis au VBA depuis que je suis en retraite. J'ai ainsi pu rendre service à mon meilleur collègue toujours en fonction. Je suis parvenu grâce aux aides gracieuses que j'ai pu avoir sur ce site et d'autres.

Je tiens juste à dire que j'avais commencé par les exemples de Jacques Boisgontier.

Maintenant, revenant à ces fameuses références. L'auteur de ce code, m'avait demandé d'activer "la référence Microsoft Scripting Runtime" pour que ça fonctionne correctement.

Mon ami n'étant pas très informatique, j'ai dû chercher un moyen pour activer cette référence automatiquement.

J'ai essayé un createobject sans succès. Si tu veux bien contribué à améliorer ce code, je t'en suis gré par avance.

Je mets juste la fonction qui fait appelle à la référence Microsoft Scripting Runtime.
VB:
'/!\ Active la référence Microsoft Scripting Runtime
Private Function Dispatch(ByVal Tb, ByVal Typ As String)
Dim Ouvrage As New Scripting.Dictionary
Dim PosteDirect As New Scripting.Dictionary
Dim C As Integer, m As Integer, R As Integer, n As Integer
Dim p As Integer, i As Integer, j As Integer, k As Integer
Dim Res(), Tmp, Vemp
 
p = UBound(Tb, 1)
For i = 1 To p
    If Tb(i, 2) = Typ Then
        Ouvrage(Tb(i, 3)) = ""
        PosteDirect(Tb(i, 4) & "|" & Tb(i, 9)) = ""
    End If
Next i
C = Ouvrage.Count
m = 5 + 2 * C
R = PosteDirect.Count
n = 2 + R
ReDim Res(1 To n, 1 To m)
 
Res(1, 1) = "N°Poste Localisation"
Res(1, 2) = "Redresseur"
Res(1, 3) = "Redresseur"
Res(2, 2) = "Tension (V)"
Res(2, 3) = "Courant (A)"
For j = 0 To 2 * C - 1
    k = Int(j / 2)
    Res(1, j + 4) = Ouvrage.Keys(k)
    Res(2, 2 * k + 4) = "Potentiel (mV)"
    Res(2, 2 * k + 5) = "Courant (mA)"
Next j
Res(1, m - 1) = "Direction"
Res(1, m) = "Observations (" & Typ & ")"
 
For i = 3 To n
    Vemp = Split(PosteDirect.Keys(i - 3), "|")
    Res(i, 1) = Vemp(0)
    For j = 4 To m - 2 Step 2
        k = Int((j - 4) / 2)
        Tmp = Sum(Tb, Typ, Vemp(1), Ouvrage.Keys(k), Res(i, 1))
        If Res(i, 2) = "" Then Res(i, 2) = Tmp(0)
        If Res(i, 3) = "" Then Res(i, 3) = Tmp(1)
        Res(i, j) = Tmp(2)
        Res(i, j + 1) = Tmp(3)
        Res(i, m) = Res(i, m) & "" & Tmp(5)
    Next j
    Res(i, m - 1) = Vemp(1)
Next i
 
Set Ouvrage = Nothing
Set PosteDirect = Nothing
Dispatch = Res
End Function
Cette fonction fait par d'une procédure qui récupère des données d'une BD pour faire des tableaux de synthèses ayant des nombres de lignes et colonnes différents sur des feuilles différentes (pour info).

ps: si besoin, je peux joindre le fichier (juste le temps de retirer les données confidentielles).

Bonne fin de soirée et bon week-end.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 339
Messages
2 087 407
Membres
103 538
dernier inscrit
Mbolatiana Hyacinthe