Saisie Excel vers outlook
Bonjour,
Je débute en programmation VBA et je ne sais pas par où commencer pour résoudre mon problème. J'ai essayé de chercher sur le forum, mais les informations que j'ai trouvées sont trop avancées pour mon niveau, et j'ai du mal à comprendre les codes présentés.
En ce moment, je travaille sur un fichier de relances clients. C'est une tâche répétitive où je dois prendre des informations telles que le numéro de facture et le montant de la facture pour chaque client, puis les copier dans le corps d'un e-mail existant. Ensuite, je dois ajouter le nom de l'entreprise à relancer et envoyer l'e-mail.
Ce que je souhaite faire, c'est créer une macro qui, lorsque je sélectionne la plage qui m'intéresse, ouvre Outlook, copie la sélection à un endroit précis et insère le nom de l'entreprise dans l'objet de l'e-mail.
Est-il possible de réaliser cela? Si oui, pourriez vous m'aider à réfléchir à la manière de procéder, quels apprentissages sont nécessaires, ou s'il existe des solutions moins alambiqués ?
Je vous remercie.
Bonjour Letod, et
a tester
Sub EnvoyerRelance()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim rng As Range
Dim NomEntreprise As String
' Assurez-vous d'avoir une plage de données sélectionnée
On Error Resume Next
Set rng = Selection
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Sélectionnez une plage de données à copier dans l'e-mail.", vbExclamation
Exit Sub
End If
' Demandez le nom de l'entreprise à relancer
NomEntreprise = InputBox("Entrez le nom de l'entreprise à relancer :", "Nom de l'entreprise")
' Vérifiez si un nom d'entreprise a été saisi
If NomEntreprise = "" Then
MsgBox "Vous devez entrer le nom de l'entreprise.", vbExclamation
Exit Sub
End If
' Créez une instance d'Outlook
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0) ' 0 représente un nouvel e-mail
' Configurez l'e-mail
With OutlookMail
.Subject = "Relance pour " & NomEntreprise ' Insérez le nom de l'entreprise dans l'objet
.Body = "Numéro de facture : " & rng.Cells(1, 1).Value & vbCrLf & _
"Montant de la facture : " & rng.Cells(1, 2).Value & vbCrLf & _
"Autres informations : " ' Ajoutez d'autres informations ici
' Ajoutez d'autres propriétés de l'e-mail si nécessaire
.Display ' Affiche l'e-mail à l'utilisateur
End With
' Nettoyez
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End SubJ'oubliais
Ajouter des références à la bibliothèque d'objets Outlook dans VBA :
- Ouvre ton projet VBA en appuyant sur "Alt + F11".
- Dans l'éditeur VBA, va dans le menu "Outils" en haut.
- Sélectionne "Références..." dans le menu "Outils". Cela ouvrira une fenêtre de dialogue pour gérer les références.
- Fais défiler la liste des références disponibles jusqu'à ce que tu trouves "Microsoft Outlook xx.x Object Library" (où "xx.x" est la version d'Outlook installée sur ton ordinateur).
- Coche la case à côté de cette référence pour l'activer.
- Clique sur "OK" pour fermer la fenêtre de dialogue des références.
Bonjour Stepaustras,
Merci pour ce bienvenu. Je te remercie également pour ce code que je vais tester dés que je suis chez moi.
Je comprends un peu la structure et le code, mais apparemment je vais encore passer beaucoup de temps avant de savoir comment le créer moi même. Je ne trouve pas encore la logique
Mets ce code dans un module "Alt + F11" insertion et module. Je n'ai pas testé le code je n'ai pas installé Outlook, je me sert de Thunderbird, j'espère que cela fonctionnera.
Ensuite je pensais avec un fichier anonyme, ce serait bien, savoir si tu as un émail ou plusieurs, pour prendre la valeur des cellules sélectionnées a voir selon tes besoins.
Alors oui ca marche comme il se doit!(d'après mes instruction pas tres clairs comme je le constate :D) Merci.
Cependant cela prend juste une ligne sélectionné. Si je souhaite ajouter plusieurs lignes comment je peux proceder?
Je suppose que dupliquer ".Body" ne m'apportera pas grand chose vu que la quantité des lignes est variable selon les clients. Dans python si je ne me trompe pas je peux faire qq chose comme "-1" pour sélectionner le dernier élément "maListe[ -1:]", c'est possible de l'appliquer dans VBA?
re
Sub EnvoyerRelance()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim rng As Range
Dim NomEntreprise As String
Dim Cell As Range
' Assurez-vous d'avoir une plage de données sélectionnée
On Error Resume Next
Set rng = Selection
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Sélectionnez une plage de données à copier dans l'e-mail.", vbExclamation
Exit Sub
End If
' Demandez le nom de l'entreprise à relancer
NomEntreprise = InputBox("Entrez le nom de l'entreprise à relancer :", "Nom de l'entreprise")
' Vérifiez si un nom d'entreprise a été saisi
If NomEntreprise = "" Then
MsgBox "Vous devez entrer le nom de l'entreprise.", vbExclamation
Exit Sub
End If
' Créez une instance d'Outlook
Set OutlookApp = CreateObject("Outlook.Application")
' Parcourez chaque cellule dans la plage sélectionnée
For Each Cell In rng.Cells
Set OutlookMail = OutlookApp.CreateItem(0) ' 0 représente un nouvel e-mail
' Configurez l'e-mail
With OutlookMail
.Subject = "Relance pour " & NomEntreprise
.Body = "Numéro de facture : " & Cell.Offset(0, 0).Value & vbCrLf & _
"Montant de la facture : " & Cell.Offset(0, 1).Value & vbCrLf & _
"Autres informations : " ' Ajoutez d'autres informations ici
' Ajoutez d'autres propriétés de l'e-mail si nécessaire
.Display ' Affiche l'e-mail à l'utilisateur
End With
Next Cell
' Nettoyez
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End SubSalut,
Navré pour le temps de réponse, mercredi c'est les enfants... :D
Alors les modification de la dernière version font que plusieurs onglets s'ouvrent pour chaque chaque cellule sélectionné.
J'ai un peu retravaillé le premier code juste pour la mise en page. Mais je ne trouve la solution pour le souci de la deuxième version.
Il ne serait pas possible de tout simplement insérer les plages Excel sélectionnés dans le mail qui s'ouvre? Ca ne serait pas plus simple? J'ai adapte le texte pour cala.
Ci joint ma modification:
Sub EnvoyerRelance()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim rng As Range
Dim NomEntreprise As String
Dim html As String
Dim insp As Inspector
' Assurez-vous d'avoir une plage de données sélectionnée
On Error Resume Next
Set rng = Selection
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Sélectionnez une plage de données à copier dans l'e-mail.", vbExclamation
Exit Sub
End If
' Demandez le nom de l'entreprise à relancer
NomEntreprise = InputBox("Entrez le nom de l'entreprise à relancer :", "Nom de l'entreprise")
If NomEntreprise = "" Then
MsgBox "Vous devez entrer le nom de l'entreprise.", vbExclamation
NomEntreprise = InputBox("Entrer le nom de l'entreprise à relancer : ", "Nom de l'entreprise")
Exit Sub
End If
' Créez une instance d'Outlook
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
' Générez le corps de l'e-mail en HTML
html = "<p>Bonjour,<br/>" & _
"<b>Vous trouverez ci-dessous l'état des factures en cours à ce jour.</b>" & _
"<br/>Sauf erreur, nous n'avons toujours pas reçu le règlement des factures en rouge ci-dessous." & _
"<br/><br/>" & _
"<b>Numéro de facture :</b> " & rng.Cells(1, 1).Value & "<br/>" & _
"<b>Montant de la facture :</b> " & rng.Cells(12).Value & "</p>"
With OutlookMail
.Subject = "Relance Facture " & UCase(NomEntreprise)
.HTMLBody = html
' Désactiver WordEditor via Inspector
WordEditor = 0
.Subject = "Relance Facture " & UCase(NomEntreprise)
.HTMLBody = html
.Display
.Display
End With
' Nettoyez
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Suboui c'est ce que j'avais dis en prenant la valeur des cellules ce serait mieux et un fichier exemple
Effectivement un exemple sera bien plus simple.
Ci-joint
savoir si tu as un émail ou plusieurs
Je n'ai pas bien compris ce passage. Tu veux dire si je veux envoyer tout dans un seul mail? Oui c'est mon souhait
Alors en cherchant un peu j'ai fait ca, un palliatif
Dim Plage As Range
'exemple plage de cellules que je souhaite envoyer
Set Plage = ThisWorkbook.Sheets("Feuille1").Range("B2:I17")
' copie sous forme d'image
Plage.CopyPicture xlScreen, xlPictureMais cela crée un img, comme le commentaire et son nom indique
Bonjour Letod,
J'ai refait ton code avec des améliorations. J'ai rajouté une colonne "mail" car il n'y en avait pas. Ensuite, j'ai vu en colonne F que tu avais des crédits et des factures. J'ai mis "Débit" pour l'exemple. Je ne sais pas si ceux qui n'ont pas payé, tu les notes comme ça. Du coup, dans le fichier, j'ai mis trois "Débit", ce qui fait qu'il doit envoyer 3 mails. Une fois que tout est bien paramétré, tu cliques sur le bouton et ça prépare le mail.
J'ai pris colonne L pour les montants à toi d'adapter.
Et remplacer tous les noms de ta feuille "Feuil1" par la tienne
Dans le code, tu verras qu'il y a .Display, cela affiche les mails, ou .Send pour les envoyer immédiatement sans les voir. J'espère que cela te conviendra.
Salut Stepaustras,
C'est toujours la même problématique, plusieurs fenêtres s'ouvrent dans Outlook. Et le format ne me convient pas. Cela dit la base que tu m'a fourni m'a permit de comprendre certains concepts et c'est déjà énorme.
Je vais voir un ami qui s'y connait bien en programmation, du moins j'espère vu que c'est son travail
Merci encore d'avoir pris le temps de me répondre et bonne journée
Bonjour Letod, oui comme j'ai dis il y a aura trois mails car trois sont en Débit en colonne F s'il n'y a qu'un Débit tu auras juste un mail. J'ai mis débit pour l'exemple, cela pourrai être autre chose, une date ou un dépassement de date.
J'ai pris en considération de ce que tu as dis dans ton premier post et pour le format (le corps du mail) j'ai repris ton code !
C'est une tâche répétitive
A part la police peu être, sinon je trouve ça bien, il y a tout en 1 clique. J'ai rajouté le € et mis la police Calibri à 12
Après plusieurs semaines à apprendre et à comprendre, je me rends compte du gap qu'il y avait entre ce que j'ai décrit et ce que je souhaitait. Je met les images du userForm et du "fichier de base" et du mail crée. Ce n'est pas encore fonctionnel à tout point, actuellement je me bat avec la focntion filtre qui filtre tres bien en apparence mais quand je clique sur le client filtré puis sur outlook macro plante en me disant utilisation incorrecte de Null. Mais tout le reste est fonctionnel.
Merci encore pour tes réponses. N'ayant pas les connaissances nécessaires et n'arrivant pas à comprendre ce que tu m'a proposé, ca m'a motivé à apprendre. En demandant de l'aide et par moi même.
Bonsoir, avec le fichier c'est mieux.