Export facture en PDF

xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   -  
danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   -

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

  • 1
  • 2
  • 3
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. JCB40 Messages postés 3063 Date d'inscription   Statut Membre Dernière intervention   479
     

    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
  2. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

    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
  3. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

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

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

    0
  4. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

    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
  7. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

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

    0
  8. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
       

      Sers-toi de cette icône pour poster du code en indiquant "basic" :

      Daniel

      0
  9. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

    Est-ce que le classeur est sur OneDrive ?

    Daniel


    0
  10. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

    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
  11. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
       

      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. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
       

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

      Daniel

      0
  12. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    Le fichier se trouve dans Dropbox :

    Dans l'éditeur il répond :

    C:\Users\user\Dropbox\CSD Finance

    Xavier

    0
    1. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
       

      Bonjour et merci,

      Je m'y mets dans la matinée.

      Daniel

      0
    2. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
       

      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
  13. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    oui, bien entendu.

    Je ferai plusieurs essais

    0
  14. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

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

    Factures PDF" provisoirement.

    Daniel


    0
  15. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

    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
  16. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

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

    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. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
       

      Bonjour à toi  aussi,

      "Trouvé plusieurs erreurs dans ce code"

      Il en reste :

              If Dossier = True Then
                  GetAttr (Chemin) And vbDirectory
      

      ???

      Daniel

      0
      1. Dormeur74 > danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention  
         

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

        0
  18. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
       

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

      Daniel

      0
  19. danielc0 Messages postés 2206 Date d'inscription   Statut Membre Dernière intervention   291
     

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

    Daniel


    0
  20. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    Envoyer en MP

    xavier

    0
  21. xavier62000 Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   3
     

    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