Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Excel VBA

Ceres

XLDnaute Nouveau
Bonjour,
Mon code consiste à envoyer un mail outlook avec une pièce jointe. L'adresse de la pièce jointe me pose problème car elle contient une date qui change tous les mois. Comment joindre please un fichier qui s'appelle "Suivi TTT Août 2022" contenant dans son nom texte et date ? j'essaye de joindre le fichier même si la date change et donc avec * mais j'arrive pas.

Sub EnvoiMail_TEST2()

Dim Fin As Date
Fin = DateSerial(Year(Date), Month(Date), 1) - 1
Dim ListeDest()
Dim ListeDestEnCopie()
Dim i As Long
Dim oMsgApp As Object
Dim oMsg As Object
Dim sListeDest As String
Dim sListeDestEnCopie As String
Dim sFichier
sFichier = "C:\Travaux\Fichier\Suivi TTT" & "*.xlsx"
If sFichier = "" Then
MsgBox "Aucun fichier sélectionné, opération annulée"
Exit Sub
End If
Set oMsgApp = CreateObject("Outlook.Application")
ListeDest() = Range("tblBase[Mail]")
ListeDestEnCopie() = Range("tblBase2[Mail]")
sListeDest = ""
sListeDestEnCopie = ""
For i = LBound(ListeDest(), 1) To UBound(ListeDest(), 1)
sListeDest = sListeDest & ";" & ListeDest(i, 1)
sListeDestEnCopie = sListeDestEnCopie & ";" & ListeDestEnCopie(i, 1)
Next
Set oMsg = oMsgApp.CreateItem(0)

With oMsg
.To = sListeDest
.CC = sListeDestEnCopie
.Attachments.Add sFichier
.Subject = "Suivi TTT " & Fin
.Body = "Bonjour," & Chr(10) & Chr(13) & "Nous vous prions de bien vouloir trouver ci-joint le fichier."
.Display
End With

End Sub
 

Ceres

XLDnaute Nouveau
Bonjour @Ceres

Essaye de remplacer



Par :



Merci de ton retour

@Phil69970
Hello Phil, j'avais essayé ton premier code sans succès mais ton deuxième code je savais pas et je viens de l'essayer sans succès non plus. Si j'enlève la date dans le nom du fichier, le code me prend bien le fichier mais avec la date, il veut pas. J'ai un message Box qui me dit "vérifier le nom d'adresse ou le nom du fichier" mais je ne vois pas de problème avec le nom. Thank you
 

Ceres

XLDnaute Nouveau
Peut être le nom de fichier n'a pas été construit d'après le mois en cours, ou alors sous une forme légèrement différente ?
La date dans le fichier est par exemple Suivi TTT Août 2022. Normalement le code devrait tenir compte du mois et l'année, mais il veut pas ! je peux envoyer le fichier sans date mais avec la date il veut pas le prendre en compte
 

Dranreb

XLDnaute Barbatruc
Mettez en tout cas une instruction qui le vérifie :
VB:
Dim sFichier As String
sFichier = "C:\Travaux\Fichier\Suivi TTT " & WorksheetFunction.Proper( _
   Format(Date, "mmmm yyyy")) & ".xlsx"
If Dir(sFichier) = "" Then MsgBox "Le fichier suivant n'existe pas :" _
   & vbLf & sFichier, vbCritical: Exit Sub
 

Ceres

XLDnaute Nouveau
En mettant ton code pour l'interrogation, le fichier n'existe pas car ça prend le mois en cours, septembre alors que j'ai besoin du mois précédent Août. Il faut que j'ajoute dans le code -1 pour que ça fonctionne je pense, un truc du genre dans mon premier code message Fin = DateSerial(Year(Date), Month(Date), 1) - 1
 

Dranreb

XLDnaute Barbatruc
Qui peut d'ailleurs s'écrire DateSerial(Year(Date), Month(Date), 0)
Oui ben alors prenez votre variable Fin au lieu de Date :
VB:
sFichier = "C:\Travaux\Fichier\Suivi TTT " & WorksheetFunction.Proper( _
   Format(Fin, "mmmm yyyy")) & ".xlsx"
If Dir(sFichier) = "" Then MsgBox "Le fichier suivant n'existe pas :" _
   & vbLf & sFichier, vbCritical: Exit Sub
 

Ceres

XLDnaute Nouveau
Je crois qu'il me faut un code ci-dessous pour prendre le mois-1 mais sans le slash car le code ci-dessous marque uniquement qu'avec le slash dans nom du dossier : par exemple 31/Août/2022. Sauf que dans le nom du dossier on ne peut pas mettre slash dans une date. par exemple, on ne peut pas renommer un fichier comme Suivi TTT Août/2022

Dim Fin As Date
Fin = DateSerial(Year(Date), Month(Date), 1) - 1
 

Dranreb

XLDnaute Barbatruc
Non. Votre variable Fin est déclarée As Date. Alors c'est une date, et est du ressort d'un Format(Fin, "mmmm yyyy") c'est tout. Il n'y a pas de slash ni autre caractère dans une Date: elle est codée comme un nombre de jours depuis le 30/12/1899
Si elle est simplement convertie en String, comme dans une concaténation, elle est présentée par défaut sous le format dd/mm/yyyy
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
661
Réponses
7
Affichages
598
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…