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


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

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

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


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

              0
              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
                0
                1. Sers-toi de cette icône pour poster du code en indiquant "basic" :

                  Daniel

                  0
              2. Est-ce que le classeur est sur OneDrive ?

                Daniel


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


                  0
                  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

                    0
                    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

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

                      Daniel

                      0
                  2. Le fichier se trouve dans Dropbox :

                    Dans l'éditeur il répond :

                    C:\Users\user\Dropbox\CSD Finance

                    Xavier

                    0
                    1. Bonjour et merci,

                      Je m'y mets dans la matinée.

                      Daniel

                      0
                    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

                      0
                  3. oui, bien entendu.

                    Je ferai plusieurs essais

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

                      Factures PDF" provisoirement.

                      Daniel


                      0
                      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


                        0
                        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


                          0
                          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
                            0
                            1. Bonjour à toi  aussi,

                              "Trouvé plusieurs erreurs dans ce code"

                              Il en reste :

                                      If Dossier = True Then
                                          GetAttr (Chemin) And vbDirectory
                              

                              ???

                              Daniel

                              0
                            2. @danielc0

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

                              0
                          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

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

                              Daniel

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

                            Daniel


                            0
                            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
                              
                              0
                              • 1
                              • 2
                              • 3