Erreur 429 composant ActiveX

Bonjour, je dois envoyer des fichiers PDF à une liste de contact mais le blocage se fait à l'ouverture de l'application Outlook. J'ai Windows 11 et l'application est bien visible et accessible depuis le démarrer, en revanche elle n'apparaît pas dans la liste d'application référencée dans VBA. Je ne la trouve pas non plus sur mon PC. Je suis bloquée.

Voici le détail :

Sub SendEmailsWithAttachments()

Dim OutlookApp As Object
Dim OutlookMail As Object
Dim ExcelSheet As Worksheet
Dim LastRow As Long
Dim i As Integer
Dim EmailTo As String
Dim PDFPath As String
Dim Subject As String
Dim Body As String

Set OutlookApp = CreateObject("Outlook.Application")
Set ExcelSheet = ThisWorkbook.Sheets("Feuil2") ' Nom de votre feuille Excel

LastRow = ExcelSheet.Cells(ExcelSheet.Rows.Count, "A").End(xlUp).Row ' Trouve la dernière ligne avec des données

For i = 2 To LastRow
EmailTo = ExcelSheet.Cells(i, 7).Value ' Colonne Email
PDFPath = ExcelSheet.Cells(i, 19).Value ' Colonne PDF
Subject = "ATTESTATION"
Body = "Bonjour, " 'confidentiel

Set OutlookMail = OutlookApp.CreateItem(0) ' Crée un nouvel e-mail

With OutlookMail
.To = EmailTo
.Subject = Subject
.Body = Body
.Attachments.Add PDFPath ' Ajoute le fichier PDF comme pièce jointe
.Send ' Envoie l'e-mail
End With
Next i

' Libérer la mémoire
Set OutlookMail = Nothing

MsgBox "Emails envoyés avec succès !", vbInformation

End Sub

edit modération : code mis entre balise </>, merci d'y penser à l'avenir.

image image

Merci d'avance de votre aide.

Bonjour

Je pense que votre souci, vient du fait qu'Outlook est fermé lors de l'exécution du code
Voici ce que nous faisons en général

Sub EnvoyerEmail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim WasClosed As Boolean

    ' Vérifie si Outlook est déjà ouvert
    On Error Resume Next
    Set OutApp = GetObject(, "Outlook.Application")
    If Err.Number <> 0 Then
        ' Si Outlook n'est pas ouvert, on le lance
        Set OutApp = CreateObject("Outlook.Application")
        WasClosed = True
    End If
    On Error GoTo 0

    ' Création du mail
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .Display
        .To = "destinataire@example.com"
        .CC = ""
        .BCC = ""
        .Subject = "Sujet du mail"
        .HTMLBody = "Bonjour," & vbNewLine & "Ceci est un mail envoyé depuis Excel VBA." & .HTMLBody
        '.Attachments.Add "C:\Chemin\vers\fichier.pdf" ' Pour ajouter une pièce jointe
        .Send ' Envoie directement
        ' .Display ' Pour afficher avant envoi
    End With
    ' Fermer Outlook si on l'a ouvert nous-même
    If WasClosed Then OutApp.Quit    

    ' Nettoyage des objets
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Voilà, ceci est un exemple pas le code que vous devez utiliser

Bonjour à vous deux,

j'ai de mon côté ceci :

Public Sub EnvoiAutomatiqueMail()
    Dim OutlookApp As Object, OutlookMail As Object
    Dim Adresse As String, Message As String, Sujet As String

    'init des champs du message
    ' on récupère l'adresse oules adresses séparées par un point virgules dans la cellule A1
    Adresse = [A1].Value
    If Adresse = "" Then Exit Sub
    ' on récupère l'objet dans la cellule A2 en ajoutant un espace comme cela A2<>"" et évite la question :
    ' votre message n'a pas d'objet, voulez-vous l'envoyer comme même
    Sujet = [A2].Value & " "
    ' on récupère le message en A3
    Message = [A3].Value

    ' init du message pour OutLook
    Set OutlookApp = CreateObject("outlook.application")
    Set OutlookMail = OutlookApp.createitem(0)
    With OutlookMail
        .Subject = Sujet 'sujet du mail
        .To = Adresse 'adresse mail destinataire
        .body = Message 'corps du message
        ' affiche OutLook Avec le mail prêt à être envoyé
'        .Display
        ' envoi le mail. Si on n'utilise pas le ".Display" alors l'envoie est "transparent" pour l'utilisateur
        .Send 'on envoie le mail créé
    End With
End Sub

qui fonctionne très bien.
Le fichier représentatif :

Il vous manque peut-être une librairie au niveau d'Excel ?
ha non ! Vu le message d'erreur ! Le bouton servant à lancer la procédure est un ActiveX ? Alors remplacez le par "une forme" sur laquelle vous affecterez la macro d'envoi du mail... Au vu de mes test cela n'a pas l'air de venir de là...

@ bientôt

LouReeD

Nota : la prochaine fois que vous éditez du code ici pensez à utiliser la balise </>, merci.

Hello,

le Outlook que tu as c'est bien celui d'Office ou bien celui de windows 11 car celui-ci n'a pas d'objet activeX

Ami calmant, J.P

Merci à vous pour votre aide !

J'ai testé le premier code sur la vérification de l'ouverture et cela a l'air de fonctionner, l'erreur (91) est désormais sur la création du mail

<Set OutlookMail = OutlookApp.CreateItem(0) ' Crée un nouvel e-mail>

J'ai retéléchargé l'application depuis Windows donc c'est une bonne remarque, ce n'est pas l'application du pack Office je pense.

Qu'en pensez-vous ?

Rechercher des sujets similaires à "erreur 429 composant activex"