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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. 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

    0
    1. 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

      0
      1. "J'ai réparé office mais toujours le même problème  et non c'est mon ordi perso"

        Est-ce que tu passes par Exchange avec ton ordi perso ?

        "Bizarrement ça fonctionne avec le nouvel outlook"

        Qu'est-ce qui fonctionne ? Ma macro ou le code de Nain_Porte_Quoi ?

        Daniel

        0
    2. 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
      
      0
      1. 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


        0
        1. Quand je lance Outlook classique tout seul il me donne le message suivant :

          0
          1. Bonjour Daniel,

            Désolé, de repondre tardivement 

            Voilà pour les variables locales j'ai strictement rien

            Et Pour l'execution de la macro pas de numéro ni de libellé d'erreur

            0
            1. 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 Sub
              

              Daniel


              0
              1. Une fois que tu es là, clique sur le menu "Affichage" et "Fenêtre variables locales". Dan cette fen^tre, clique sur le "+" en regard de olApp pour déplier les propriétés. Déplie "Session" et "Accounts". En dessous de "Accounts", quel nombre y a-t-il en face de "Count" ?

                Daniel


                0
                1. voilà ce que ça fait 

                  2°) Je rentre le mot de passe

                  3°)

                  Est dans mon compte d'abonnement je ne sais pas quoi faire ce n'est pas moi qui gère, trop compliqué pour moi.

                  Quand je lance outloock classic sans passer par le fichier Excel c'est pareil.

                  Idem quand jutilise l'adresse mail du lien Hypertexte

                  0
                  1. 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


                    0
                    1. on est bien d'accord que je dois utiliser le classic et non le nouvel outlook ??

                      0
                      1. 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


                        0
                        1. oui. mais après je ne sais pas où aller et voir quoi

                          0
                          1. 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


                            0
                            1. le message se produit après la macros d excel.

                              faut il desinstaller outlook de microsoft 365.

                              c'est le classic qui va pas

                              0
                              1. j'ai les 2.

                                Outlook classicisme et outlook de microsoft 365

                                0
                                1. Et le message se produit quand ?

                                  Daniel

                                  0
                              2. Voilà le message d'erreur. 

                                Et dans mon compte, je ne vois pas de problème

                                0
                                1. Bonjour,

                                  Tu utilises Outlook.com ou l'appli de bureau Outlook. Les macros ne fonctionnent qu'avec cette dernière.

                                  Daniel

                                  0
                              3. 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

                                0
                                1. 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 Sub
                                  

                                  Daniel 


                                  0
                                  1. Bonsoir Daniel

                                    Compte Outlook créer et envoyé en MP

                                    Bonne soirée

                                    xavier

                                    0
                                    • 1
                                    • 2
                                    • 3