Microsoft 365 Exporter une ligne excel en pdf

Amay

XLDnaute Nouveau
Bonjour,

J’ai un fichier xls où je collecte des données automatiquement via une application. Chaque ligne correspond à un nom et chaque colonne aux critères correspondants aux noms .
Je souhaiterais exporter chaque ligne donc chaque nom en pdf (récapitulatif pour chaque personne) Je suppose qu’il faut faire un script VBA. Est ce que Quelqu’un a une solution ?
Je vous remercie d’avance
 

kiki29

XLDnaute Barbatruc
Salut, à consulter peut-être : liste contributions PDF
sinon, à adapter à ton contexte
VB:
Option Explicit

Dim sDossier As String

Private Function CreationDossier(ByVal sChemin As String) As Boolean
Dim i As Integer, sTmp As String, Ar() As String
    If InStr(sChemin, ":") = 0 Then
        Ar = Split(CurDir & Application.PathSeparator & sChemin, Application.PathSeparator)
    Else
        Ar = Split(sChemin, Application.PathSeparator)
    End If

    sTmp = Ar(0)
    ChDrive sTmp

    For i = LBound(Ar) + 1 To UBound(Ar)
        If Ar(i) <> "" Then
            sTmp = sTmp & Application.PathSeparator & Ar(i)
            On Error Resume Next
            MkDir sTmp
            On Error GoTo 0
        End If
    Next i

    If Dir$(sChemin, vbDirectory) = vbNullString Then
        CreationDossier = False
    Else
        CreationDossier = True
    End If
End Function

Private Function NomFichierValide(sChaine As String) As Boolean
Dim i As Long
Const sCaracInterdits As String = """*/:<>?[\]|"
    NomFichierValide = True
    If Len(sChaine) = 0 Then
        NomFichierValide = False
        Exit Function
    End If
    For i = 1 To Len(sCaracInterdits)
        If InStr(sChaine, Mid$(sCaracInterdits, i, 1)) > 0 Then
            NomFichierValide = False
            Exit Function
        End If
    Next i
End Function

Sub SavePDFs_03()
Dim sDossierPDFs As String, sFichier As String
Dim i As Long, iNb As Long
Dim Deb As Currency

    Deb = Timer
    Application.StatusBar = ""
    Application.ScreenUpdating = False
    iNb = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
   
    sDossierPDFs = "PDFs Lignes Excel"
    sDossier = ThisWorkbook.Path & Application.PathSeparator & sDossierPDFs
    CreationDossier sDossier
   
    For i = 2 To iNb
        If NomFichierValide(Feuil1.Range("A" & i)) = False Then
            Feuil1.Range("A" & i).Select
            MsgBox "Nom de fichier invalide", vbOKOnly + vbCritical
            Exit Sub
        End If
    Next i

    For i = 2 To iNb
        With Feuil1
            .PageSetup.PrintArea = "$A$" & i & ":$T$" & i
            .PageSetup.BlackAndWhite = True
            sFichier = .Range("A" & i) & ".pdf"
            .ExportAsFixedFormat Type:=xlTypePDF, _
                                 Filename:=sDossier & Application.PathSeparator & sFichier, _
                                 Quality:=xlQualityStandard, _
                                 IncludeDocProperties:=True, _
                                 IgnorePrintAreas:=False, _
                                 OpenAfterPublish:=False
        End With
    Next i

    Application.ScreenUpdating = True
    Application.StatusBar = "Terminé : " & Format(Timer - Deb, "0.000 s")
End Sub
 
Dernière édition:

Amay

XLDnaute Nouveau
Salut, à consulter peut-être : liste contributions PDF
sinon, à adapter à ton contexte
VB:
Option Explicit

Dim sDossier As String

Private Sub CreationDossier()
Dim sChaine As String
    sChaine = Environ("comspec") & " /c mkdir " & sDossier
    Shell sChaine, 0
End Sub

Private Function NomFichierValide(sChaine As String) As Boolean
Dim i As Long
Const sCaracInterdits As String = """*/:<>?[\]|"
    NomFichierValide = True
    If Len(sChaine) = 0 Then
        NomFichierValide = False
        Exit Function
    End If
    For i = 1 To Len(sCaracInterdits)
        If InStr(sChaine, Mid$(sCaracInterdits, i, 1)) > 0 Then
            NomFichierValide = False
            Exit Function
        End If
    Next i
