Macro reponse automatique outlook 2003 en vba

Bonjour,

Je suis très novice en VBA et surtout sur outlook, donc je souhaiterait une macro sui me fasse gagner beaucoup de temps.

Je vous explique :

Je dois détecter si dans le sujet du message il y a le mot « Bravo » et répondre au mail avec un certain « texte » prédéfini, mais la où ça se complique c'est que je dois trouver l'adresse du destinataire dans le contenu du mail et non répondre à l'expéditeur du message.

Tout cela en automatique dès réception du message.

J'espère que ma requête est compréhensible.

Je pensait chercher le @ dans le message et définir la taille de l'adresse mail en cherchant l'espace au début et entré à la fin de l'adresse mais je ne sais pas comment faire dans une macro.

Je suis à votre disposition pour toute précision, si quelqu'un peut me dépanner ça m'oterait une grosse épine du pied.

Merci


27 réponses

Résumé de la discussion

Une demande porte sur l'automatisation d'Outlook via VBA : détecter le mot « Bravo » dans le sujet et répondre avec un texte prédéfini, tout en extraire l'adresse du destinataire présente dans le corps. Plusieurs propositions prévoient que la détection du préfixe « Bravo » dans le sujet déclenche l'envoi automatique, et que l'adresse du destinataire soit extraite du corps par une méthode basique d'extraction. Certaines réponses expliquent comment adapter le code pour rechercher l'adresse entre des délimiteurs spécifiques ou apprendre à diriger la réponse vers le destinataire extrait plutôt que l'expéditeur. En cas d'erreur, il est recommandé de tester sur des messages de test et de vérifier minutieusement l'extraction de l'adresse avant l'envoi, afin d'éviter les envois au mauvais destinataire.

