VBA: Comment envoyer directement depuis excel un mail
Fermé
Saajo
Messages postés
7
Date d'inscription
vendredi 18 janvier 2019
Statut
Membre
Dernière intervention
14 juin 2019
-
Modifié le 11 juin 2019 à 19:56
yg_be Messages postés 23502 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 mars 2025 - 14 juin 2019 à 00:47
yg_be Messages postés 23502 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 mars 2025 - 14 juin 2019 à 00:47
A voir également:
- VBA: Comment envoyer directement depuis excel un mail
- Excel compter cellule couleur sans vba - Guide
- Mkdir vba ✓ - Forum VB / VBA
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
- Autofill vba ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
2 réponses
yg_be
Messages postés
23502
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 mars 2025
Ambassadeur
1 571
11 juin 2019 à 21:03
11 juin 2019 à 21:03
bonjour, merci d'utiliser les balises de code pour partager un programme.
as-tu une question, comment pouvons-nous t'aider?
as-tu une question, comment pouvons-nous t'aider?
Merci pour ton retour YG_BE.
Désolé, mais je ne comprends ta remarque concernant les balises.
L'objectif est de faire une boucle prenant en compte une sélection par feuille, à envoyer pour chaque contact correspondant.
Je souhaiterais faire une boucle qui ferait l'action suivante:
Sélectionner/copier les données à partir de la feuille n°4 nommée "abekkal"
Coller dans un mail outlook
Envoyer le mail
Passer à la feuille suivante
Répéter la même action ci-dessus jusqu'à la fin des feuille du classeur
J'ai tenté de créer une boucle à partir de For ou For Each mais aucune des deux fonctionnent.
Néanmoins ma deuxième macro sans la boucle fonctionne pour la feuille "abekkal". Hors, cela voudrais dire que je dois répéter le code au tant de fois qu'il existe de feuille, et multiplierais le nombre de ligne du code.
Je pense que le problème provient de la sélection de la feuille qui désigne une feuille précise et non une feuille une par une. Ci dessous mon code est celui-ci:
=> Set Mafeuille = ThisWorkbook.Sheets("abekkal")
Cela permet de définir la feuille sur laquelle on sélectionne les données et ensuite que l'on colle dans le mail pour envoi.
Idéalement, il faudrait avoir un code permettant de choisir feuille après feuille une fois l'action est terminer.
J'espère avoir été claire et précis.
Encore merci pour ton aide,
Saajo
Désolé, mais je ne comprends ta remarque concernant les balises.
L'objectif est de faire une boucle prenant en compte une sélection par feuille, à envoyer pour chaque contact correspondant.
Je souhaiterais faire une boucle qui ferait l'action suivante:
Sélectionner/copier les données à partir de la feuille n°4 nommée "abekkal"
Coller dans un mail outlook
Envoyer le mail
Passer à la feuille suivante
Répéter la même action ci-dessus jusqu'à la fin des feuille du classeur
J'ai tenté de créer une boucle à partir de For ou For Each mais aucune des deux fonctionnent.
Néanmoins ma deuxième macro sans la boucle fonctionne pour la feuille "abekkal". Hors, cela voudrais dire que je dois répéter le code au tant de fois qu'il existe de feuille, et multiplierais le nombre de ligne du code.
Je pense que le problème provient de la sélection de la feuille qui désigne une feuille précise et non une feuille une par une. Ci dessous mon code est celui-ci:
=> Set Mafeuille = ThisWorkbook.Sheets("abekkal")
Cela permet de définir la feuille sur laquelle on sélectionne les données et ensuite que l'on colle dans le mail pour envoi.
Idéalement, il faudrait avoir un code permettant de choisir feuille après feuille une fois l'action est terminer.
J'espère avoir été claire et précis.
Encore merci pour ton aide,
Saajo
yg_be
Messages postés
23502
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 mars 2025
1 571
12 juin 2019 à 16:58
12 juin 2019 à 16:58
voici les explications à propos des balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
yg_be
Messages postés
23502
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 mars 2025
1 571
12 juin 2019 à 17:11
12 juin 2019 à 17:11
peut-être ainsi:
Dim x As Integer, maFeuille As Worksheet For x = 4 To ThisWorkbook.Sheets.Count Set maFeuille = ThisWorkbook.Sheets(x) '.... Next x
yg_be
Messages postés
23502
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 mars 2025
1 571
13 juin 2019 à 08:32
13 juin 2019 à 08:32
si tu veux parcourir toutes les feuilles:
autre façon de faire une boucle en commençant par une feuille au choix:
for each maFeuille in ThisWorkbook.Sheets '.... Next maFeuille
autre façon de faire une boucle en commençant par une feuille au choix:
Set maFeuille = ThisWorkbook.Sheets("abekkal") Do While maFeuille.Index <> ThisWorkbook.Sheets.Count '... Set maFeuille = ThisWorkbook.Sheets(maFeuille.Index + 1) Loop
Saajo
Messages postés
7
Date d'inscription
vendredi 18 janvier 2019
Statut
Membre
Dernière intervention
14 juin 2019
Modifié le 13 juin 2019 à 13:51
Modifié le 13 juin 2019 à 13:51
Bonjour YG_BE,
Merci pour ton retour et l'aide apportée au sujet (très sympa).
Pour des raison de productivité, j'ai complètement contourné le sujet de la boucle des feuilles en passant par une seule et même feuille appelé "KPI Board" (ci-joint copie écran).

