Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur actif

famu

XLDnaute Occasionnel
Bonjour à tous,
J'utilise une macro de Jacques Boigontier ("Envoi par OutLook d'un onglet du classeur actif") qui fonctionne très bien (merci Jacques pour votre travail !), hormis le fait que je dois l'utiliser sur 2 PC. L'un tourne avec Office 2010 et l'autre avec Office 2007. Voici le code de Jacques :

Sub envoi_Feuille()
répertoireAppli = ActiveWorkbook.Path
Sheets("résultats").Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs répertoireAppli & "\Resultats.xls"
ActiveWindow.Close
'--- Envoi par mail
Dim olapp As Outlook.Application 'dans Outils/Références cocher OutLook
Sheets("destinataires").Select
Range("A11").Select
Do While Not IsEmpty(ActiveCell)
Dim msg As MailItem
Set olapp = New Outlook.Application
Set msg = olapp.CreateItem(olMailItem)
msg.To = ActiveCell.Value
msg.Subject = Range("A2").Value
msg.Body = Range("A5").Value & Chr(13) & Chr(13) & Range("A8").Value & Chr(13) & Chr(13)
msg.Attachments.Add Source:=répertoireAppli & "\Resultats.xls"
msg.Send
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Mon PROBLEME : avec Office 2010, "Outils/Références cocher OutLook" fait référence à "Microsoft Outlook 14.0 Object Library" alors que Office 2007 fait référence à "Microsoft Outlook 12.0 Object Library". Impossible de m'en sortir !
Une idée pour contourner le problème ?
Merci beaucoup pour votre aide.
 

Gelinotte

XLDnaute Accro
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour,
Merci à Marc pour cette façon de procéder que je ne connaissais pas.
Ci-joint un code permettant d'activer la référence Outlook (à placer dans un module) :
Code:
Public Sub ActiveRef()
  Dim sPathProg As String
  'Active la référence à Outlook selon la version d'Office


  ' Version de windows 32 ou 64 bits
 Select Case InStr(1, Application.Path, "(x86)")
  Case 0
    sPathProg = "C:\Program Files\"
  Case Is > 0
    sPathProg = "C:\Program Files (x86)\"
  End Select


  ' Selon la version d'office
 Select Case Application.Version
  Case "11.0"
    Call Addref(sPathProg & "\Microsoft Office\OFFICE11\msoutl.olb")
  Case "12.0"  ' Office 2007
   Call Addref(sPathProg & "\Microsoft Office\OFFICE12\msoutl.olb")
  Case "14.0"  ' Office 2010
   Call Addref(sPathProg & "\Microsoft Office\OFFICE14\msoutl.olb")
  End Select
End Sub


Sub Addref(AdresseRef As String)
  On Error Resume Next
  ThisWorkbook.VBProject.References.AddFromFile AdresseRef
End Sub
et dans Workbook_Open :
Code:
Private Sub Workbook_Open()
  Call ActiveRef
End Sub
A+


Bonsoir,

Si un vilain n'installe pas Office dans le dossier par défaut. Comment pourrait-on trouver le chemin d'installation de Office 2007 ou Office 2010 version 32 ou 64 bits ? ... avec du code vba bien entendu 8- )

Merci

G
 

david84

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Re
Si un vilain n'installe pas Office dans le dossier par défaut. Comment pourrait-on trouver le chemin d'installation de Office 2007 ou Office 2010 version 32 ou 64 bits ? ... avec du code vba bien entendu 8- )
Quel est l'intérêt de ne pas installer Office dans le dossier par défaut ?
Dans ce cas, a priori je regarderais du côté du FileSystemObject par exemple.
Ci-joint un tutoriel qui explique comment procéder :
A+
 

tototiti2008

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour à tous,

Merci à Marc pour cette façon de procéder que je ne connaissais pas.

un plaisir ;), l'intérêt est de ne pas avoir besoin de cocher les références grâce à CreateObject

Si un vilain n'installe pas Office dans le dossier par défaut. Comment pourrait-on trouver le chemin d'installation de Office 2007 ou Office 2010 version 32 ou 64 bits ? ... avec du code vba bien entendu 8- )

S'il s'agit toujours de cocher les références, tu as aussi une méthode References.AddfromGuid qui avec l'identifiant adéquat (que tu peux trouver dans la base de registre) devrait ajouter la référence sans connaitre le dossier d'installation, enfin je crois...
Sinon, s'il s'agit vraiment de connaitre le dossier d'installation d'Office, tu devrais trouver ça dans la base de registre aussi
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe
 

Staple1600

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour à tous


Quel est l'intérêt de ne pas installer Office dans le dossier par défaut ?
1) le gout de l’anticonformisme ;)
2) le choix d'installer ses applications sur une partition dédiée et de réserver C: pour Windows et uniquement Windows
(et si le cœur vous en dit une 3eme partition pour uniquement Mes Documents)

