Export facture en PDF
Bonjour, à vous
Je cherche à Exporter mes factures Excel en PDF en créant un dossier en cliquant sur un bouton Exporter pour éviter de faire les manipulations.
Le nom du fichier exporter se concatène avec les cellules E5 et L1 (num facture + client)
Pouvez me faire part, pourquoi le code ci-dessous ne fonctionne pas !! Le fichier se trouve dans un répertoire "Finance" sur onedrive et normalement je devrais retrouver Finance/factures Pdf.
Merci d'avance
Sub EXPORT_PDF()
Dim Dossier
Dim Chemin As String
Dim ws As Worksheet
Set ws = ActiveSheet
If MsgBox(" Voulez vous exporter la facture en PDF ", vbYesNo + vbQuestion, "Confirmation….. ! ") = vbYes Then
On Error Resume Next
Dossier = Application.InputBox("Insérer nom du dossier", "Création du dossier", "Factures PDF ")
Chemin = ThisWorkbook.Path & " / " & Dossier & " : "
If Dossier = True Then
GetAttr (Chemin) And vbDirectory
Else
MkDir (Chemin)
End If
ws.ExportAsFixedFormat xlTypePDF, Chemin & Range("E5").Value & " _ " & Range("L1").Value, xqualitystandard, True, False, 1, 1, False
End If
End Sub
Windows / Edge 142.0.0.0
45 réponses
Le problème porte sur l’export d’une facture Excel en PDF avec création d’un dossier et nom de fichier calculé à partir des cellules E5 et L1, le tout dans un répertoire Finance sur OneDrive, mais le code actuel échoue. La solution la plus pertinente propose de déclarer Dossier comme chaîne, de construire le chemin avec des backslashes, de tester/créer le dossier via Dir et MkDir, puis d’exporter le PDF en utilisant le chemin complet et le nom fichier provenant de E5 et L1. Cette approche corrige l’erreur où Dossier était traité comme booléen et évite les séparateurs inadaptés dans le chemin. Des éléments évoquent que le stockage sur OneDrive ou Dropbox peut influencer le chemin d’accès et que des vérifications avec ThisWorkbook.Path ou des tests supplémentaires peuvent aider à diagnostiquer le chemin réel.
-
Juste une question avec la fonction ci-dessous est il possible d'attacher un PDF
=LIEN_HYPERTEXTE("mailto:"&L10&"?subject="&W3&"&CC="&E10&"&body="&W5;"MAIL A ENVOYER")
Non, pour 2 raisons
1 : ça n'est pas prévu dans le mailto
2 : ça n'arrangera pas votre souci de messagerie car elle doit être configurée (correctement)
https://fr.wikipedia.org/wiki/Mailto
-
OK. Je comprends bien
J'ai réparé office mais toujours le même problème et non c'est mon ordi perso.
Juste une question avec la fonction ci-dessous est il possible d'attacher un PDF
=LIEN_HYPERTEXTE("mailto:"&L10&"?subject="&W3&"&CC="&E10&"&body="&W5;"MAIL A ENVOYER")
Bizarrement ça fonctionne avec le nouvel outlook
Merci beaucoup pour ta patience
Xavier
-
Hello,
Voici le code qui permet d'envoyer un mail via le serveur SMTP de la connexion active (sans Outlook)
Sub mail() Set Message = CreateObject("cdo.Message") ' configuration de la messagerie With Message.Configuration.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = nom du serveur SMTP de la connexion active (ex : "smtp.free.fr") .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = Numéro du port d'envoi (465 généralement en SSL/TLS) .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = nom du compte utilisateur de la BàL utilisé pour l'envoi (ex : si "***@***", utiliser "toto") .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mot de passe du compte utilisateur de la BàL utilisé pour l'envoi (ex : "password") .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 .Update End With ' configuration du message With Message .Subject = "CSD Tennis de Table – Facture" .From = "Mon adresse ***@***" .To = Sheets("Modele Facture").Range("L10").Value '‘.CC = « ***@*** » .TextBody = "Veuillez trouver ci joint la facture relative à vos engagements. Cordialement" .AddAttachment ("chemin complet et nom du fichier") .Send End With Set Message = Nothing MsgBox "Message envoyé... ou pas :-D" End Sub -
Bonjour,
Sur mon ordi perso, je ferais une réparation d'Office. Maintenant, tu dois être dans un environnement d'entreprise; tu devrais donc voir avec le responsable informatique. De toutes façons, je ne pense pas que la macro puisse fonctionner avec Exchange. Je n'utilise pas Exchange donc je ne peux pas de fournir une solution. Je vais donc arrêter là ma participation au fil.
Daniel
-
-
-
Exécute aussi cette macro qui doit afficher le numéro et le libellé de l'erreur.
Sub Mail() Dim NS As Object, GaddressList, Expediteur As String, Exp As Object Dim M As Object, olApp As Object, oAccount As Object Expediteur = "XXXX@XXXX.com" Set olApp = CreateObject("Outlook.application") On Error Resume Next For Each oAccount In olApp.Session.Accounts MsgBox Err.Number & " " & Err.Description Exit Sub Debug.Print oAccount.smtpaddress If oAccount.smtpaddress = Expediteur Then Set M = olApp.CreateItem(olMailItem) With M .Subject = "CSD Tennis de Table – Facture" .Body = "Merci de recevoir votre facture relative à vos engagements. Cordialement" .Recipients.Add Sheets("Modele Facture ").Range("L10").Value Set .sendusingaccount = oAccount .attachments.Add "c:\XXXXXX.pdf" .Send End With Exit For End If Next End SubDaniel
-
-
-
Normalement, on doit pouvoir utiliser les deux. Moi, j'ai testé avec Classic. New me sort par les yeux, mais c'est uniquement un différence d'interface utilisateur. Donc aucune différence pour les macros.
Daniel
-
on est bien d'accord que je dois utiliser le classic et non le nouvel outlook ??
-
Tu ne vois rien d'anormal concernant ton abonnement à Microsoft 365 ? Sinon, Ouvre le classeur dans Excel. Appuie sur les touches Alt+F11. La fenêtre de l'éditeur VB s'ouvre. Clique dans la macro Mail.Appuie sur F8 pour exécuter la macro ligne par ligne. Recommence jusqu'à arriver à une erreur ou à la fin de la macro. Est-ce qu'il y a une erreur ?
Daniel
-
oui. mais après je ne sais pas où aller et voir quoi
-
Non, j'ai testé avec Outlook 365 classic sans erreur. Est-ce que tu t'es connecté à ton compte Microsoft comme ils te le disent ?
Daniel
-
le message se produit après la macros d excel.
faut il desinstaller outlook de microsoft 365.
c'est le classic qui va pas
-
j'ai les 2.
Outlook classicisme et outlook de microsoft 365
-
-
Bonjour Daniel,
Désolé de répondre tardivement !!
j'ai un problème de configuration avec Outlook. Donc je ne peux pas dire si c'est OK
-
Teste le code ci-dessous. Il faut modifier la 4e ligne pour indiquer l'adresse du compte expéditeur :
Expediteur = "XXXX@XXXX.com"
Sub Mail() Dim NS As Object, GaddressList, Expediteur As String, Exp As Object Dim M As Object, olApp As Object, oAccount As Object Expediteur = "XXXX@XXXX.com" Set olApp = CreateObject("Outlook.application") For Each oAccount In olApp.Session.Accounts Debug.Print oAccount.smtpaddress If oAccount.smtpaddress = Expediteur Then Set M = olApp.CreateItem(olMailItem) With M .Subject = "CSD Tennis de Table – Facture" .Body = "Merci de recevoir votre facture relative à vos engagements. Cordialement" .Recipients.Add Sheets("Modele Facture ").Range("L10").Value Set .sendusingaccount = oAccount .attachments.Add "c:\XXXXXX.pdf" .Send End With Exit For End If Next End SubDaniel
-
Bonsoir Daniel
Compte Outlook créer et envoyé en MP
Bonne soirée
xavier
- 1
- 2
- 3