Mon code permettant d'envoyé des mails en masse est celui-ci (il fonctionne, mais n'est pas parfait!):
Néanmoins, j'ai deux problématiques:
1er Problématique: Lorsque la colonne "J" correspondant au destinataire est VIDE, il me génère une erreur d’exécution avec le message suivant: "le destinataire n'est pas renseigné. assurez vous qu'une valeur soit renseigné".
Normale, puisque la cellule "J5" est vide!
L'objectif ici serait de créer une condition du style: si cellule vide alors passé à la cellule suivante.
2e Problématique: le code n'est pas parfait car il m'envoi un mail pour chaque ligne. C'est à dire pour un même destinataire j'aurai autant de mail envoyé que de lignes. Pas cool pour le destinataire!
L'objectif ici, serait une condition qui dirait: si plusieurs fois le même destinataire alors envoyé l'ensemble des lignes sur un même mail.
Bah voila, voici mon dernier travail actualisé.
Si tu peux m'apporté ton aide sur les 2 problèmatiques citées ci-dessus, cela serait TOP.
Encore merci pour ton temps et dispo.
Bonne journée.
José
Merci pour ton retour et l'aide apportée au sujet (très sympa).
Pour des raison de productivité, j'ai complètement contourné le sujet de la boucle des feuilles en passant par une seule et même feuille appelé "KPI Board" (ci-joint copie écran).

Mon code permettant d'envoyé des mails en masse est celui-ci (il fonctionne, mais n'est pas parfait!):
Sub EnvoiMail() 'Déclaration de variable Dim LeMail As Variant Dim Ligne As Integer Dim LastRow As Integer 'Affectation des variables Set LeMail = CreateObject("Outlook.Application") Sheets("KPI Board").Select LastRow = Range("J40000").End(xlUp).Row 'Départ boucle' For Ligne = 2 To LastRow Application.ScreenUpdating = False With LeMail.CreateItem(olMailItem) .To = Range("J" & Ligne) 'SI VIDE ALORS PASSER LA CELLULE EN DESSOUS' .Subject = "Relance facture non validées" .Body = "Bonjour," & Chr(10) & Chr(13) & "Veuillez trouver ci-desous la liste des factures non encore validées dans ARIBA:" & Chr(10) & Chr(13) & "Référence Ariba: " & Range("A" & Ligne) & " - " & "Supplier: " & Range("B" & Ligne) & " - " & "Requester: " & Range("C" & Ligne) & " - " & "Approbateur: " & Range("D" & Ligne) & " - " & "Date d'affectation: " & Range("E" & Ligne) & " - " & "Délai de retard: " & Range("G" & Ligne) & " Jours" & Chr(10) & Chr(13) & "Merci de bien vouloir valider dans ARIBA les factures en attentes de validation." & Chr(10) & Chr(13) & "Bonne Journée." & Chr(10) & Chr(13) & "Cordialement," & Chr(10) & Chr(13) & "Service Comptabilité" '.CC = "CDFR.RIRE@AYO.COM" .Display End With Next Ligne MsgBox "votre mail à été envoyé.", vbInformation + vbOKOnly, "CONFIRMATION ENVOI MAIL" Sheets("Commande Macro").Select Range("A1").Select Application.ScreenUpdating = True End Sub
Néanmoins, j'ai deux problématiques:
1er Problématique: Lorsque la colonne "J" correspondant au destinataire est VIDE, il me génère une erreur d’exécution avec le message suivant: "le destinataire n'est pas renseigné. assurez vous qu'une valeur soit renseigné".
Normale, puisque la cellule "J5" est vide!
L'objectif ici serait de créer une condition du style: si cellule vide alors passé à la cellule suivante.
2e Problématique: le code n'est pas parfait car il m'envoi un mail pour chaque ligne. C'est à dire pour un même destinataire j'aurai autant de mail envoyé que de lignes. Pas cool pour le destinataire!
L'objectif ici, serait une condition qui dirait: si plusieurs fois le même destinataire alors envoyé l'ensemble des lignes sur un même mail.
Bah voila, voici mon dernier travail actualisé.
Si tu peux m'apporté ton aide sur les 2 problèmatiques citées ci-dessus, cela serait TOP.
Encore merci pour ton temps et dispo.
Bonne journée.
José
Saajo
Messages postés
7
Date d'inscription
vendredi 18 janvier 2019
Statut
Membre
Dernière intervention
14 juin 2019
13 juin 2019 à 13:50
13 juin 2019 à 13:50