End Function

Sub SavePDFs()
Dim sDossierPDFs As String, sFichier As String
Dim i As Long, iNb As Long
Dim Deb As Currency

    Deb = Timer
    Application.StatusBar = ""
    Application.ScreenUpdating = False
    iNb = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
   
    sDossierPDFs = "PDFs Lignes Excel"
    sDossierPDFs = Replace(sDossierPDFs, " ", "_")
    sDossier = ThisWorkbook.Path & "\" & sDossierPDFs
    CreationDossier
   
    For i = 2 To iNb
        If NomFichierValide(Feuil1.Range("A" & i)) = False Then
            Feuil1.Range("A" & i).Select
            MsgBox "Nom de fichier invalide", vbOKOnly + vbCritical
            Exit Sub
        End If
    Next i

    For i = 2 To iNb
        With Feuil1
            .PageSetup.PrintArea = "$A$" & i & ":$F$" & i
            .PageSetup.BlackAndWhite = True
            sFichier = .Range("A" & i) & ".pdf"
            .ExportAsFixedFormat Type:=xlTypePDF, _
                                 Filename:=sDossier & "\" & sFichier, _
                                 Quality:=xlQualityStandard, _
                                 IncludeDocProperties:=True, _
                                 IgnorePrintAreas:=False, _
                                 OpenAfterPublish:=False
        End With
    Next i

    Application.ScreenUpdating = True
    Application.StatusBar = "Terminé : " & Format(Timer - Deb, "0.000 s")
End Sub
Bonjour,
je te remercie de prendre du temps pour mon problème.
la partie d'exportation échoue quand je lance ton script.
.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=sDossier & "\" & sFichier, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Je n'ai certainement pas fait les adaptations nécessaires... mais je débute en VBA et ton script est déjà trop compliqué pour moi... si tu peux m'éclairer sur ce que je dois adapter... je te remercie beaucoup
 

Amay

XLDnaute Nouveau
Re, j'obtiens ceci, la version à été modifiée, inutile de fonctionner par psittacisme et donc de coller dans ta réponse un code devenu caduque.
Bonjour,
Cela ne fonctionne toujours pas... peut être parce que je suis avec excel sur un Mac... je vais essayer sur le PC de mon fils. Merci pour ton retour
 

Pièces jointes

  • Capture d’écran 2022-07-28 à 15.47.18.png
    Capture d’écran 2022-07-28 à 15.47.18.png
    494.9 KB · Affichages: 21

Amay

XLDnaute Nouveau
re, remplacer
VB:
.PageSetup.PrintArea = "$A$" & i & ":$F$" & i
par
Code:
.PageSetup.PrintArea = "$A$" & i & ":$T$" & i
et sans doute la mise en page à ajuster en conséquence

Pour ce qui est du Mac je renvoie tjs au site de RdB
Sur Mac le séparateur est : pas \ , donc voir en remplaçant les \ par Application.PathSeparator
Super comme ça ... Merci merci....
Il y aurait autre chose aussi... J'abuse ... y'a t'il possibilité d'aller à la ligne après certaines colonnes sur le PDF ?
 

Amay

XLDnaute Nouveau
re, remplacer
VB:
.PageSetup.PrintArea = "$A$" & i & ":$F$" & i
par
Code:
.PageSetup.PrintArea = "$A$" & i & ":$T$" & i
et sans doute la mise en page à ajuster en conséquence

Pour ce qui est du Mac je renvoie tjs au site de RdB
Sur Mac le séparateur est : pas \ , donc voir en remplaçant les \ par Application.PathSeparator
Voilà ce qu'il me dit sur l'erreur sur mac
 

Pièces jointes

  • Capture d’écran 2022-07-28 à 16.37.31.png
    Capture d’écran 2022-07-28 à 16.37.31.png
    212.3 KB · Affichages: 23

Discussions similaires

Réponses
3
Affichages
750

Statistiques des forums

Discussions
315 096
Messages
2 116 183
Membres
112 677
dernier inscrit
Justine11