Microsoft 365 Code VBA

Nathan027

XLDnaute Junior
Bonjour

J'ai une erreur dans ce code .. mais je ne comprends pas pourquoi
Pouvez vous m'aider ? J'ai mis en gras, là où le code bug.
Merci :)

cheminFichier = Environ("TEMP") & "\" & "Extrait_" & ThisWorkbook.Name
wbTemp.SaveAs cheminFichier


VB:
Sub EnvoyerMail()
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim cheminFichier As String
    Dim nomFichier As String
    Dim adresseEmail1 As String
    Dim adresseEmail2 As String
    Dim adresseCC As String
    Dim wbTemp As Workbook
    Dim wsTemp As Worksheet
    Dim PlageACopier As Range
    Dim wsSource As Worksheet
 
    ' Enregistre le fichier avant l'envoi
    ThisWorkbook.Save
 
    ' Définit les adresses e-mails des destinataires
    adresseEmail1 = "[EMAIL]bbbbb@gmail.com[/EMAIL]"
    adresseEmail2 = "[EMAIL]jjjjjj@gmail.com[/EMAIL]"
    adresseCC = "[EMAIL]ccccc@ffff.com[/EMAIL]" ' Adresse en copie (CC)
 
    ' Crée une nouvelle feuille de travail temporaire
    Set wsSource = ThisWorkbook.Sheets(1) ' Modifier si besoin pour sélectionner la bonne feuille
    Set PlageACopier = wsSource.Range("A1:I41")
 
    ' Crée un nouveau classeur temporaire
    Set wbTemp = Workbooks.Add
    Set wsTemp = wbTemp.Sheets(1)
 
    ' Copie la plage dans le nouveau classeur
    PlageACopier.Copy
    wsTemp.Range("A1").PasteSpecial Paste:=xlPasteAll ' Colle tout
    wsTemp.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths ' Colle les largeurs de colonnes
 
    ' Ajuste les hauteurs de lignes
    Dim i As Integer
    For i = 1 To PlageACopier.Rows.Count
        wsTemp.Rows(i).RowHeight = wsSource.Rows(i).RowHeight
    Next i
 
    ' Enregistre le classeur temporaire dans un fichier
    cheminFichier = Environ("TEMP") & "\" & "Extrait_" & ThisWorkbook.Name
    wbTemp.SaveAs cheminFichier
 
    ' Crée une instance de l'application Outlook
    Set OutlookApp = CreateObject("Outlook.Application")
 
    ' Crée un nouvel e-mail
    Set OutlookMail = OutlookApp.CreateItem(0)
 
    With OutlookMail
        .To = adresseEmail1 & ";" & adresseEmail2 ' Ajoute les adresses e-mail
        .CC = adresseCC ' Ajoute l'adresse en copie (CC)
        .Subject = "Fichier en pièce jointe"
        .Body = "Veuillez trouver ci-joint le fichier."
        .Attachments.Add cheminFichier ' Ajoute le fichier en pièce jointe
        .Display ' Affiche l'e-mail avant l'envoi (utilisez .Send pour envoyer directement)
    End With
 
    ' Ferme et supprime le fichier temporaire après envoi
    wbTemp.Close SaveChanges:=False
    Kill cheminFichier ' Supprime le fichier temporaire
 
    ' Libère la mémoire
    Set OutlookMail = Nothing
    Set OutlookApp = Nothing
End Sub
 
Dernière modification par un modérateur:

Phil69970

XLDnaute Barbatruc
Bonjour @Nathan027

Voir la charte § 2.2 et 2.3

De plus mettre le code entre balise rend le code plus digeste

1726062666287.png


Bonne lecture
 
Dernière édition:

Nathan027

XLDnaute Junior
Bonjour Nathan, Phil,
Essayez simplement :
VB:
' Enregistre le classeur temporaire dans un fichier
cheminFichier = Environ("TEMP") & "\" & "Extrait_" & ThisWorkbook.Name
ThisWorkbook.SaveAs cheminFichier
Je pense que "Set wbTemp = Workbooks.Add" crée un fichier xlsx et non xlsm.
Effectivement il y avait un soucis avec l'extension :)

