Microsoft 365 XLS en PDF

pompaero

XLDnaute Impliqué
Bonjour le forum,

Meilleurs vœux 2020 à tous.

J'ai une petite question, est il possible à partir d'un classeur excel d'enregistrer une feuille d'un autre classeur excel fermé ?
Je sais faire avec une feuille active.
Merci

Cdlt
pompaero
 

Dudu2

XLDnaute Barbatruc
Bonjour,

Excuse-moi mais ta question n'a aucun sens, c'est pour ça qu'à part la mienne, il n'y a aucune réponse.
- "enregistrer un feuille": une feuille ne s'enregistre pas. En Excel on enregistre un classeur.
- "d'un autre classeur fermé": on ne peut pas enregistrer un classeur fermé ! Quand bien même ce serait possible en Excel Quantique que ça ne servirait à rien puisqu'il n'a évidemment subi aucune modification car non observé.

Si la question est: Est-il possible à partir d'un classeur qui contient une macro dont c'est la rôle d'exporter sous forme de fichier .pdf une feuille existante et déterminée (par son nom ou par son n°) d'un classeur existant et déterminé (par son nom) ? Alors la réponse est oui !
Reste plus qu'à faire la Macro !
Si ce n'est pas la question, je n'ai aucune réponse :)

Cordialement,
D.
 

pompaero

XLDnaute Impliqué
Bonjour Dudu2

Merci de la remarque, j'ai du mal m'exprimer, désolé.
A en lire tes explications cela ressemble fortement à ma question.
Effectivement, à partir d'un classeur (classeur 1) qui contient une macro (déjà en place pour exporter en fichier pdf) une feuille bien précis, j'aimerai dans cette macro ajouter un complément de manière à exporter d'un autre classeur (classeur 2) fermé, une feuille en pdf.
Le classeur 2 est renseigné au minimum 2 fois par jour.
Le classeur 1 est renseigné tout au long de la journée.
En fin de journée le classeur 1 est cloturé avec un export en pdf dans un fichier précis. Lors de cette cloture j'aimerai que le classeur 2 (feuille 1) soit exportée automatiquement dans un fichier bien précis.
Biensur si cela est possible.

Cdlt
pompaeo
 

Dudu2

XLDnaute Barbatruc
Bonjour,
En effet s'il ne s'agit que d'un seul "classeur 2" une fois pas jour, il n'y a pas tellement d'intérêt à faire un programme.
La question se poserait si c'était une opération répétitive et/ou fréquente sur différents classeurs.

Le nom de ce "classeur 2" est-il fixe ou mentionné dans une cellule du "classeur 1" ?
Le répertoire de ce "classeur 2" est-il le même que celui du "classeur 1" ? Sinon ce répertoire est-il fixe ou mentionné dans une cellule du "classeur 1" ?
L'opération doit-elle être automatique à chaque fermeture du "classeur 1" ou bien est-elle déclenchée par un bouton ?
 

pompaero

XLDnaute Impliqué
Bonjour,
Effectivement normalement le classeur 2 doit-être ouvert 2 fois par jour minimum (1/matin et 1/aprM) pour le renseigner (classeur joint "Inspection aire de mouvement"). J'ai commencé à créer la macro pour exporter manuellement en pdf.
Le classeur 1, quand à lui est ouvert toute la journée, c'est une main courante (joint en exemple " Main Courante électronique V0") sur lequel se trouve un bouton Clôturer en haut à droit qui sert en fin de journée à exporter cette main courante en pdf et remettre tout vide pour le lendemain.
C'est à ce moment de clôture (classeur 1) que j'aimerai exporter en pdf automatiquement, le classeur 2 (Inspection aire de mouvement) si sa cellule C4 n'est pas vide.
Je joins les modèles des classeurs.
Classeur 1 (main courante) est un exemple très proche de mon original mais la macro exporter en pdf est identique.
Classeur 2 (Inspection aire d mouvement) est mon projet à mettre en place prochainement, à terminer.
Peut-être que je vois trop compliquer.
Merci à toi pour ta patience.
Cdlt
pompaero
 

Pièces jointes

  • Main Courante électronique V0.xlsm
    171 KB · Affichages: 16
  • Inspection aire de mouvement.xlsm
    187.6 KB · Affichages: 12

Dudu2

XLDnaute Barbatruc
Le fichier PDF créé suite à l'export du classeur 2 (Inspection aire de mouvement), doit-il être conservé (=> nom avec date&heure) ou peut-il être écrasé à chaque génération (=> nom simple) ?

Ce fichier PDF, doit-il être créé dans le répertoire du classeur 2 (Inspection aire de mouvement) ? Ou bien un répertoire dédié ?
 

Dudu2

