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 :

vba, arrêt de la boucle envoie d'un mail [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut vba, arrêt de la boucle envoie d'un mail
    Bonjour,

    voila je souhaite quand ma macro rencontre une anomalie qu'elle m'envoie un mail et s'arrête.
    J'ai cherché il y a bcp de choses sur internet plus ou moins compliqué, certains passent directement par SFTP (je ne sais pas trop ce que c'est), enfin j'ai essayé pas mal de choses et ca ne marche pas.
    J'ai vu sur ce forum une solution en passant par outlook soit disant plus simple donc pourquoi pas.
    Mais quand je lance ma macro et qu'on arrive sur l'envoie de mail j'ai le message suivant:
    Erreur d'exécution '429': Un composant ActiveX ne peut pas créer d'objet.

    Peut-être faut il télécharger une librairie supplémentaire? Mais où? Excel ou outlook? Laquelle? J'ai coché dans outils > Référence, la librairie microsoft outlook.
    Peut etre est-ce un pb dans ma macro?

    Je mets mon code
    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
     
     Dim Maille As String
     Dim Sujet As String
     Dim DernLigne as long
     
    DernLigne = Range("A1048576").End(xlUp).Row
    For a = 2 To DernLigne
      If Sheets("Feuil3").Cells(a, 4).Value <> "SUCCEED" Then
      'alors on rejette directement
      Sheets("Résultat").Range("A1").Value = "ANOMALIE"
      Maille = "moi@gmail.com"
      Sujet = "Anomalie"
     
    Set OL = CreateObject("Outlook.Application")
    Set MyItem = OL.CreateItem(olMailItem)
    With MyItem
        .To = Maille
        .Subject = Sujet
        .Categories = "Banking-Info"
        .OriginatorDeliveryReportRequested = False
        .ReadReceiptRequested = False
        .Send
    End With
    Exit Sub
    End If
    Next
    Merci pour votre aide,

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Comment déclares-tu tes objets OL et MyItem ?

    Si tu ne mets pas de référence à Outlook, utilise 0 comme paramètre ici
    Set MyItem = OL.CreateItem(0)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    curieux en informatique
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : curieux en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut Envoi de mail
    Bonjour ,

    Je ne vois pas comment tu envoies ton mail (a si .send a la fin) , mais voici ce que j'ai fait de mon coté si ca peu t'aider
    enlèves les commentaires que tu veux et insere ce code dans ta boucle FOR a ....

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Private Sub CreateMail()
    '**********************************************************************************
    ' Création d'un mail pour un envoi de données via Outlook
    ' le 28 mars 2012 par Francois
    ' Nécessite les références : Microsoft outlook xx.0 Object library
    '***********************************************************************************
     
    'Permet la visualisation du mail sans l'ouverture d'Outlook
    Dim OLappli As Outlook.Application
    Set OLappli = New Outlook.Application
     
    'Variables informations du mail
    Dim OLemail As Outlook.MailItem
    Dim DestiMail As String
    Dim DestiMail2 As String
    Dim DestiMail3 As String
    Dim TitreMail As String
    Dim CorpsMail As Variant
    Dim Hyperlien As Variant
    Dim Hyperlien1 As Variant
    Dim Hyperlien2 As Variant
    Dim Hyperlien3 As Variant
     
    'Variables des destinataires
    'principal
    DestiMail = "prenom.nom1@gmail.com"
    'en copie
    'DestiMail2 = "prenom.nom2@gmail.com"
    'en copie cachée
    'DestiMail3 = "prenom.nom3@gmail.com"
     
    '---------------------------------
    'Construction du titre et du corps
    '---------------------------------
    'Titre
    TitreMail = "Fichier ALERTE"
     
    'Corps   & = concatene  et vbCrlf = Retour à la ligne
    CorpsMail = "Bonjour, " & vbCrLf _
              & "Le fichier ALERTE vient d'etre crée ..." & vbCrLf _
              & "                                       " & vbCrLf _
              & "Cordialement"
     
    '---------------------------------------
    'Construction du Mail avec les variables
    '---------------------------------------
        Set OLemail = OLappli.CreateItem(olMailItem)
            OLemail.To = DestiMail
    '        OLemail.CC = DestiMail2
    '        OLemail.BCC = DestiMail3
            OLemail.Subject = TitreMail
            OLemail.Body = CorpsMail
     
            'Si on désire mettre un format
            'Olemail.HTMLBody=
            'OLemail.BodyFormat = olFormatHTML
     
        'Demande un accusé de réception
    '    OLemail.OriginatorDeliveryReportRequested = True
     
        'Demande un accusé de lecture
    '        OLemail.ReadReceiptRequested = True
     
        'Supprime le Mail dans le dossier : Éléments envoyés
    '        OLemail.DeleteAfterSubmit = True
     
        ' Affiche le Mail et envoi en manuel
            OLemail.Display
        'OU
        ' Envoie le message directement
            'OLemail.Send
    Fin:
        ' Vide la mémoire
        Set OLemail = Nothing
        Set OLappli = Nothing
     
    End Sub

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    ici ton mail sera envoyer automatiquement avec ".send"

    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
    Public Sub EnvoiAutomatiqueMail()
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim DernLigne As Long
    Dim a As Long
    Dim Maille As String
    Dim Sujet As String
     
       On Error GoTo EnvoiAutomatiqueMail_Error
     
    DernLigne = Sheets("Feuil3").Range("A1048576").End(xlUp).Row
    For a = 2 To DernLigne
      If Sheets("Feuil3").Cells(a, 4).Value <> "SUCCEED" Then
      'alors on rejette directement
      Sheets("Résultat").Range("A1").Value = "ANOMALIE"
      Maille = "moi@gmail.com"
      Sujet = "Anomalie"
     
    Set OutlookApp = CreateObject("outlook.application")
    Set OutlookMail = OutlookApp.CreateItem(0)
    With OutlookMail
     
     ' pour choisir l'expéditeur : http://www.developpez.net/forums/d1315835/logiciels/microsoft-office/excel/macros-vba-excel/envoyer-email-from-expediteur/
    .Subject = Sujet
    .To = Maille
    .Body = "Anomalie sur ligne: " & a
    .Send 'sans autorisation
     
     
    Exit Sub 'pour arrêter l'envoi de mail à la première anomali trouvé!
    End With
    End If
    Next a
      On Error GoTo 0
       Exit Sub
     
    EnvoiAutomatiqueMail_Error:
     
      MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure EnvoiAutomatiqueMail of Module Mail"
     
    End Sub

    Par contre il te faut inscrire la référence "Michrosoft office outlook view control"
    Je pense qu'il te faut également que Outlook soit ouvert!

    Sans outlook tu as un exemple ici mais il te faut renseigné ton FAI avant ! si tu travail toujours sur le même post cela ne pose pas de problème! regarde ici il y a un fichier sur la 9ème discussion

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    la ligne exacte qui pose problème c'est vraiment celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set OutlookApp = CreateObject("outlook.application")
    J'ai essayé avec outlook ouvert et outlook fermé mais rien ne marche.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Enlève toutes les références sauf les 4 de base:
    - Visual Basic for Applications
    - Microsoft Excel X.X Object Library
    - OLE Automation
    - Microsoft Office X.X Object Library

    Au cas où... pour enlever les références, aller dans l'éditeur VBA (Alt-F11), menus Outils, puis Références

    As-tu toujours l'erreur 429 après cette modif ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/07/2014, 15h14
  2. [VBA-E] probleme de boucle
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/03/2006, 17h11
  3. [VBA-A] Condition pour boucle if
    Par ptitegrenouille dans le forum Access
    Réponses: 6
    Dernier message: 23/11/2005, 09h33
  4. Arrêt d'une boucle "if"
    Par Aurèl90 dans le forum Access
    Réponses: 6
    Dernier message: 18/11/2005, 15h33
  5. Envoi d'un mail en VBA: outlook ne se lance pas
    Par Hannibal dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/06/2003, 15h24

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