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

  • Votes
  • Date
  • Date décroissante
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. Bonjour

    A tester

    Sub EXPORT_PDF()
        Dim Dossier As String
        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")
    
            ' Assurez-vous que le chemin est correct
            Chemin = ThisWorkbook.Path & "\" & Dossier & "\"
    
            ' Vérifiez si le dossier existe, sinon créez-le
            If Dir(Chemin, vbDirectory) = "" Then
                MkDir Chemin
            End If
    
            ' Exporter en PDF
            ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & Range("E5").Value & " _ " & Range("L1").Value & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False
        End If
    End Sub

    Crdlt


    1. Bonjour,

      "ne fonctionne pas"

      Il ne donne pas le résultat escompté, ou il provoque une erreur ? Dans  ce dernier cas, laquelle et sur quelle ligne ?

      Daniel


      1. Le code passe sans erreur pour moi. Peut-être :

        Chemin = ThisWorkbook.Path & " \ " & Dossier & " : \"

        1. Bonjour Daniel

          Le code de JCB40 fonctionne, La facture se créer en PDF dans un répertoire dejà créer. Mais perso, je préfère créer le répertoire avec l'Input box. Du moins c'est ce que je croyais !!

          Sub EXPORT1_PDF()
          
          
          Dim Dossier As String
          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 Dir(Chemin, vbDirectory) = "" Then
          MkDir Chemin
          End If
          ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & Range("E5").Value & " _ " & Range("L1").Value & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False
          End If
          End Sub
          1. Teste comme ça :

            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 & " : \"
                Var = ""
                Var = Dir(Chemin, vbDirectory)
                If Err.Number <> 0 Then
                  Err.Clear
                  MkDir Dossier
                End If
                  ws.ExportAsFixedFormat xlTypePDF, Chemin & Range("E5").Value & " _ " & Range("L1").Value, _
                  xqualitystandard, True, False, 1, 1, False
              End If
            End Sub
            
            

            Daniel


            1. Désolé, le répertoire ne se créé pas ainsi que la facture en Pdf

              1. Après que le fichier PDF est généré, je cherche à envoyer par mail la facture avec le code ci-dessous.

                Je n'arrive pas à attacher ma facture qui vient d'être généré

                sub mail
                
                Dim mail as CDO.Message
                Set Mail = New CDO.Message
                Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpusessl »)=True
                Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpauthenticate »)=1
                Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpserver »)= »smtp.gmail.com »
                Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpserverport »)=25
                Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/sendusing »)=2
                Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/senusername »)= « ***@*** »
                Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/sendpassword »)= « XXXXXXXXXX@ »
                
                Mail.Configuration.fields.Update
                
                With Mail
                .Subject = « CSD Tennis de Table – Facture »
                .From = « ***@*** »
                .To = Sheets (« Modele Facture »).Range (« L10 »).Value
                ‘.CC = « ***@*** »
                . TextBody = « Merci de recevoir votre facture relative à vos engagements. Cordialement » 
                .AddAttachement dossier « 
                
                
                End With
                
                One error resume Next
                
                Mail Send
                
                Set mail = Nothing
                
                End sub
                1. Sers-toi de cette icône pour poster du code en indiquant "basic" :

                  Daniel

              2. Dans la fenêtre de l'éditeur VB, clique sur "Affichage" et "Fenêtre d'exécution"

                Dans cette fenêtre d'exécution, entre :

                ?ThisWorkbook.Path

                Appuie sur Entrée et copie ce qui s'affiche dans ta réponse.

                Daniel


                1. Le fichier se trouve dans Dropbox :

                  C:\Users\user\Dropbox\CSD Finance

                  Il sera partagé avec une autre personne pour une utilisation partagée.

                  Xavier

                  1. Merci de bien vouloir répondre :

                    Dans la fenêtre de l'éditeur VB, clique sur "Affichage" et "Fenêtre d'exécution"

                    Dans cette fenêtre d'exécution, entre :

                    ?ThisWorkbook.Path

                    Appuie sur Entrée et copie ce qui s'affiche dans ta réponse.

                    Daniel

                  2. Pour le partage, je ne suis pas en mesure de tester. Il faudra faire des essais avec et sans partage.

                    Daniel

                2. Le fichier se trouve dans Dropbox :

                  Dans l'éditeur il répond :

                  C:\Users\user\Dropbox\CSD Finance

                  Xavier

                  1. Bonjour et merci,

                    Je m'y mets dans la matinée.

                    Daniel

                  2. Je n'ai pas trop l'habitude de Dropbox, mais ici, il mets "users" avec un "S" au bout :

                    ?ThisWorkbook.Path & "|"


                    C:\Users\dcola\Dropbox|

                    Tu es sûr de ton coup ?

                    Daniel

                3. Le caracctère ":" n'est pas autorisé dans les noms de fichier ou de dossier. Je mets "

                  Factures PDF" provisoirement.

                  Daniel


                  1. J'ai dû ôter les espaces au début et à la fin des noms de dossier qui ne sont pas autorisés non plus. Essaie :

                    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 & "\"
                        Var = Dir(Chemin, vbDirectory)
                        If Var = "" Then
                          On Error GoTo 0
                          ChDir ThisWorkbook.Path
                          
                          MkDir ThisWorkbook.Path & "\" & Dossier
                        End If
                          ws.ExportAsFixedFormat xlTypePDF, Chemin & Range("E5").Value & " _ " & Range("L1").Value, _
                          xqualitystandard, True, False, 1, 1, False
                      End If
                    End Sub
                    

                    Daniel


                    1. Avant que je m'attaque à ton problème de courrier, confirme que tu souhaites envoyer le fichier par mail sans passer par OutLook.

                      Daniel


                      1. Trouvé plusieurs erreurs dans ce code. Proposition :

                        Option Explicit
                        
                        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, xlQualityStandard, True, False, 1, 1, False
                            End If
                        End Sub
                        1. Bonjour à toi  aussi,

                          "Trouvé plusieurs erreurs dans ce code"

                          Il en reste :

                                  If Dossier = True Then
                                      GetAttr (Chemin) And vbDirectory
                          

                          ???

                          Daniel

                        2. @danielc0

                          Exact. Même pas vu que Dossier ne pouvait pas être un booléen. 

                      2. Bonjour Daniel,

                        Impeccable, sa fonctionne très bien.

                        Alors Oui, je souhaite envoyer :mes factures sans Outloock et dans le cas présent se sera avec Gmail. Je regarderai plus tard si je trouve les éléments de paramétrage avec SFR.

                        Juste pour savoir, j'ai a peu près 100 factures à faire par mois et à envoyer. Serait-il possible de faire une boucle des factures 1 à la dernière et les envoyer ensuite par mail.

                        Faut-il t'envoyer le code que j'ai préparé, je n'arrive pas à attacher la facture dans le mail. ??

                        A contrario, se sera 1 par 1 pas de soucis 

                        Merci Cordialement

                        1. Je ne pense pas avoir le temps ce soir. Je verrai demain.

                          Daniel

                      3. J'ai besoin de savoir quel est ton compte mail (par exemple xxxx.GMAIL.COM).

                        Daniel


                        1. Voilà ce que j'ai commencé pour envoyer le mail lié à la facture. 

                          Hic, je n'arrive pas à attacher la facture au mail

                          Dim mail as CDO.Message
                          Set Mail = New CDO.Message
                          Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpusessl »)=True
                          Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpauthenticate »)=1
                          Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpserver »)= »smtp.gmail.com »
                          Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/smtpserverport »)=25
                          Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/sendusing »)=2
                          Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/senusername »)= « ***@*** »
                          Mail.configuration.fields.Item(« http://schemas.microsoft.com/cdo/configuration/sendpassword »)= « XXXXXXXXXXx »
                          Mail.Configuration.fields.Update
                          
                          With Mail
                          .Subject = « CSD Tennis de Table – Facture »
                          .From = « ***@*** »
                          .To = Sheets (« Modele Facture »).Range (« L10 »).Value
                          ‘.CC = « ***@*** »
                          . TextBody = « Merci de recevoir votre facture relative à vos engagements. Cordialement » 
                          .AddAttachement dossier & »facture
                          
                          
                          End With
                          One error resume Next
                          Mail Send
                          Set mail = Nothing
                          End sub
                          
                          • 1
                          • 2
                          • 3