Exporter une feuille de calcul Excel en PDF via BVA

Résolu
xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -  
xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Pour faciliter la mise à jour d’un site Internet, je cherche à exporter une feuille de calcul (ACTIVE) en PDF via VBA. L’exportation se fait dans un répertoire « TESTS PDF » Je ne sais pas si il faut le chemin complet, cela peut varier en fonction des différents utilisateurs. A savoir que nous utilisons Dropbox pour partager nos fichiers pour que les macros puissent fonctionner.

Noms des feuilles possibles :

Il y a automatiquement 1 feuille active et 2 autres cachées (xlsheethidden)

Match_10eq

Match_8eq

Match_6eq

Zone à Exporter (feuille active seulement) A1 : T61 pour les 3 feuilles

Nommer le Fichier PDF à l’identique que le nom du fichier

La macro s’effectuera à la fermeture du fichier

Merci beaucoup, cordialement


Windows / Edge 126.0.0.0

21 réponses

  • 1
  • 2
Résumé de la discussion

L’objectif est d’exporter en PDF la seule feuille active parmi Match_10eq, Match_8eq ou Match_6eq sur la plage A1:T61, et de nommer le fichier identiquement au nom du classeur lors de la fermeture.
Les solutions proposées consistent à tester quel onglet parmi les trois est actif ou visible, puis à utiliser Range("A1:T61").ExportAsFixedFormat avec Type:=xlTypePDF et IgnorePrintAreas:=False.
Pour le chemin d’enregistrement, les avis divergent entre un chemin absolu pré-défini (par exemple c:\dropbox\tennis de table\PDF) et l’utilisation de ThisWorkbook.Path pour rester portable selon l’utilisateur.
Le nom du fichier est obtenu en retirant l’extension du nom du classeur et en ajoutant .pdf, assurant ainsi une correspondance exacte entre le classeur et le fichier généré.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Essaie :

    Sub ExportPDF()
      Dim Fich As String
      If Worksheets("Match_10eq").Visible Then
        Worksheets("Match_10eq").Activate
      ElseIf Worksheets("Match_8eq").Visible Then
        Worksheets("Match_8eq").Activate
      Else: Worksheets("Match_6eq").Activate
      End If
      Fich = ThisWorkbook.Name
      Fich = Left(Fich, InStrRev(Fich, ".") - 1) & ".pdf"
      Range("A1:T61").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
              "c:\dropbox\tennis de table\PDF\" & Fich, _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End Sub
    

    Daniel


    1
  2. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Essaie :

    Sub ExportPDF()
      Dim Fich As String
      If Worksheets("Match_10eq").Visible Then
        Worksheets("Match_10eq").Activate
      ElseIf Worksheets("Match_8eq").Visible Then
        Worksheets("Match_8eq").Activate
      Else: Worksheets("Match_6eq").Activate
      End If
      Fich = ThisWorkbook.Name
      Fich = Left(Fich, InStrRev(Fich, ".") - 1) & ".pdf"
      Range("A1:T61").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
              ThisWorkbook.Path & "\" & Fich, _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End Sub
    

    Daniel


    1
  3. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Essaie :

    Sub ExportPDF()
      Dim Fich As String
      If Worksheets("Match_10eq").Visible Then
        Worksheets("Match_10eq").Activate
      ElseIf Worksheets("Match_8eq").Visible Then
        Worksheets("Match_8eq").Activate
      Else: Worksheets("Match_6eq").Activate
      End If
      Fich = ThisWorkbook.Name
      Fich = Left(Fich, InStrRev(Fich, ".") - 1) & ".pdf"
      Range("A1:T61").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
              ThisWorkbook.Path & "\" & Fich, _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End Sub
    

    Daniel


    1
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    On a besoin du chemin absolu. Est-ce qu'il y a plusieurs dossiers possibles ? Précise ce que tu veux faire exactement. Exporter 3 plages de cellules dans un seul fichier PDF ? Dans 3 fichiers PDF ? Quel sera le nom du (des) fichier(s) résultant(s) ?

    Daniel


    0
  6. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    Bonjour Daniel,

    L'exportation se fait dans le dossier courant, car selon moi chaque Utilisateur n'a pas le même chemin d'accès.

    J'ai, mentionné qu'il faut exporter Uniquement la feuille active qui peut s'appeler soit match_10eq - Match_8eq - Match_6eq selon le cas (donc je pense qu'il faut vérifier si l'un e des 3 feuilles est active ou non)

    la sélection de la page le range si j'ai bien compris va de A1 à T61 dans tous les cas.

    Le nom attribué du fichiers PDF doit se nommer à l'identique du fichier en cours.

    Xavier si cela peut etre utile (il y a 1 MDP de protection dans le VBA") je t'envoi cela en privé

    https://www.cjoint.com/c/NGelngFJZb2

    0
  7. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Essaie :

    Sub ExportPDF()
      If ActiveSheet.Name = "Match_10eq" Or ActiveSheet.Name = "Match_8eq" Or _
        ActiveSheet.Name = "Match_6eq" Then
        Range("A1:T61").ExportAsFixedFormat Type:=xlTypePDF, Quality:=xlQualityStandard, _
          IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
      Else: MsgBox "nom de la feuille incorrect"
      End If
    End Sub
    

    Daniel


    0
  8. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    J'ai copié le code dans le Thiswoorkbook à la fermeture du fichier

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Un petit message d'erreur : "Nom de la feuille Incorrect" je présume que c'est la Msg Box.

    Mais je ne vois pas le fichier PDF qui devrait se copier dans le même répertoire que le fichier initial.

    Sinon on peut essayer de le copier selon le chemin suivant C:\Users\user\Dropbox\tests pdf

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

    Ce message indique que la feuille active n'est pas l'une des trois feuilles indiquées. Il n'y a donc pas de création de fichier PDF.

    Daniel


    0
  10. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    et portant si voir copie d'écran ci-dessous

    0
  11. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    Je crois que j'ai mis une coche. Mais il faut que la procedure soit imperativement à la fermeture du fichier pour exporter le PDF

    0
  12. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bizarre. renvoie-moi le classeur STP.

    Daniel


    0
  13. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    J'ai collé ton code dans le module 1 puis dans le this woorkbook, j appelle la procedure call ExportPdf

    https://www.cjoint.com/c/NGentMzdCE2

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

    Ca fonctionne ici. Tu as toujours le message d'erreur ? Essaie comme ça, si la feuille n'est pas la bonne, j'ai ajouté un msgbox avec le nom de la feuille aactive.


    0
  15. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    tu transmets le fichier pour voir !

    0
  16. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    J'ai compris ce qu'il se passe.

    En fait la feuille Match_eq10 n'est pas active. Je viens de sélectionner la feuille concernée et fermer le classeur et ça fonctionne (pas dans le bon dossier mais c'est pas grave).

    En revanche, si je me positionne sur une autre feuille et que je ferme le classeur alors ça ne fonctionne pas. Donc pour moi il ne faut pas utiliser Active.sheet ou alors il faut l'activer avant de fermer.

    Mais je ne suis pas expert la dedans

    0
  17. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    "En revanche, si je me positionne sur une autre feuille et que je ferme le classeur alors ça ne fonctionne pas"

    Eh, non, puisqu'il faut exporter une des 3 feuilles qui doit être la feuille active ! Sinon, comment savoir quelle feuille exporter ?

    Daniel


    0
  18. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Peut-être la feuille non masquée ?

    Daniel


    0
  19. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     
    Sub ExportPDF()
     
        If Worksheets("Match_10eq").Visible Then
            Worksheets("Match_10eq").Activate
        ElseIf Worksheets("Match_8eq").Visible Then
            Worksheets("Match_8eq").Activate
        Else
            Worksheets("Match_6eq").Activate
        End If
     
        Range("A1:T61").ExportAsFixedFormat Type:=xlTypePDF, Quality:=xlQualityStandard, _
          IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End Sub
    

    Le code ci-dessus fonctionne bien. Il me reste à trouver de copier le PDF selon le chemin c:\dropbox\tennis de table\PDF

    0
  20. xav62000 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   18
     

    Bonsoir Daniel, 

    C'est bien ce que je pensais, j'ai fais un test avec un autre utilisateur des fichiers partagés et ça bugg car le chemin d'accès est différent. 

    Je pense que le plus simple, bien qu'il ne me plait pas serait que le fichier PDF s'enregistre dans le même dossier que le fichier excel.

    Est ce possible ??

    Merci

    0
  • 1
  • 2