Voilà le code corrigé

Sub EnvoyerMail()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim cheminFichier As String
Dim nomFichier As String
Dim adresseEmail1 As String
Dim adresseEmail2 As String
Dim adresseCC As String
Dim wbTemp As Workbook
Dim wsTemp As Worksheet
Dim PlageACopier As Range
Dim wsSource As Worksheet

' Enregistre le fichier avant l'envoi
ThisWorkbook.Save

' Définit les adresses e-mails des destinataires
adresseEmail1 = "aaaa@aaaa.com"
'adresseEmail2 = "bbbb@bbbb.com"
'adresseCC = "ccc@cccc.com" ' Adresse en copie (CC)

' Crée une nouvelle feuille de travail temporaire
Set wsSource = ThisWorkbook.Sheets(1) ' Modifier si besoin pour sélectionner la bonne feuille
Set PlageACopier = wsSource.Range("A1:I41")

' Crée un nouveau classeur temporaire
Set wbTemp = Workbooks.Add
Set wsTemp = wbTemp.Sheets(1)

' Copie la plage dans le nouveau classeur
PlageACopier.Copy
wsTemp.Range("A1").PasteSpecial Paste:=xlPasteAll ' Colle tout
wsTemp.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths ' Colle les largeurs de colonnes

' Ajuste les hauteurs de lignes
Dim i As Integer
For i = 1 To PlageACopier.Rows.Count
wsTemp.Rows(i).RowHeight = wsSource.Rows(i).RowHeight
Next i

' Définit le chemin et le nom du fichier temporaire avec le nom personnalisé
cheminFichier = Environ("TEMP") & "\" & "Nom du fichier joint.xlsx"
wbTemp.SaveAs Filename:=cheminFichier, FileFormat:=xlOpenXMLWorkbook ' Sauvegarde en format .xlsx

' Crée une instance de l'application Outlook
Set OutlookApp = CreateObject("Outlook.Application")

' Crée un nouvel e-mail
Set OutlookMail = OutlookApp.CreateItem(0)

With OutlookMail
.To = adresseEmail1 & ";" & adresseEmail2 ' Ajoute les adresses e-mail
.CC = adresseCC ' Ajoute l'adresse en copie (CC)
.Subject = "Demande de codification"
.Body = "Bonjour" & Chr(13) & "" & Chr(13) & "Veuillez trouver ci-joint une demande de codification" & Chr(13) & "" & Chr(13) & "Cordialement"
.Attachments.Add cheminFichier ' Ajoute le fichier en pièce jointe
.Display ' Affiche l'e-mail avant l'envoi (utilisez .Send pour envoyer directement)
End With

' Ferme et supprime le fichier temporaire après envoi
wbTemp.Close SaveChanges:=False
Kill cheminFichier ' Supprime le fichier temporaire

' Libère la mémoire
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub



Merci à tous pour vos pistes :)
 

TooFatBoy

XLDnaute Barbatruc
' Définit le chemin et le nom du fichier temporaire avec le nom personnalisé
cheminFichier = Environ("TEMP") & "\" & "Nom du fichier joint.xlsx"
wbTemp.SaveAs Filename:=cheminFichier, FileFormat:=xlOpenXMLWorkbook ' Sauvegarde en format .xlsx
ou
VB:
    ' Enregistre le classeur temporaire dans un fichier
    cheminFichier = Environ("TEMP") & "\" & "Extrait_" & ThisWorkbook.Name
    cheminFichier = Left(cheminFichier, Len(cheminFichier) - 1) & "x"
    wbTemp.SaveAs cheminFichier
 

Discussions similaires

Réponses
2
Affichages
219

Statistiques des forums

Discussions
313 902
Messages
2 103 391
Membres
108 631
dernier inscrit
tarek.kanaan