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 :

Envoi de mail automatique


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Envoi de mail automatique
    Bonjour à tous,

    J'essaie de faire un code VBA, mais je suis nouvelle dans le codage.

    J'ai un tableau avec Plusieurs colonnes.
    La colonne A = les noms (clients)
    colonne B, C, D, E, F, G, H = les informations sur les clients
    Colonne I = adresses mail
    Il peut y avoir des doublons dans les noms, se qui se répercute sur les adresses mails

    L'idée est d'envoyer un seul mail automatiquement à chacun des clients avec uniquement ces lignes à lui.

    Voici ma premier macro pour les données et pour les doublons adresse mails.

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    Sub RecupererDataFichier()
     
        'Déclaration des variables
        Dim Listefichier As Variant
        Dim ws_data As Worksheet
        Dim Onglet As Worksheet
        Dim Monclasseur As Workbook
        Dim derniere_ligne As Long
        Dim dernire_colonne As Long
     
        'Désactiver le presse-papier pour éviter le stockage et Raffraichissement de l'écran
        Application.CutCopyMode = False
        Application.ScreenUpdating = False
     
        'Effacer les anciennes données
        ActiveSheet.Range("A8").CurrentRegion.Clear
     
        'Récupérer le fichier des données à copier
        Listefichier = Application.GetOpenFilename(Title:="Sélectionner un fichier", _
        filefilter:="Fichiers Excel(*.xls*),*xls*", ButtonText:="Cliquez")
     
     
        'Prévoir le cas du bouton annuler
        If Listefichier <> False Then
     
            'Affecter le fichier sélectionné
            Set Monclasseur = Application.Workbooks.Open(Listefichier)
     
            'Copier les données de la feuille du classeur sélectionné
            Monclasseur.Sheets("sheet1").Range("X1:X10000,S1:S10000,Y1:Y10000,C1:C10000,F1:F10000,H1:H10000,M1:M10000,B1:B10000,AB1:AB10000").Copy
     
            'Coller les données dans la feuille active
            ThisWorkbook.ActiveSheet.Range("A8").PasteSpecial Paste:=xlPasteAll
     
            'Désactiver les messages d'alerte de Microsoft
            Application.DisplayAlerts = False
            'Fermer le classeur source
            Monclasseur.Close
     
        End If
     'SuppDoublonsMail Macro
        Range("J9").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(IF(COUNTIF(R9C9:RC[-1],RC[-1])>1,"""",RC[-1])="""","""",RC[-1])"
        Range("J9").Select
        Selection.AutoFill Destination:=Range("J9:J302")
        Range("J9:J302").Select
        Selection.Copy
        Range("I9").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J9").Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlToLeft
     
    end sub[/COLOR][/I] 
     
     
     
    [INDENT][COLOR=#0000ff]Sub EnvoyerEmail()
    '   selectionner la feuille de calcul "sheet1"
    Sheets("Data").Select
     
     
    ' EnvoyerEmail Macro
    Dim leMail As Variant
    Dim Ligne As Integer
    Dim oOutlook As Object
    Set oOutlook = CreateObject("Outlook.Application")
    Dim oMail As Object
    Set oMail = oOutlook.CreateItem(0)
    Dim cel As Variant
     
     
    'création d'un objet Outlook
    Set leMail = CreateObject("Outlook.Application")
     
     
    For Ligne = 9 To 10
     
        With leMail.CreateItem(olMailItem)
     
    'Dim oObjetWord As Object
    'Set oObjetWord = .GetInspector.WordEditor
     
        For Each cel In Range("I9:I" & Range("I9").End(xlDown).Row)
     
            .Subject = "Réception des PO OBS à faire dans x-tracker " & Range("A" & Ligne)
            .To = cel
            .CC = "orders.obs@orange.com"
            .Body = "Bonjour" & vbCr & " " & vbCr & "Merci de réceptionner vos commandes, afin de mettre les factures de vos fournisseurs en paiement." & vbCr & " " & vbCr & "Merci d'avance !" & vbCr & " " & vbCr & "Equipe Finance"
            'Range("Tableau2").Select
            'Selection.Copy
            'oObjetWord.Range(100).Paste
            .Display
            '.Send
     
            'leMail.Quit
            'Set oleMail = Nothing
            'Set oMsg = Nothing
            'MsgBox "Mails Envoyés"
     
        End With
     
    Set email = Nothing
     
    'Next cel
     
    Next Ligne
     
    End Sub
    Merci D'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Il y a des choses à corriger dans votre code :

    Bien déclarer au début les variables objet et créer les objets Outlook dans le bon ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim oOutlook as Object
        Dim oMail As Object
     
        'création d'un objet Outlook.Application
        Set oOutlook = CreateObject("Outlook.Application")
        '...
         for ligne=2 to ligneMax
             'création d'un objet olMailItem
            Set oMail = oOutlook.CreateItem(0) ' olMailItem=0
            ...
        Next ligne
        '....

    Le bloc with ... end with devrait entourer les lignes concernant les mise à jour des propriétés de l'objet olMailItem. Idéalement dans la boucle For each cel....

    Pourquoi pas utiliser une seule boucle for pour parcourir chaque ligne du tableau des clients au lieu de 2 boucles, et ajouter également une gestion d'erreur :

    Code VBA : 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
    Sub EnvoyerEmail()
        On error goto err_EnvoyerMail
        Dim oOutlook as Object
        Dim oMail As Object
     
        'création d'un objet Outlook.Application
        Set oOutlook = CreateObject("Outlook.Application")
     
        LigneMax = ActiveSheet.Cells(ActiveSheet.Columns(1).Cells.Count, 1).End(xlUp).Row
     
        for ligne=2 to ligneMax
             'création d'un objet olMailItem
            Set oMail = oOutlook.CreateItem(0) ' olMailItem=0
            with oMail
                .Subject = "Réception des PO OBS à faire dans x-tracker " & ActiveSheet.Range("A" & Ligne) ' colonne A
                .To = ActiveSheet.("I" & Ligne) ' Colonne I des e-mails
                '....
            end with
     
        next ligne
        '...
        set oMail=Nothing
        Set oOutlook = Nothing    
        Exit Sub 
     
    err_EnvoyerMail:
         MsgBox(Err.Description)
         . . . 
         Resume
     
    End Sub
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour User,

    Oui en effet j'ai refait les déclarations.

    Cependant, j'ai un message d'erreur au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To = ActiveSheet.("I" & Ligne)
    Merci d'avance!

  4. #4
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Oui, j'avais laissé une coquille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To = Activesheet.Range("i" & ligne)
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci, ça marche bien

    Je n'arrive toujours pas à sélectionner les lignes du tableau correspondants aux noms du clients afin de le rajouter dans le corps du mail.

    Et comment sauter les adresses mails qui se répètent.

    Pouvez-m'aidez ?

    Merci d'avance User.

  6. #6
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Vous pouvez obtenir le nom du client dans une variable en allant le chercher dans la colonne :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NomClient = ActiveSheet.Range("A" & ligne)
     
    ...

    Pour sauter les adresses qui se répètent, il faut 2 boucles je crois :

    Code VBA : 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
    ligne=2
     
    do while ligne<=ligneMax
     
        email=ActiveSheet.Range("I" & Ligne)
     
        'création d'un objet olMailItem
        Set oMail = oOutlook.CreateItem(0) ' olMailItem=0
        with oMail
            .Subject = "Réception des PO OBS à faire dans x-tracker " & ActiveSheet.Range("A" & Ligne) ' colonne A
            .To =  email ' Colonne I des e-mails
            '....
        end with
     
        do while email=ActiveSheet.Range("I" & Ligne)
            ligne = ligne+1
            if  ligne>ligneMax then exit do
        Loop 
     
    Loop

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  7. #7
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonsoir,

    En complément du message précédent, il faudrait indiquer où vous souhaitez afficher le nom du client, est-ce dans le corps du message ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par User Voir le message
    Bonsoir,

    En complément du message précédent, il faudrait indiquer où vous souhaitez afficher le nom du client, est-ce dans le corps du message ?

    Cdlt,

    Bonjour,

    Merci beaucoup User.

    Oui je souhaiterais afficher le nom du client dans le corps du mail en format texte.
    Ex : Bonjour Mr .......,

  9. #9
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Il faut insérer le contenu de la variable NomClient dans la chaîne de caractères à affecter à la propriété Body de l'e-mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Message = "Bonjour Mr " & NomClient & vbCrLf & vbCrLf ...
    Cela ferait :

    Code VBA : 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
    do while ligne<=ligneMax
     
        email=ActiveSheet.Range("I" & Ligne)
        NomClient = ActiveSheet.Range("A" & ligne)
     
        Message = "Bonjour Mr " & NomClient & vbCrLf & vbCrLf 
        Message = Message & "Merci de réceptionner vos commandes, afin de mettre les factures de vos fournisseurs en paiement." & vbCrLf  & vbCrLf 
        Message =  Message & "Merci d'avance !" & vbCrLf  & vbCrLf
        Message = Message & "Equipe Finance"
     
        'création d'un objet olMailItem
        Set oMail = oOutlook.CreateItem(0) ' olMailItem=0
        with oMail
            .Subject = "Réception des PO OBS à faire dans x-tracker " & ActiveSheet.Range("A" & Ligne) ' colonne A
            .To =  email ' Colonne I des e-mails
            .Body = Message
            '....

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    J'essaie le code mais ça ne marche pas
    ça me mets un msg d'erreur
    Fonction ou variable attendue.
    Peut-être que je n'ai pas déclaré les variables Email et Monclient

    Merci d'avance !

  11. #11
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Pouvez-vous poster votre code complet, ainsi que la ligne qui génère l'erreur ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  12. #12
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par User Voir le message
    Bonjour,

    Pouvez-vous poster votre code complet, ainsi que la ligne qui génère l'erreur ?

    Cdlt,
    ci-joint


    Bonjour User,

    L'idée est de d'envoyer le mail aux adresses dans la colonne I , en sélectionnant une fois une adresse mail
    Et chaque mail envoyé, je veux mettre dans le corps du mail sous forme de tableau (pièce jointe) les lignes correspondants aux clients.

    Ex :

    Bonjour Jean,

    Merci de réceptionner vos commandes, afin de mettre les factures de vos fournisseurs en paiement.
    Merci d'avance !
    Équipe Finance.

    POR Requester PO Number Invoice Number Invoice date Days POR Ref Amount (excl. tax) Supplier POR Req. Email Id
    Jean Dupont 3Z874A983 565 09/02/2021 49 67865 44,81 LIMITED jean.dupont @yahoo.com
    Jean Dupont A2340987033A 565 10/02/2021 48 456RTY 367,14 LIMITED jean.dupont @yahoo.com
    Jean Dupont A0394580A93 645 09/02/2021 49 R56FDGDT 44,81 INTERNATIONAL jean.dupont @yahoo.com
    Jean Dupont 438745 453 10/02/2021 48 TSS 367,14 INTERNATIONAL jean.dupont @yahoo.com

    Cordialement,
    nocky2019
    --------------------------------------------------

    Bonjour Marine,

    Merci de réceptionner vos commandes, afin de mettre les factures de vos fournisseurs en paiement.
    Merci d'avance !
    Équipe Finance.

    POR Requester PO Number Invoice Number Invoice date Days POR Ref Amount (excl. tax) Supplier POR Req. Email Id
    Marine DUPONT 34908093453 3 09/03/2021 21 RTYU 163 679,06 SFR marine.dupont@yahoo.com
    Marine DUPONT 3409823094 2 17/03/2021 13 IUUIUYK 11 050,00 BOUYGUES marine.dupont@yahoo.com

    Cordialement,
    nocky2019

    Merci d'avance !
    Fichiers attachés Fichiers attachés

  13. #13
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Je crois qu'il serait mieux de générer le tableau dans le corps du message en utilisant la propriété HTMLBody de l'objet mailitem.

    Dans ce cas, pour les sauts de ligne dans le message on utilise des "<br>", et pour construire le tableau on utilise la balise <TABLE>...</TABLE>, voici un extrait de code :

    Code vba : 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
        ligne = 2
     
        Set plage = ActiveSheet.Range("A1:I4")
     
        headerHTML = "<head> <style> table, th, td {border: 1px solid black; border-collapse:collapse;}</style> </head><TABLE width=" & plage.Columns.Width & ">" & Chr(10) & "<TR>"
     
        For Each col In plage.Columns
            headerHTML = headerHTML & "<TH width=" & col.Width & ">" & plage.Cells(1, col.Column)
        Next col
     
        Do While ligne <= ligneMax
     
            email = ActiveSheet.Range("I" & ligne)
     
            nomClient = ActiveSheet.Range("A" & ligne)
     
            Message = "Bonjour Mr " & nomClient & "<br>" & "<br>"
            Message = Message & "Merci de réceptionner vos commandes, afin de mettre les factures de vos fournisseurs en paiement." & "<br>" & "<br>"
            Message = Message & "Merci d'avance !" & "<br>" & "<br>"
            Message = Message & "Equipe Finance" & "<br>" & "<br>"
     
            Ligne1 = ligne
     
            Do While email = ActiveSheet.Range("I" & ligne)
                ligne = ligne + 1
                If ligne > ligneMax Then Exit Do
            Loop
     
            tableHTML = headerHTML
     
            For i = Ligne1 To ligne - 1
                tableHTML = tableHTML & "<TR>"
                For j = 1 To 9
                    tableHTML = tableHTML & "<TD bgcolor=" & DecVersHexa(plage.Cells(i, j).Interior.Color) & ">" & ActiveSheet.Cells(i, j)
                Next j
            Next i
     
            tableHTML = tableHTML & "</TABLE>"
     
            Message = Message & tableHTML
     
            'création d'un objet olMailItem
            Set oMail = oOutlook.CreateItem(0) ' olMailItem=0
            With oMail
                .Subject = "Réception des PO OBS à faire dans x-tracker " & nomClient ' colonne A
                .To = email  ' Colonne I des e-mails
                .HTMLBody = Message
                .Send
                '....
            End With
     
        Loop

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  14. #14
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    RE

    Holalalalala, ça fonctionne.

    Une dernière choses.

    Est-ce que c'est possible de ne pas rajouter la colonne I des mail dans le tableau insérer dans le mail qui est envoyé aux clients ?
    L'entête du tableau ne prend pas la couleur bleu du tableau, et les colonnes ne prennent pas la taille de base du tableau.

    Aussi, est-ce que c'est possible de prendre que prénom dans le corps du texte. Ex : Bonjour Jean. Puisqu'il y a des femmes et hommes.

    Oups, je crois que je demande trop .

    Merci d'avance.

  15. #15
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Pour ignorer la dernière colonne, il faut redéfinir la plage de cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = ActiveSheet.Range("A1:H4")
    Ici, la zone des cellules se termine par la colonne "H".

    Il faut aussi redéfinir l'indice de la dernière colonne du tableau. Le mettre à 8 au lieu de 9, dans le code permettant de générer ce tableau :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tableHTML = headerHTML
     
            For i = Ligne1 To ligne - 1
                tableHTML = tableHTML & "<TR>"
                For j = 1 To 8
                    tableHTML = tableHTML & "<TD bgcolor=" & DecVersHexa(plage.Cells(i, j).Interior.Color) & ">" & ActiveSheet.Cells(i, j)
                Next j
            Next i
     
            tableHTML = tableHTML & "</TABLE>"

    Pour extraire le prénom du nom complet, il faut utiliser la fonction split :

    ? Split("Jean Dupont"," ")(0)

    va renvoyer le prénom "Jean"

    ? Split("Jean Dupont"," ")(1)

    va renvoyer le nom "Dupont"

    Donc on va faire dans le code :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    NomClient = Split(ActiveSheet.Range("A" & ligne)," ")(0)

    au lieu de :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    NomClient = ActiveSheet.Range("A" & ligne)

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  16. #16
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 942
    Points : 15 753
    Points
    15 753
    Billets dans le blog
    21
    Par défaut
    Bonsoir,

    Si votre problème est résolu pouvez-vous clore la discussion ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Portez-vous bien

  17. #17
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2021
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par User Voir le message
    Bonsoir,

    Si votre problème est résolu pouvez-vous clore la discussion ?

    Cdlt,
    Désolé pour la réponse tardive.
    Merci beaucoup USER
    Le code fonctionne parfaitement .

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

Discussions similaires

  1. [AC-2010] modèle papier à lettre Outlook dans code Vba envoi mail Access
    Par ioco34 dans le forum VBA Access
    Réponses: 7
    Dernier message: 30/05/2019, 20h38
  2. [OL-2007] Amélioration de code vba pour e-Mailing automatique.
    Par artistenherbe dans le forum Outlook
    Réponses: 0
    Dernier message: 19/08/2015, 16h32
  3. [XL-2010] Questions sur : Envoie de Mail Automatique en vba
    Par rob1son76 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2015, 12h38
  4. Réponses: 14
    Dernier message: 17/11/2005, 17h16
  5. Envoi de mail automatique avec Visual C++
    Par cza dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2005, 15h59

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