Export pdf

Bonjour à tous,

Je reviens avec un nouveau défi , j'ai regardé mais vraiment VBA c'est très complexe et pour ce que je souhaite j’ai pas d'autres solutions,

Je suis allé un peu partout sur le forum il y a des sujets approchants mais que je n'arrive pas a adapter, l'enregistreur macro après un filtre m'a décourager

Je joins le fichier test !

Merci d'avance pour votre aide !!!

Cordialement,

9test.xlsm (24.71 Ko)

Bonjour,

à vérifier si les onglets créés conviennent

à tester,

Bonjour I20100,

Merci pour ton retour, cependant le code me créer des feuilles excel et non un enregistrement PDF ?,

De plus, à l'ouverture du fichier que tu m'as renvoyé, il manque les onglets Rappro U 02 2020 et Rappro E 02 2020 que je souhaiterais également enregistrés en PDF,

Merci pour ton aide,

Cordialement,

Bonjour massari59264, Isabelle et le Forum,

une proposition à tester, à vérifier le chemin et les espaces dans les nom des onglets:

Sub test()

    Dim arr() As Variant
    Dim i As Integer
    Dim Chemin As String, Fichier1 As String, Fichier2 As String, Fichier3 As String
    Dim Wks1 As Worksheet, Wks2 As Worksheet, Wks3 As Worksheet

    Chemin = "T:\SEBASTIEN\"                      '<<===== à adapter

    Set Wks1 = ThisWorkbook.Sheets("VENTES 02 2020")
    Set Wks2 = ThisWorkbook.Sheets("RAPPRO U 02 2020")
    Set Wks3 = ThisWorkbook.Sheets("RAPPRO E 02 2020")

    Fichier2 = Chemin & Wks2.Name & ".PDF"
    Fichier3 = Chemin & Wks3.Name & ".PDF"

    Application.ScreenUpdating = False

    arr = Array("F", "Manque X", "Manque Y", "Décomposer Type")

    For i = LBound(arr) To UBound(arr)

        If arr(i) = "F" Then
            Fichier1 = Chemin & Wks1.Name & ".PDF"
        Else
            Fichier1 = Chemin & arr(i) & ".PDF"
        End If

        Wks1.ListObjects("VENTES").Range.AutoFilter Field:=11, Criteria1:=arr(i)

        Wks1.ExportAsFixedFormat _
                                 Type:=xlTypePDF, _
                                 Filename:=Fichier1, _
                                 Quality:=xlQualityStandard, _
                                 IncludeDocProperties:=True, _
                                 IgnorePrintAreas:=False, _
                                 OpenAfterPublish:=False

        Wks1.ListObjects("VENTES").Range.AutoFilter Field:=11

    Next i

    Wks2.ExportAsFixedFormat _
                             Type:=xlTypePDF, _
                             Filename:=Fichier2, _
                             Quality:=xlQualityStandard, _
                             IncludeDocProperties:=True, _
                             IgnorePrintAreas:=False, _
                             OpenAfterPublish:=False

    Wks3.ExportAsFixedFormat _
                             Type:=xlTypePDF, _
                             Filename:=Fichier3, _
                             Quality:=xlQualityStandard, _
                             IncludeDocProperties:=True, _
                             IgnorePrintAreas:=False, _
                             OpenAfterPublish:=False

    Application.ScreenUpdating = True

End Sub

Bonjour Sequoyah ,

Merci pour ton code qui adapté à mon fichier de travail fonctionne trés bien, cependant j'ai trois remarques et si tu pouvais m'aider pour celles -ci :

1ère remarque : peut on remplacer

 
    Set Wks1 = ThisWorkbook.Sheets("VENTES 02 2020")
    Set Wks2 = ThisWorkbook.Sheets("RAPPRO U 02 2020")
    Set Wks3 = ThisWorkbook.Sheets("RAPPRO E 02 2020")
 

en désignant non pas le nom de l’onglet mais le code name de la feuille (sur mon fichier test VENTES 02 2020 correspond au code name Feuil1 etc ...) car celui va varié !

2ème remarque : est il possible que si il n' y a pas de données on importe pas en PDF :

deux exemples :

1-si dans le tableau VENTES il n'y a pas de Manque X dans ce cas on ne crée pas Manque X en PDF

2-si il n'a pas de données dans Rappro U 02 2020 (dans ce cas il n'y aura que le titre et les en têtes), également ne pas crée de PDF

3ème remarque : lors du filtre "F" sur le tableau Vente, peut on lui déterminer comme nom de fichier PDF le nom de l'onglet (ici VENTES O2 2020) celui étant variable !

Sur le fichier joint test il y a le code qui permet de modifier le nom de l'onglet, peut être que ça te sera utile ?,

Il y a une partie de code sur ThisWorkbook et sur la feuil1 !

Merci déjà pour ton aide, ça peut paraitre directif mon retour mais c'est pour bien expliquer mes souhaits,

Merci d'avance,

Cordialement,