XLDnaute Barbatruc
Voici une fonction qui ne comporte aucune difficulté et qui exporte une feuille d'un classeur en PDF.
Le fichier PDF est généré dans le répertoire du classeur et prend le nom de la feuille.
Selon la constante FormatTimeStamp, le nom du fichier contiendra aussi (ou pas) la date et l'heure-minutes.
Je te laisse l'intégrer dans ta Macro fin_service activée avec le bouton Clôturer la journée.
Si quelque chose ne convient pas, avise et je ferai la correction.
VB:
'--------------------------------------------------------------------
'Créer le fichier PDF correspondant à la feuille du classeur demandé.
'- WBFullPath: Chemin complet du classeur (y compris lettre du Drive)
'- NuméroFeuille: n° de la feuille concernée
'- Return: Chemin complet du fichier PDF créé
'
'Exemple d'appel:
'   Dim FullPathFichierPDF as string
'   'Exporte en PDF la 1ère feuille du classeur
'   FullPathFichierPDF = ExporterFeuilleEnPDF("H:\Téléchargements\Inspection aire de mouvement.xlsm")
'   MsgBox "Fichier PDF <" & FullPathFichierPDF & "> créé !"
'--------------------------------------------------------------------
Public Function ExporterFeuilleEnPDF(WBFullPath As String, Optional NuméroFeuille As Integer = 1) As String
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim PDFFullPath As String
    Const FormatTimeStamp As String = "yyyy-mm-dd-hh\hnn" 'Mettre à chaine vide si le nom du fichier ne doit pas contenir Date & Heure

    'Inhibe l'affichage
    Application.ScreenUpdating = False
   
    'Gestion erreur ON
    On Error GoTo Erreur
   
    'Ouvre le classeur
    Set WB = Workbooks.Open(WBFullPath)
   
    'Sélectionne la feuille demandée
    Set WS = WB.Worksheets(NuméroFeuille)
    WS.Select

    'Time Stamp
    If Len(FormatTimeStamp) > 0 Then
        PDFFullPath = "-" & Format(Now, FormatTimeStamp)
    Else
        PDFFullPath = ""
    End If
   
    'Nom du fichier PDF
    PDFFullPath = WB.Path & "\" & ActiveSheet.Name & PDFFullPath & ".pdf"
   
    'Suppression si existe
    If Len(Dir(PDFFullPath)) > 0 Then Kill PDFFullPath
   
    'Export de la feuille en PDF
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFullPath, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
       
    'Ferme le classeur
    WB.Close savechanges:=False
    GoTo FinSub
   
Erreur:
    MsgBox "Erreur #" & Err.Number & " " & Err.Description & vbCrLf & "Source: " & Err.Source
    PDFFullPath = ""

FinSub:
    On Error GoTo 0
    'Désinhibe l'affichage
    Application.ScreenUpdating = True
    'Return value
    ExporterFeuilleEnPDF = PDFFullPath
End Function
 
Dernière édition:

pompaero

XLDnaute Impliqué
Re,

Je viens de tester ta macro, j'avoue ne pas comprendre tout, lol
Le principe est bien la, j'aimerai déclencher cette macro seulement si la date est présente dans C4 de aire de mouvement et remettre à vide la fiche (sachant qu'elle n'est pas totalement terminer)
 

Dudu2

XLDnaute Barbatruc
Ok, j'ai adapté à ton besoin, en testant la cellule C4.
A noter que le fichier PDF porte un nom fixe et sera donc écrasé à chaque fois par la nouvelle exportation PDF.

Tu devras appeler la fonction de cette manière:
VB:
    Dim Retour as string  
    Retour = ExporterFeuilleEnPDF("H:\Téléchargements\Inspection aire de mouvement.xlsm", _
                                  "C:\Users\F Leroy\Desktop\Documents enregistrés\FicAireMvt.pdf")
    MsgBox Retour

La fonction:
VB:
-------------------------------------------------------------------------
'Créer le fichier PDF correspondant à la feuille du classeur demandé.
'- WBFullPath: Chemin complet du classeur (y compris lettre du Drive)
'- PDFFullPath: Chemin complet du fichier PDF à créer
'- Return: Résultat de la fonction:
'          - "Fichier créé"
'          - "Cellule date vide"
'          - "Erreur..."
'
'Exemple d'appel:
'   Dim Retour as string
'   Retour = ExporterFeuilleEnPDF("H:\Téléchargements\Inspection aire de mouvement.xlsm", "C:\Documents\Monfichier.pdf")
'   MsgBox Retour
'-------------------------------------------------------------------------
Public Function ExporterFeuilleEnPDF(WBFullPath As String, _
                                     PDFFullPath As String) As String
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim Retour As String
    Const CelluleDate = "C4"

    'Inhibe l'affichage
    Application.ScreenUpdating = False

    'Gestion erreur ON
    On Error GoTo Erreur

    'Ouvre le classeur
    Set WB = Workbooks.Open(WBFullPath)

    'Sélectionne la feuille demandée
    Set WS = WB.Worksheets(1)
    WS.Select

    'Exporter en PDF si la cellule date est valoriése
    If Not IsEmpty(WS.Range(CelluleDate)) Then

        'Suppression si existe
        If Len(Dir(PDFFullPath)) > 0 Then Kill PDFFullPath
   
        'Export de la feuille en PDF
        WS.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFullPath, _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
   
        'Valeur de retour
        Retour = "Fichier créé"
    Else
        'Valeur de retour
        Retour = "Cellule date vide"
    End If
   
    'Ferme le classeur
    WB.Close savechanges:=False
    GoTo FinSub

Erreur:
    'Valeur de retour
    Retour = "Erreur #" & Err.Number & " " & Err.Description & vbCrLf & "Source: " & Err.Source

FinSub:
    On Error GoTo 0
    'Désinhibe l'affichage
    Application.ScreenUpdating = True
    'Valeur de retour
    ExporterFeuilleEnPDF = Retour

End Function
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Quand tu dis:

"déclencher cette macro seulement si la date est présente dans C4 de aire de mouvement"
Ok le PDF n'est pas généré si la date en C4 n'est pas présente.

"et remettre à vide la fiche (sachant qu'elle n'est pas totalement terminer) "
Quelle "fiche" est à remettre à vide ?
Edit: Ok, la fiche c'est la Feuille 1 du classeur Inspection aire de mouvement.xlsm.

Mais là c'est un tout autre traitement que l'impression PDF qui n'a rien à voir. Et qui n'est possible que si personne n'a le fichier ouvert sur son PC.
Il n'y a pas déjà un bouton pour vider la fiche ? Comment font les gens pour une initialiser une fiche ?
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth