envoyer un mail depuis excel

Sellig

XLDnaute Junior
Bonjour

J’ai à nouveau besoin de vos services.

J’ai un tableau tout simple avec des dates d’anniversaires.

Lorsqu’un anniversaire tombe à la date du jour mon tableau affiche ‘’Aujourd’hui’’ dans la colonne ‘’S’’

A partir de là, j’ai installé cette macro qui m’envoie un mail sur Outlook. (Macro trouvée en partie sur internet)

Sub mail_outlook_COULEUR()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
For ligne = 3 To 20
If Range("S" & ligne) = "Aujourd'hui" Then
With OutMail 'début de la boucle
.To = "glefort@live.fr"
.Subject = "Anniversaire"
.HTMLBody = "<FONT COLOR=RED> Il y a un anniversaire à souhaiter aujourd'hui </FONT>" & "<br>" & _
.HTMLBody
.Send
'.Display 'affiche le mail avant d'envoyer
End With
End If
Next ligne
Set OutMail = Nothing 'nettoie la mémoire en nettoyant les variables
Set OutApp = Nothing 'nettoie la mémoire en nettoyant les variables

End Sub


Pour que ce tableau s’actualise à chaque ouverture du PC, j’ai un fichier Excel qui est installé dans shell:startup avec cette macro : (Macro trouvée en partie sur internet)

Sub ModifierFichier()
' Partie à modifier
NomFichier = "D:\DOSSIER GILLES\DIVERS\Dates anniversaires"
Feuille = "Feuil1" ' Modifiez la feuille à modifier
Addresse = "A1" ' Modifiez l'Adresse de la cellule à modifier
Valeur = 123 ' Modifiez Valeur à écrire
Application.ScreenUpdating = False ' Fige l'écran
Workbooks.Open NomFichier ' Ouvre le fichier
ActiveWorkbook.Sheets(Feuille).Range(Addresse) = Valeur ' Ecrit la valeur à l'adresse indiquée
'ActiveWorkbook.Close SaveChanges:=True ' Ferme le fichier en enregistrant.
ActiveWorkbook.Save
Application.Quit
End Sub


Jusque-là tout fonctionne correctement, même si ce n’est pas conventionnel à vos yeux. (J’accepte d’ailleurs toutes améliorations)

Mon objectif, consiste à insérer le prénom qui se trouve à gauche de la ligne ‘’Aujourd’hui’’ dans l’objet du mail.

Exemple : Subject = Anniversaire Laure.

J’arrive à sélectionner le nom à l’aide de cette macro mais je n’arrive pas à l’intégrer dans l’objet du mail.

Sub SelectNom()
Dim R As Range
Set R = ActiveSheet.Cells.Find("Aujourd'hui", , xlValues, xlWhole)
If Not R Is Nothing Then R.Select
Selection.Offset(0, -18).Select

End Sub


Si vous pouviez m’aider ce serait formidable.

Merci par avance

Bien cordialement

PS : ce n’est pas très urgent
 

fanch55

XLDnaute Barbatruc
Bonjour,
VB:
Sub mail_outlook_COULEUR()
Dim OutApp As Object
Dim Adr
Dim R As Range
    Set OutApp = CreateObject("Outlook.Application")
        Set R = Columns("S").Find("Aujourd'hui", , xlValues, xlWhole)
        Do While Not R Is Nothing 'début de la boucle
            If Adr = "" Then Adr = R.Address
            With OutApp.CreateItem(0)
                .To = "glefort@live.fr"
                .Subject = "Anniversaire de " & Columns("A").Rows(R.Row)
                .HTMLBody = "<FONT COLOR=RED>" & _
                            "Il y a un anniversaire à souhaiter aujourd'hui" & _
                            "</FONT><br>" & _
                            .HTMLBody
                .display 'affiche le mail avant d'envoyer
            End With
            Set R = Columns("S").FindNext(R)
            If R.Address = Adr Then Set R = Nothing
        Loop
    Set OutApp = Nothing 'nettoie la mémoire en nettoyant les variables
End Sub
 

job75

XLDnaute Barbatruc
Bonsoir à tous,
VB:
Set OutApp = Nothing 'nettoie la mémoire en nettoyant les variables
Je me suis toujours demandé à quoi servent ces remises à zéro en fin de macro sur des variables non Public.

En effet l'instruction End Sub les vide/réinitialise toujours.

J'ai constaté que beaucoup de gens font ça, même ceux qui sont très compétents, et pourtant pour moi c'est totalement inutile. Un tic ou un toc ?

A+
 

Zon

XLDnaute Impliqué
Bonsoir à tous,

Je me suis toujours demandé à quoi servent ces remises à zéro en fin de macro sur des variables non Public.

En effet l'instruction End Sub les vide/réinitialise toujours.

J'ai constaté que beaucoup de gens font ça, même ceux qui sont très compétents, et pourtant pour moi c'est totalement inutile. Un tic ou un toc ?

A+
Salut ,

En VBA sauf erreur de ma part ça sert à que dalle.

C'est une habitude qui doit venir de VB (20 ans que j'en ai pas fait) ou VBScript où là il vaut mieux fermer les instances en mémoire ...

De même on déclare les variables en VBA mais dans l'absolu on pourrait s'en passer aujourd'hui , vu la puissance de nos bouzins.
 

