IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur GetObject(, "Outlook.Application") lorsque Outlook est ouvert


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Par défaut Erreur GetObject(, "Outlook.Application") lorsque Outlook est ouvert
    Bonjour,
    Je souhaite envoyer, depuis Excel, à une liste de diffusion un mail. Après pas mal de recherche, j'ai réussi à écrire le code ci-dessous.
    Problème (et là je sèche vraiment) : la commande GetObject(, "Outlook.Application") se met en erreur lorsque Outlook est ouvert (Erreur d'exécution '429 Un composant ActiveX ne peut pas créer d'objet). Alors qu'en parallèle, la commande CreateObject("Outlook.Application") fonctionne très bien lorsque Outlook est fermé. Pour info, j'ai bien activé Microsoft Outlook 14.0 Object Library.

    Pourriez vous m'aider car les paramétrages réseau font que je suis obligé de saisir mon MDP Outlook à chaque ouverture.

    Merci d'avance pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub Envoi_mail_dd()
    ' Envoi mail
     
        Dim OutApp As Object
        Dim OutMail As MailItem
        Dim cell As Range
        Dim ChDir As String
        Dim NomFichier As String
        Dim Site As String
        Dim NomPersonne As String
     
     
        Application.ScreenUpdating = False
        Worksheets("Liste de dif").Activate
     
        ChDir = Application.ActiveWorkbook.Path
        Site = "Pusignan"
        NomPersonne = "Suivi des demandes"
        NomFichier = NomPersonne & "_" & Site
     
     
        On Error GoTo Open_Outlook
        Set OutApp = GetObject(, "Outlook.Application")
     
    Open_Outlook:
            If Err <> 0 Then
                Set OutApp = CreateObject("Outlook.Application")
                bstarted = True
            End If
     
     
        'On Error GoTo cleanup
        For Each cell In Sheets("Liste de dif").Columns("A").Cells.SpecialCells(xlCellTypeConstants)
            If cell.Value Like "?*@?*.?*" And Cells(cell.Row, "F").Value = "lyon" Then
                Set OutMail = OutApp.CreateItem(olMailItem)
                On Error Resume Next
                With OutMail
                    .To = cell.Value
                    .Subject = "Suivi des demandes au " & Format(Now, "dd-mmmm-yyyy")
                    .Body = "Bonjour " & _
                            vbNewLine & vbNewLine & _
                            "Veuillez trouver en pièce jointe l'état d'avancement du traitement de vos demandes." & _
                            vbNewLine & vbNewLine & _
                            "Vous souhaitant bonne réception," & vbNewLine & _
                            "Cordialement." & vbNewLine & vbNewLine & _
                    .Attachments.Add (ChDir & "\Archives suivi Dde" & "\" & NomFichier & "_" & Format(Now, "yy-mm-dd") & ".pdf")
                    .Send   'à remplacer par Send / display
                End With
                On Error GoTo 0
                Set OutMail = Nothing
            End If
        Next cell
     
    'Envoi mail => cleanup:
        Set OutApp = Nothing
     
        Application.ScreenUpdating = True
        Worksheets("Suivi operation").Activate
     
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    les applications office sont-elles installées en "lourd" sur le PC, ou bien ce sont des applications lancée par le biais de connexion citrix (ou autre de ce genre) ?

    j'ai déjà rencontré le problème en environnement Citrix, le GetObject plantait si l'application Excel et Outlook n'étaient pas sur le même serveur Citrix.

    En sortant la Machine Virtuelle (qui faisait tourner ces procédures) de l'environnement Citrix (utilisation d'un pack office en lourd) je n'ai plus de souci avec le GetObject

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Par défaut
    Bonjour,
    Désolé pour la réponse tardive.
    Je confirme que le pack office est installé en lourd sur mon poste.
    En revanche, une bizarrerie, je ne peux activer Outlook Object library qu'en ouvrant Excel en mode administrateur.

    En tout cas merci pour ta réponse.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je ne sais pas si c'est lié, mais ton projet est en liaison hybride, il y a du précoce et du tardif. Il faut choisir l'un des deux et pas faire cohabiter les deux


    - liaison précoce : tu dois activer la librairie spécifique et tu peux ainsi typer te variables lors de la déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub LiaisonPrecoce()
    ' on est obligé d'activer la référence Outlook X.XX
    Dim OlApp As Outlook.Application
    Dim Olnmspace as Outlook.NameSpace
    Dim UnDossier as Outlook.Folders
    Dim UnMail as Outlook.MailItem

    - liaison tardive : tes objets sont déclarés et typés "As Object", c'est lors de leur instanciation que tu indiquera à VBA le bon type, et tu n'as pas besoin de gérer la librairie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub LiaisonTardive()
    ' pas besoin d'activer la référence Outlook
    Dim OlApp As Object          ' Outlook.Application
    Dim Olnmspace as Object   ' Outlook.NameSpace
    Dim UnDossier as Object    ' Outlook.Folders
    Dim LaBoiteMail as Object  ' Outlook.Store
    Dim UnMail as Object         ' Outlook.Mailitem
     
    ' on tente le GetObject
    On Error Resume Next: Set OlApp = GetObject(, "Outlook.Application"): On Error GoTo 0
     
    ' s'il échoue (Outlook fermé par exemple), on passe en CreateObject (ça allumera Outlook)
    If OlApp Is Nothing Then Set OlApp = CreateObject("Outlook.Application")
     
    ' la banque d'information MAPI
    Set OlNmSpace = OlApp.GetNamespace("MAPI")
     
    ' ici, on est à la racine de la boite mail "toto"
    Set LaBoiteMail = OlNmSpace.Stores.Item("toto")
     
    ' ici, on est dans le premier sous-dossier de "Boite de réception"
    Set LeDossier = LaBoiteMail.GetDefaultFolder(6).Folders(1)  
    ' Attention : en liaison tardive, les constantes textuelles doivent être remplacées par des constantes numériques
    ' ici par exemple, la constante olFolderInbox est remplacée par sa valeur numérique 6
     
    ' ici, c'est le premier mail du dossier
    Set UnMail = LeDossier.Items(1)

    En passant en liaison tardive, tu vas du coup contourner le problème de référence que tu ne peux pas cocher

  5. #5
    Invité
    Invité(e)
    Par défaut
    bonjour,
    tu te fiche de ça! si tu utilise la méthode CreateObject l'instance disparaîtra après envoi du mail (.send) et ton mail apparaîtra dans l'instance ouverte comme élément envoyé!

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/08/2015, 21h35
  2. Blocage PC lorsqu'Eclipse est ouvert
    Par falsuss dans le forum Eclipse
    Réponses: 2
    Dernier message: 14/11/2012, 17h27
  3. [Leopard] Fermeture automatique de session lorsque firefox est ouvert
    Par zimoun dans le forum Apple
    Réponses: 5
    Dernier message: 12/02/2010, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo