Microsoft 365 VBA modifier contenu objet mail / corps de texte selon condition

spike29

XLDnaute Occasionnel
Bonjour,

Je travail sur un fichier qui me permet d'envoyer des mails avec une copie image d'une partie de l'active worksheet.

L'objet et le corps de mail s'incrémente automatiquement suivant la date du jour (contenu en cellule L8).

Ce que j'aimerai faire c'est insérer une condition dans la construction de mon objet et corps de texte.

Si W8 = Nuit alors faire en sorte que l'objet ainsi que le corps de texte mentionne :

" Ci-dessous le rapport + plan du xx/xx/xxxx au xx/xx/xxxx NUIT "


Si W8 = JOUR alors :

" Ci-dessous le rapport + plan du xx/xx/xxxx JOUR "


J'ai essayé de faire une premier test avec ceci

VB:
.Subject = " Rapport +" & " " & "Plan" & " " & Sheets("Rapport").Range("D8").Value & " " & IIf(ThisWorkbook.Worksheets(1).Cells(23, 8).Value = " NUIT", Sheets("Rapport").Range("L8").Value - 1, Sheets("Rapport").Range("L8").Value) & " " & Sheets("Rapport").Range("W8").Value

La méthode Iif mais aucun résultat.

Quelqu'un aurait-il une solution ?

Merci d'avance,


Je joint mon fichier à titre d'exemple.


Merci d'avance
 

Pièces jointes

  • TEST6.xlsm
    24 KB · Affichages: 13

Staple1600

XLDnaute Barbatruc
Re

Juste à titre illustratif concernant le IIF
(et pour aussi éviter les ligne de code à rallonge)
VB:
Sub test_IIF()
Dim r As Range
Set r = ThisWorkbook.Worksheets(1).[H3]
r = "NUIT"
X = IIf(r = "NUIT", "toto", "titi")
MsgBox X
r = "JOUR"
X = IIf(r = "NUIT", "toto", "titi")
MsgBox X
End Sub
 

spike29

XLDnaute Occasionnel
Pas mal l'idée de déclarer une varible, on y voit plus clair de suite.

VB:
Set r = ThisWorkbook.Worksheets(1).[W8]


r = " NUIT"

Texte = Texte & "Bonjour," & vbCrLf
Texte = Texte & vbCrLf
Texte = Texte & "Ci-dessous le Rapport + plan du " & " " & Sheets("Rapport").Range("D8").Value & " " & IIf(r = " NUIT", Sheets("Rapport").Range("L8").Value - 1, Sheets("Rapport").Range("L8").Value) & " " & " au " & " " & Sheets("Rapport").Range("L8").Value & " " & Sheets("Rapport").Range("W8").Value & vbCrLf
Texte = Texte & vbCrLf
Texte = Texte & "Cordialement" & vbCrLf

Je l'ai décliné sur mon code.
Pour la nuit ça marche bien.
J'arrive a avoir dans mon corps de mail :

" Ci-dessous le Rapport + plan du lundi 17/01/2021 au 18/01/2021 NUIT"

par contre quand c'est le jour j'ai la même chose.

Tu me dira normal, vu ce que j'ai écris dans mon code.

Mais je nage complètement pour adapter la solution à mon besoin pour la suite et notamment pour qu"il n'y ai que :

Ci-dessous le Rapport + plan du lundi 17/01/2021 JOUR "

Lorsqu'il y a "JOUR" dans la cellule W8.


Merci d'avance pour le coup de pouce
 

Staple1600

XLDnaute Barbatruc
Re

Coup de pouce en forme de Select Case
En lieu et place du IIF
VB:
Sub test_II()
Randomize 1600
X = Chr(Application.RandBetween(65, 67))
Select Case X
Case "A"
MsgBox "Jour", vbCritical, X
Case "B"
MsgBox "Nuit", vbExclamation, X
Case "C"
MsgBox "Entre chien et loup", vbInformation, X
End Select
End Sub
NB: Toujours uniquement en mode illustratif.
Le test consiste à lancer plusieurs fois la macro de suite pour voir le fonctionnement du Select Case.
 

Staple1600

XLDnaute Barbatruc
Re

Si j'étais ce p'tit gars, je serai en train de tester un truc du genre par exemple ;)
VB:
Sub Test_Cambouis()
Dim r As Range
Set r = Sheets(1).[W8]
x = Application.RandBetween(1, 2) ' ne sert que pour le test
r = Choose(x, "JOUR", "NUIT") ' ne sert que pour le test
Select Case r
Case "JOUR"
Message = "Ci-dessous le rapport + plan du xx/xx/xxxx " & r.Text
Case "NUIT"
Message = " Ci-dessous le rapport + plan du xx/xx/xxxx au xx/xx/xxxx " & r.Text
End Select
MsgBox Message, 64, r.Text
End Sub
 

Discussions similaires

Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
312 096
Messages
2 085 254
Membres
102 839
dernier inscrit
Tougtoug