fanch55

XLDnaute Barbatruc
Set OutApp = Nothing 'nettoie la mémoire en nettoyant les variables
@job75 , salut, c'est surement un toc.
Le commentaire était existant dans le code fourni .

Cela vient de l'usage de VB6 avec des machines à faible mémoire: un Objet consomme de la mémoire à la création et à l'utilisation et ne la rend pas forcément surtout si ça se plante avant le End Sub ou Function et souvent dans des cas événementiels ou récursifs. Et on n'est pas trop sûr que Excel gère bien celà .
De plus, on peut faire un Set sur un objet global, le End sub ne servira à rien alors .
Je conserve l'automatisme que j'ai acquis au cas où , cela me permet également de savoir si mon objet est encore utilisé/valide ou non , c'est un peu un genre de structuration ( dérisoire certes ) .
Mais c'est surement un Toc et non un Tic car je ne les mets à Nothing qu'après les différents Tests, honte sur moi . ;)
 

TooFatBoy

XLDnaute Barbatruc
C'est mon cas car contrairement à ce que tu dis c'est très utile pour éviter les erreurs, de frappe surtout.
Si tu prends l'habitude de donner des noms explicites (sans jeu de mot), avec au moins une majuscule, à tes variables, tu verras que l'Option Explicit n'est alors pas utile contre les "erreurs" de frappe.

Pour moi, à part mettre des bâtons dans les roues lors du débuggage, ça ne sert absolument à rien.
Comme quoi, on a chacun sa façon de voir les choses. ;)


Mais on s'éloigne quelque peu du sujet originel de ce fil de discussion...
Bonne soirée
@+
 
C

Compte Supprimé 979

Guest
Bonjour le fil,

Même avis que Job75 ;)
l'utilisation de "Option Explicit" favorise la qualité du code en détectant les erreurs potentielles lors de la compilation, en améliorant la lisibilité et en prévenant les erreurs d'exécution. C'est une bonne pratique recommandée lors de la programmation en VBA.

Mais bon, il y a les puristes pros... et les autres 😜😂
 

fanch55

XLDnaute Barbatruc
Bon, j'étais implicitement en train de dormir ...
L'Option Explicit me sert également afin de contrôler les "finger checks" comme @job75 et m'oblige à déclarer les variables comme attendu .
Il est pour moi très important de savoir de quel type est une variable , cela me donne accès à un tas de propriétés et à trouver parfois pourquoi certaines assignation ne se font pas correctement selon que les déclarations soient Variant ou Range .
Ca aussi c'est un tic/toc que j'ai acquis .
 

TooFatBoy

XLDnaute Barbatruc
L'Option Explicit me sert également afin de contrôler les "finger checks" comme @job75
Comme expliqué plus haut, on peut se passer de cette option pour ça.


et m'oblige à déclarer les variables comme attendu .
C'est bien ça le problème : ça ne sert qu'à te mettre des bâtons dans les roues lors de la phase de développement... 😉


Il est pour moi très important de savoir de quel type est une variable , cela me donne accès à un tas de propriétés et à trouver parfois pourquoi certaines assignation ne se font pas correctement selon que les déclarations soient Variant ou Range .
Sauf que, d'une part cette option te force juste à déclarer tes variables donc tu peux les déclarer en Variant et du coup cette option... ne sert à rien pour ça, et d'autre part tu peux déclarer tes variables et les typer sans utiliser cette option qui du coup... ne sert à rien pour ça. 😉


Ca aussi c'est un tic/toc que j'ai acquis .
Comme mettre une espace avant le point de fin de phrase ? 😉
Je crois qu'on a tous des tocs. En tout cas, si certains n'en ont pas, je leur en donnerai bien volontiers quelques uns des miens ! 😁



Bon, on a chacun ses petites habitudes et sa façon de voir les choses.
Et comme ce n'est qu'une option, chacun est libre de l'utiliser... ou pas. 😅


Tschüss
🖖
 
Dernière édition:
C

Compte Supprimé 979

Guest
Pour remettre un peu d'huile sur le feu 😜

Sans ou avec "Option Explicit",
ne pas déclarer ses variables est une grosse erreur de débutant fainéant 🧐

Certains ont essayé de palier à cela à grand renfort de "On Error Resume Next" 🤢🥴

Mais je n'appelle pas ça du développement, mais du bidouillage 🤭

Il est tout de même dommage de voir que les bonnes pratiques finissent par ce perdre 😥
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Si tu prends l'habitude de donner des noms explicites (sans jeu de mot), avec au moins une majuscule, à tes variables, tu verras que l'Option Explicit n'est alors pas utile contre les "erreurs" de frappe.
Bonjour à tous 🙂,

Je ne vois pas en quoi la majuscule évite les fautes de frappe. Au contraire une déclaration avec majuscule forcera VBE à en mettre une d'office dans la suite du code. On évite au moins d'appuyer sur la touche MAJ.

Ayant programmé en Pascal et ADA (encore plus typé que Pascal), la déclaration me semble naturelle, utile et permet de structurer sa réflexion. Ce n'est que ce que je pense et je partage mon opinion à 100% (c'est la moindre des choses 😝 ).
 

Statistiques des forums

Discussions
313 263
Messages
2 096 652
Membres
106 698
dernier inscrit
heni88