Bobot (l’IA à votre service)
  1. ma question à peu de succès,

    bonne soirée à tous et à toutes, ne vous couchez pas trop tard, demain boulot!
    0
    1. Bonjour,
      Donc vous vous mettez entre l'expéditeur et le destinaire du message ... est-ce bien cela ?
      0
      1. Bien le bonsoir Le Pingou,

        Oui en gros c'est cela j'ai une application automatique qui m'envoie les coordonnées du client et je souhaiterait automatiquement envoyer un mail à cette personne lui indiquant la marche à suivre pour recevoir son colis en bon état et quoi faire au cas ou il serait détérioré.

        Il n'y a pas de secret j'envoie des oeufs à couver par transporteur, donc les conseils sont nombreux.

        Merci et bonne soirée
        0
    2. Bonsoir, j'aimerai bien connaître quelqu'un qui maîtrise bien Visual Basic,
      j'ai un projet à faire là dessus , mé je ne sais pas comment ça fonctionne, j'ai essayé de faire une auto-formation tout en lisant klk articles sur VB , mé j'arrive pas puisk ce qu'il nous demande n'a rien avoir avec
      0
      1. Bonjour,
        Vous dites : j'ai une application automatique qui m'envoie les coordonnées du client
        Sous qu'elle forme son ces données ?
        Qu'elle est cette application automatique ?
        Salutations.
        Le Pingou
        0
        1. C'est un site d'enchère bien connu qui envoie les coordonnées de l'acheteur.

          Sous quelle forme je ne sais pas quel language est utilisé, les coordonnées et l'adresse mail sont contenues dans le corp du message envoyé par mail.

          Bonne soirée
          0
        2. ouui pas de soucis comment je fais? un copier collé suffit?
          0
      2. Bonjour,Est-il possible d'avoir une copie d'un message ?
        0
        1. Bonjour,
          Je ne suis pas certain qu'un copier/coller va fonctionner, le mieux est de copier le message sur un document Word et de mettre ce dernier sur https://www.cjoint.com/ et poster le lien.
          0
        2. Bonjour,
          Cette procédure récupère l'adresse et l'affiche ...
          Sub ParcourirInBox()
          Dim oMail
          Dim myFolder As Folder
          Dim myOlApp As Outlook.Application
          Dim myNamespace As NameSpace
          
          
          Set myOlApp = Outlook.Application
          Set myNamespace = myOlApp.GetNamespace("MAPI")
          Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
          For Each oMail In myFolder.Items
              Debug.Print oMail.Subject
              DebutAdresse = InStr(1, oMail.Body, "Pseudo (")
              FinAdresse = InStr(DebutAdresse, oMail.Body, ")")
              AdresseEmail = Mid(oMail.Body, DebutAdresse, FinAdresse - DebutAdresse)
              MsgBox "Adresse destinataire : " & AdresseEmail
          Next oMail
          End Sub
          --
          Salutations.
          Le Pingou
          0
          1. Super, merci pour ce travail je vais mettre en application.

            Comment puis-je faire après pour envoyer un message automatique à ce destinataire à réception du message d'origine? le message est du genre: à réception du colis déballez le devant le livreur afin d'émettre les réserves de rigueur en cas de problème....

            Merci bonne soirée
            0
        3. Bonjour,
          A vous de contrôler le bon fonctionnement de cette procédure car je ne travaille pas acec MSO Outlook !
          Assurez-vous que l'adresse extraite soit correcte !

          Sub ParcourirInBox()
          Dim oMail
          Dim myFolder As Folder
          Dim myOlApp As Outlook.Application
          Dim myNamespace As NameSpace
          Dim strHTML As String, LObjet As String
          
          Set myOlApp = Outlook.Application
          Set myNamespace = myOlApp.GetNamespace("MAPI")
          Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
          For Each oMail In myFolder.Items
              Debug.Print oMail.Subject
              DebutAdresse = InStr(1, oMail.Body, "Pseudo (")
              FinAdresse = InStr(DebutAdresse, oMail.Body, ")")
              AdresseEmail = Mid(oMail.Body, DebutAdresse, FinAdresse - DebutAdresse)
              MsgBox "Adresse destinataire: " & AdresseEmail
          ' objet du courriel
              LObjet = "tâches urgentes à effectuer"
          ' corps du courriel
              strHTML = ""
              strHTML = strHTML & "<HEAD>"
              strHTML = strHTML & "<BODY>"
              strHTML = strHTML & "Bonjour ,<BR>"
              strHTML = strHTML & "<BR>"
              strHTML = strHTML & "<BR>... à réception du colis déballez le devant le livreur"
              strHTML = strHTML & "<BR> afin d'émettre les réserves de rigueur en cas de problème...."
              strHTML = strHTML & "<BR> ..........."
              strHTML = strHTML & "<BR>"
              strHTML = strHTML & "<BR>Avec mes respectueuses salutations."
              strHTML = strHTML & "</BODY>"
              strHTML = strHTML & ""
          ' préparation de l'envoi
              Set mailobj = CreateObject("Outlook.Application")
              Set mail = mailobj.CreateItem(olMailItem)
              mail.To = AdresseEmail
              mail.Subject = LObjet
              mail.HTMLBody = strHTML
              mail.Display ' pour afficher le courriel avant l'envoie
          '***** Activer [mail.send] uniquement lorsque tout est en ordre
          ' mail.Send
          ' *********
          Next oMail
          
          End Sub
          0
          1. Merci d'avance,

            Je vais regarder ça à tête reposée.

            Bonne soirée
            0
          2. Bondoir, me revoilà.

            Donc la ligne "Dim myFolder As Folder" pose soucis j'ai un mesage "erreur de compilation: type defini par l'utilisateur non defini"

            Comment y remèdier
            Merci
            0
          3. re,

            J' ai mis folders c'est bon cette fois -ci, mais j'ai erreur 13 incompatibilité de type, et là je sèche

            mERCI
            0
        4. Bonjour,
          Pouvez-vous indiquer ou vous avez placé cette procédure ?
          0
          1. Je l'ai mise dans un projet que vb à appellé this outlook session
            0
        5. Bonjour,
          Ouvrir l'éditeur Visual Basic : touche Alt+F11
          Menue Outils clic Références
          Contrôler que Microsoft Outlook 12.0 Object Library soit coché.
          Si non, chercher dans la liste et cocher la référence puis OK.
          0
          1. c'est le 11.0 qui est coché
            0
        6. Bonjour,
          Si vous avez Microsoft Outlook 11.0 Object Library de coché, donc une version 2003 de MSO Outlook, mais en principe il ne doit pas y avoir de problème car je viens d'installer Outlook pour pouvoir tester ma procédure et tout fonctionne correctement.
          Merci d'essayer avec le document joint, clic sur le bouton orange et que se passe-t-il ?
          https://www.cjoint.com/?egwAefotDO
          0
          1. Bpnsoir,

            moi quand je clique j'ai sur la ligne: "myFolder As Folder" le défaut projet ou bibliothèque introuvable, c'est certainement un détail qui bloque mias vu que ce n'est pas mon domaine je suis embèté.

            Encore merci

            OUi c'est outlook 2003
            0
        7. Bonjour,
          Si c'est sur le document envoyé, faite le clic et dès que le message d'erreur apparait vous faites une copie d'écran (touche PRINT Screen) et vous coller l'image sur un doc vide que vous mettez sur https://www.cjoint.com/ et poster le lien.
          0
        8. Bonjour,
          Merci, essayer de supprimer le [As Folder] et vous laissez Dim myFolder.
          0
          1. OK, donc sur votre document l'erreur revient sur la ligne du dessous, mais dans outlook ça va plus loin jusqu'à une erreur 5, voyez: https://www.cjoint.com/?egxUzxHBAX
            0
        9. Bonjour,
          Merci pour l'information.
          Pour se soir c'est l'heure des braves ...
          Demain je vais essayer de trouver les différences entre version 2003 et 2007 !
          Je vous tiens au courant.
          0
          1. Ok bien entendu, bonne nuit à vous et à demain
            0
        10. Bonjour,
          Remplacer la procédure par celle-ci après et lancer là.
          Faite une copie d'écran des 2 messages qui s'affichent (clic OK pour passer du premier au deuxième).
          Sub ParcourirInBox()
          Dim oMail
          Dim myFolder
          Dim myOlApp As Outlook.Application
          Dim myNamespace As NameSpace
          Dim strHTML As String, LObjet As String
          Set myOlApp = Outlook.Application
          Set myNamespace = myOlApp.GetNamespace("MAPI")
          Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
          For Each oMail In myFolder.Items
          Debug.Print oMail.Subject
          debutAdresse = InStr(1, oMail.Body, "Pseudo (")
          MsgBox "Position du début : " & debutAdresse
          MsgBox "Corps de texte : " & oMail.Body
          FinAdresse = InStr(debutAdresse, oMail.Body, ")")
          AdresseEmail = Mid(oMail.Body, debutAdresse, FinAdresse - debutAdresse)
          MsgBox "Adresse destinataire: " & AdresseEmail
          Next oMail
          End Sub
          0
          1. Bonjour, c'est presque bon, la première macro fonctionne j'ai juste changé le "pseudo (" en "@" afin de rechercher l'adresse mail et ça me donne comme résultat: @hotmail.com"Dupont@hotmail.com, le message ce crée bien pas de soucis, d'où ma question maintenant comment sélectionner uniquement l'adresse mail qui est après le ".

            Comment désigner à la macro de s'executer uniquement sur les messages dont l'objet contient le mot "bravo"

            Et comment faire effectuer la macro à chaque nouvelle importation de mail?

            La macro donne:

            Sub ParcourirInBox1()
            Dim oMail As Object
            Dim myFolder
            Dim myOlApp As Outlook.Application
            Dim myNamespace As NameSpace
            Dim strHTML As String, LObjet As String
            'Dim myFolder As Folders
            Set myOlApp = Outlook.Application
            Set myNamespace = myOlApp.GetNamespace("MAPI")
            Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
            For Each oMail In myFolder.Items
            Debug.Print oMail.Subject
            debutAdresse = InStr(1, oMail.Body, "@")
            FinAdresse = InStr(debutAdresse, oMail.Body, ")")
            AdresseEmail = Mid(oMail.Body, debutAdresse, FinAdresse - debutAdresse) 'debutAdresse,
            MsgBox "Adresse destinataire: " & AdresseEmail
            ' objet du courriel
            LObjet = "tâches urgentes à effectuer"
            ' corps du courriel
            strHTML = ""
            strHTML = strHTML & "<HEAD>"
            strHTML = strHTML & "<BODY>"
            strHTML = strHTML & "Bonjour ,<BR>"
            strHTML = strHTML & "<BR>"
            strHTML = strHTML & "<BR>... à réception du colis déballez le devant le livreur"
            strHTML = strHTML & "<BR> afin d'émettre les réserves de rigueur en cas de problème...."
            strHTML = strHTML & "<BR> ..........."
            strHTML = strHTML & "<BR>"
            strHTML = strHTML & "<BR>Avec mes respectueuses salutations."
            strHTML = strHTML & "</BODY>"
            strHTML = strHTML & ""
            ' préparation de l'envoi
            Set mailobj = CreateObject("Outlook.Application")
            Set mail = mailobj.CreateItem(olMailItem)
            mail.To = AdresseEmail
            mail.Subject = LObjet
            mail.HTMLBody = strHTML
            mail.Display ' pour afficher le courriel avant l'envoie
            '***** Activer [mail.send] uniquement lorsque tout est en ordre
            'mail.Send
            ' *********
            Next oMail

            End Sub

            Merci et bon week end
            0
            1. Bonjour,
              Le code corrigé pour l'extraction de l'adresse en fin. Par contre je ne trouve pas de mot [Bravo] comme référence, et de plus j'ai l'impression que c'est trop aléatoire, il faut trouver un autre critère.
              Que faut-il comprendre : chaque nouvelle importation de mail?

              Sub ParcourirInBox()
              Dim oMail
              Dim myFolder
              Dim myOlApp As Outlook.Application
              Dim myNamespace As NameSpace
              Dim strHTML As String, LObjet As String
              
              Set myOlApp = Outlook.Application
              Set myNamespace = myOlApp.GetNamespace("MAPI")
              Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
              For Each oMail In myFolder.Items
                  Debug.Print oMail.Subject
                  debutAdresse = InStr(1, oMail.Body, "mailto:")
                  FinAdresse = InStr(debutAdresse, oMail.Body, """")
                  AdresseEmail = Mid(oMail.Body, debutAdresse + 7, FinAdresse - debutAdresse - 7)
              ' MsgBox "Adresse destinataire: " & AdresseEmail
              ' objet du courriel
                  LObjet = "tâches urgentes à effectuer"
              ' corps du courriel
                  strHTML = ""
                  strHTML = strHTML & "<HEAD>"
                  strHTML = strHTML & "<BODY>"
                  strHTML = strHTML & "Bonjour ,<BR>"
                  strHTML = strHTML & "<BR>"
                  strHTML = strHTML & "<BR>... à réception du colis déballez le devant le livreur"
                  strHTML = strHTML & "<BR> afin d'émettre les réserves de rigueur en cas de problème...."
                  strHTML = strHTML & "<BR> ..........."
                  strHTML = strHTML & "<BR>"
                  strHTML = strHTML & "<BR>Avec mes respectueuses salutations."
                  strHTML = strHTML & "</BODY>"
                  strHTML = strHTML & ""
              ' préparation de l'envoi
                  Set mailobj = CreateObject("Outlook.Application")
                  Set mail = mailobj.CreateItem(olMailItem)
                  mail.To = AdresseEmail
                  mail.Subject = LObjet
                  mail.HTMLBody = strHTML
                  mail.Display ' pour afficher le courriel avant l'envoie
              '***** Activer [mail.send] uniquement lorsque tout est en ordre
              ' mail.Send
              ' *********
              Next oMail
              
              End Sub
              0
              1. Bonjour,
                Dans un premier temps, la procédure qui suit vous averti de l'arrivé d'un nouveau message. La mettre dans le module [ThisOutlookSession] d'Outlook.

                Private Sub Application_NewMail()
                    MsgBox "Vous venez de recevoir un nouveau Mail !", vbExclamation
                End Sub


                Il faut déterminer une référence valable pour déclencher l'envoi du message désiré (procédure : [ParcourirInBox]).
                0
                • 1
                • 2