2test.xlsm (27.93 Ko)

Bonjour massari59264,

vois si ça te convient:

Sub test3()

    Dim dic As Object, vData As Variant, i As Long, j As Long
    Dim arr As Variant
    Dim Chemin As String, Fichier1 As String, Fichier2 As String, Fichier3 As String
    Dim Wks1 As Worksheet, Wks2 As Worksheet, Wks3 As Worksheet
    Dim DLig As Integer

    Set Wks1 = ThisWorkbook.Sheets(1)
    Set Wks2 = ThisWorkbook.Sheets(2)
    Set Wks3 = ThisWorkbook.Sheets(3)

    DLig = Wks1.Range("K" & Rows.Count).End(xlUp).Row

    Chemin = "T:\SEBASTIEN\"                      '<<===== à adapter

    Fichier2 = Chemin & Wks2.Name & ".PDF"
    Fichier3 = Chemin & Wks3.Name & ".PDF"

    Application.ScreenUpdating = False

    Set dic = CreateObject("Scripting.Dictionary")
    dic.CompareMode = vbTextCompare

    vData = Wks1.Range("K2:K" & DLig)

    For i = LBound(vData) To UBound(vData)
        If vData(i, 1) <> "NF" Then dic(vData(i, 1)) = Empty
    Next i

    arr = dic.keys

    For j = LBound(arr) To UBound(arr)

        If arr(j) = "F" Then
            Fichier1 = Chemin & Wks1.Name & ".PDF"
        Else
            Fichier1 = Chemin & arr(j) & ".PDF"
        End If

        Wks1.ListObjects("VENTES").Range.AutoFilter Field:=11, Criteria1:=arr(j)

        Wks1.ExportAsFixedFormat _
                                 Type:=xlTypePDF, _
                                 Filename:=Fichier1, _
                                 Quality:=xlQualityStandard, _
                                 IncludeDocProperties:=True, _
                                 IgnorePrintAreas:=False, _
                                 OpenAfterPublish:=False

        Wks1.ListObjects("VENTES").Range.AutoFilter Field:=11

    Next j

    If Not IsEmpty(Wks2.Range("A4").Value) Then

        Wks2.ExportAsFixedFormat _
                                 Type:=xlTypePDF, _
                                 Filename:=Fichier2, _
                                 Quality:=xlQualityStandard, _
                                 IncludeDocProperties:=True, _
                                 IgnorePrintAreas:=False, _
                                 OpenAfterPublish:=False

    End If

    Wks3.ExportAsFixedFormat _
                             Type:=xlTypePDF, _
                             Filename:=Fichier3, _
                             Quality:=xlQualityStandard, _
                             IncludeDocProperties:=True, _
                             IgnorePrintAreas:=False, _
                             OpenAfterPublish:=False

    Application.ScreenUpdating = True

End Sub

Bonjour Sequoyah,

Tout d'abord merci pour le code et ton implication, tout fonctionne comme souhaité

J'aurai une dernière demande si c'est possible : le chemin d'enregistrement amène vers un dossier nommé PDF, j'aurais aimé si c'est possible qu'avant le lancement de la procédure tous les PDF existants de ce dossier sont supprimés afin de conserver les nouveaux PDF créer ! Mais sans supprimer le dossier PDF, uniquement son contenu en PDF,

Désolé de ne pas l'avoir précisé auparavant, c'est à l'utilisation que je m’en suis rendu compte que ce serait bien d'avoir cette aoption !

Merci pour tout, seul je n'y serai pas arrivé !

Cordialement,

Bonjour massari59264,

merci pour ton retour, ajoute cette ligne de code:

Kill chemin & "*.pdf"

Attention, cette action est irréversible, les fichiers sont effacés directement sans passer par la corbeille!

Cordialment,

Bonjour Sequoyah,

C'est parfait c'est ce que je souhaitais,

Merci pour tout,

Cordialement,

Bonjour Sequoyah,

J'ai un souci à l'usage c'est qu'il me mets fichier introuvable lorsqu'il n'y a pas de PDF à supprimer (ce qui est le cas au départ)?,

Pourriez vous m'aider?,

Merci d'avance,

Cordialement,

Bonjour Sequoyah,

Aprés quelque recherche, j'ai modifié le code comme ceci est cela fonctionne :

  

On Error Resume Next

Kill Chemin & "*.pdf"           'efface les PDF avant procédure

On Error GoTo 0

En espérant ne pas mettre trompé

Cordialement,

Bonjour massari59264,

même si ça marche, en général il n'est pas recommandé d'utiliser On Error Resume Next, voici une voie alternative:

Sub SupprimePDF()

    Dim Chemin As String, FilePDF As String

    Chemin = "C:\Users\Sequoyah\Desktop\"

    FilePDF = Chemin & "*.pdf"

    If Len(Dir$(FilePDF)) > 0 Then

        Kill FilePDF

    End If

End Sub

Cordialement

Rechercher des sujets similaires à "export pdf"