Sinon pour trouver oukilé excel ;)
Sub a()
MsgBox Application.Path
End Sub
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour,
Sinon pour trouver oukilé excel
Sub a()
MsgBox Application.Path
End Sub
Bien vu JM !
Comme Application.Path donne le chemin sans tenir compte de la version 32 ou 64 bits (je suis en Office 64 bit et le chemin affiché est
C:\Program Files\Microsoft Office\Office14
, j'en conclus peut-être hâtivement que le code peut être réduit à
Code:
Public Sub ActiveRef2()
  Dim Chemin_Office As String
  Dim RefOutlook As String
  'Dim RefWord As String
  'Active la référence choisie
  Chemin_Office = Application.Path
  RefOutlook = Chemin_Office & "\msoutl.olb"
  'RefWord = Chemin_Office & "\msword.olb"
On Error Resume Next
With ThisWorkbook.VBProject.References
    .AddFromFile RefOutlook
    '.AddFromFile RefWord
End With
End Sub
Ce code fonctionne-t-il correctement chez vous (précisez SVP sous quelle(s) version(s) Office vous avez testé) ?
A+
 
Dernière édition:

Gelinotte

XLDnaute Accro
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour,

Sous Office 2010
Oui, ce code fonctionne, mais avec restriction.

Pour que l'ajout de la référence fonctionne, j'ai dû aller dans Options, Centre de gestion de la confidentialité, bouton Paramètres du Centre de gestion de la confidentialité, sélectionner Paramètres des macros et cocher Accès approuvé au modèle d'objet du projet VBA.

Je n'ai pas vérifié, je ne sais pas si ce paramètre est actif par défaut à l'installation de Excel.

S'il ne l'est pas, ce code ne serait pas facilement transportable chez l'usager.

G
 

david84

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonsoir,
je m'avance peut-être mais je ne pense pas que cela soit possible d'approuver le modèle d'objet du projet VBA par macro (cela ne me paraît pas logique de pouvoir contourner cette sécurité aussi aisément).
Je ferai une recherche sur le Net de mon côté pour voir si je trouve quelque chose.
En attendant, peut-être gérer cela via un gestionnaire d'erreur qui préciserait à l'utilisateur ce qu'il doit faire dans ce cas :
Code:
Public Sub ActiveRef2()
  Dim Chemin_Office As String
  Dim RefOutlook As String
  On Error GoTo erreur
  'Dim RefWord As String
  'Active la référence choisie
  Chemin_Office = Application.Path
  RefOutlook = Chemin_Office & "\msoutl.olb"
  'RefWord = Chemin_Office & "\msword.olb"
With ThisWorkbook.VBProject.References
    .AddFromFile RefOutlook
    '.AddFromFile RefWord
End With
Exit Sub
erreur:
Select Case Err.Number
Case 1004
MsgBox "Sélectionner Paramètres des macros et cocher Accès approuvé au modèle d'objet du projet VBA"
Case Else
MsgBox "Erreur inconnue"
End Select
End Sub
A+
 

tototiti2008

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour à tous,

@david : J'ai testé ton code sur Excel 2003 avec succès, la référence Word (pas Outlook sur le poste) est bien cochée

à noter (toujours pour Word) que ça doit aussi fonctionner comme ça :

Code:
Public Sub ActiveRef3()
  Dim RefWord As String
  'Active la référence choisie
  RefWord = "{00020905-0000-0000-C000-000000000046}"
On Error Resume Next
With ThisWorkbook.VBProject.References
    .AddFromGuid RefWord, 0, 0
End With
End Sub
 

Gelinotte

XLDnaute Accro
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour tototiti2008,

J'ai testé sous Excel 2010 et ton code fonctionne à merveille autant avec {00062FFF-0000-0000-C000-000000000046} pour la référence à Outlook ou avec "{00020905-0000-0000-C000-000000000046}" pour la référence à Word.
Cette méthode est intéressante, car elle évite de trouver le chemin d'installation de Office.

Ça fonctionne, mais toujours sous la restriction :
"Pour que l'ajout de la référence fonctionne, j'ai dû aller dans Options, Centre de gestion de la confidentialité, bouton Paramètres du Centre de gestion de la confidentialité, sélectionner Paramètres des macros et cocher Accès approuvé au modèle d'objet du projet VBA."

Au travail, nous sommes en domaine. Je vais installer une machine à neuf pour savoir si cette option est cochée par défaut ou pas. Si elle ne l'est pas, je vais voir avec un administrateur serveur si on peut passer "Accès approuvé au modèle d'objet du projet VBA" via une policies.

Merci

G
 

MJ13

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour à tous

Au travail, nous sommes en domaine. Je vais installer une machine à neuf pour savoir si cette option est cochée par défaut ou pas. Si elle ne l'est pas, je vais voir avec un administrateur serveur si on peut passer "Accès approuvé au modèle d'objet du projet VBA" via une policies.

Normalement sur un nouvel Excel de type 2007 ou 2010, rien n'est coché. C'est à chacun de former les personnes pour le cocher jusqu'au niveau voulu. Attention, il y aussi les contrôles ActiveX à gérer.
 

tototiti2008

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Re,

Pour éviter ces problèmes d'accès aux références, il reste toujours la possibilité de coder avec CreateObject qui ne nécessite aucune référence, comme on était arrivé à le faire au début de ce fil pour Outlook
 

Gelinotte

XLDnaute Accro
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Bonjour,

Re,
Pour éviter ces problèmes d'accès aux références, il reste toujours la possibilité de coder avec CreateObject qui ne nécessite aucune référence, comme on était arrivé à le faire au début de ce fil pour Outlook

Ne pas utiliser les références, c'est ce que j'essaie de faire pour des rendez-vous dans Outlook :
https://www.excel-downloads.com/thr...-a-outlook-sans-utiliser-la-reference.189644/

Sans succès pour l'instant. :(

G
 

david84

XLDnaute Barbatruc
Re : Outils/Références cocher OutLook : Envoi par OutLook d'un onglet du classeur act

Re
Pour éviter ces problèmes d'accès aux références, il reste toujours la possibilité de coder avec CreateObject qui ne nécessite aucune référence, comme on était arrivé à le faire au début de ce fil pour Outlook
Exact mais cela ne règle pas pour autant le fait que l'utilisateur doit approuver le projet VBA pour que la macro puisse fonctionner (ce qui me paraît normal par ailleurs).
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren