Export PDF et Creation Dossier par Date

Bonjour,

Ayant pas mal fouillé, je n'ai pas trouvé de réponses concrètes à mon problème.

En fait je souhaite qu'au moment de l'export en PDF de ma feuille (Au format D-Numero-Nom-DateDuJour), je puisse aussi classer ce fichier dans le dossier correspondant a sa date. Si le dossier n'existe pas, le créer au format (MMM-YYYY)

J'ai déjà ceci, mais il me créer le dossier, sans classer le PDF dedans

Et du coup, je bloque sur la façon de traiter la Date du fichier PDF, pour le classer dans le bon dossier (Si il existe, sinon le creer)

Sub DEVIS_Pdf()

    Dim LeRep As String
    Dim DEVIS
    Dim LaDate As String
    Dim LeNom As String

    If Sheets("DEVIS").Range("I5") = "" Then
        MsgBox ("Il n'y a pas de numéro de devis !")
    End If

    If MsgBox("Voulez vous enregistrer le devis en PDF ?", vbYesNo) = vbYes Then
        LaDate = Format(Date, "ddmmyyyy")                                           'Date du jour
        DEVIS = Sheets("DEVIS").Range("I5").Value                                   'Numero du devis
        LeRep = Sheets("BASE").Range("B12").Value & UCase(Format(Date, "mmm-yyyy")) 'Repertoire des devis
        LeNom = Sheets("DEVIS").Range("H10").Value                                  'Nom du client

                If Dir(LeRep, vbDirectory) = "" Then
                    MkDir LeRep
                    MsgBox "Le dossier " & LeRep & " a été crée"
                End If

            Sheets("DEVIS").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            LeRep & "D-" & DEVIS & "-" & LeNom & "-" & LaDate & ".pdf", Quality:= _
            xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
            FROM:=1, OpenAfterPublish:=True

        ThisWorkbook.SaveAs Filename:= _
                LeRep & "D-" & DEVIS & "-" & LeNom & "-" & LaDate & ".xlsm" 'Enregistre le classeur en xlsm

        Else
            If MsgBox("Voulez vous enregistrer le fichier Excel ?", vbYesNo) = vbYes Then
               ThisWorkbook.SaveAs Filename:= _
                LeRep & "D-" & DEVIS & "-" & LeNom & "-" & LaDate & ".xlsm" 'Enregistre le classeur en xlsm

        Else
            Exit Sub
            End If
     End If

End Sub

Merci de votre aide

Bonjour, à vue de nez comme ça, il est possible que ça manque d'un "\" entre lerep et D

Bonjour,

Est-il nécessaire de créer un fichier par devis ? Ne devriez-vous pas plutôt avoir une base reprenant toutes les infos de vos devis et une interface d'édition ?

Cordialement,

C'est pour le moment la seule solution que j'ai réussi a développer.

Et cela me permet d'envoyer par mail, de transmettre a l'assistante ainsi qu'a la comptable.

Néanmoins je serais intéressé de connaitre le principe que vous evoquais ?

Et bien j'imaginais une base "SUIVI" avec le suivi chronologique de tous vos devis, comprenant toutes les infos singulières (Date, Numéro, Client, Désignations, Quantités, Prix, Totaux, et autres éventuellement), une base "CLIENT" avec les coordonnées de chaque client, une base "PRODUITS" avec les prix unitaires et autres infos relatives aux produits et un onglet "DEVIS" servant d'interface.

Ainsi, sur le devis, on saisit les infos "variables" (certaines étant reprises automatiquement des bases client et produits), puis on appuie sur un bouton qui :

- édite un PDF,
- imprime en papier,
- remplit la dernière ligne de la base SUIVI,
- et même, le cas échéant, envoie par mail le devis...

Mais ça ferait un peu de boulot de restructuration, c'est sûr...

Bonjour,

Effectivement cela me ferait refaire complètement le fichier, mais c'est une option envisageable pour la version 2

Donc en ajoutant "\", il me classe bien le fichier dans le dossier.

Ce qui est bizarre, car avant ça le faisait bien, sans "\"

Bonjour,

J'ai du mal à croire qu'il ait pu le faire sans que l'antislash ne soit inséré quelque part.

Peut-être l'était-il à l'insu de ton plein gré 😉

Néanmoins, je ne suis pas sur que cette modif fait exactement ce que je souhaite.

A savoir, classer le fichier dans le dossier, en fonction d'une date inscrite dans une case

Comme on n'a aucune idée de ce qui est inscrit dans tes cellules, à un moment ça peut compliquer certaines choses.

Pour moi en tout cas.

En fait la date est dans la cellule "I5", de la feuille "DEVIS".

Donc pour un devis pour le 26/11/2020, je souhaiterais que le fichier se classe dans le dossier "NOV-2020" si il existe, et le créer le cas échéant.

Donc en ajoutant "\", il me classe bien le fichier dans le dossier.

Du coup ? J'ai du mal à suivre là.

Avec le "\", il me classe bien le fichier excel, et le PDF correspondant, dans le dossier, mais indifféremment de la date noté en "I5"

En fait, je peux avoir des devis sur le mois en cours, mais je peu aussi avoir de devis sur des dates plus lointaines, d'ou l'utilité pour moi de pouvoir reprendre la date en "I5" et de classer le fichier excel, et le PDF correspondant dans le dossier du mois correspondant

Mais c'est une date ou un numéro de devis en I5?

Si c'est une date, essaie :

LaDate = Format(range("I5"), "ddmmyyyy")

Dans le cas contraire et comme je commence à en avoir marre de jouer aux devinettes, ce sera ma dernière intervention si pas plus de précisions.

Excuse moi si je ne suis pas assez précis à ton goût !!

Je pensais avoir spécifié cela.

Effectivement en i5, il s'agit de la date de la prestation au format dd/mm/aaaa

Et donc je voudrais utiliser cette date pour classer mon fichier dans le bon dossier au format mmm-aaaa

Effectivement dans mon code en i5 est specicife le. Numéro de devis, mais j'arriverai à modifié cela.

J'ai surtout besoin des lignes de codes pour classer le fichier correctement

as-tu essayé ce que je t'ai proposé à 12h23 ?

Si oui, est-ce que cela fonctionne ?
Peux-tu poster le nouveau code ?

Alors je viens de faire ta modif, et cela a pour résultat d'ajouter la date de la case "H6" (Et non "I5" comme evoqué plus haut) a la fin du nom de mon fichier PDF.

Voici mon code

Sub DEVIS_Pdf()

    Dim LeRep As String
    Dim DEVIS
    Dim LaDate As String
    Dim LeNom As String

    If Sheets("DEVIS").Range("I5") = "" Then
        MsgBox ("Il n'y a pas de numéro de devis !")
    End If

    If MsgBox("Voulez vous enregistrer le devis en PDF ?", vbYesNo) = vbYes Then
        LaDate = Format(Range("H6"), "ddmmyyyy")                                    'Date de l'evenement
        DEVIS = Sheets("DEVIS").Range("I5").Value                                   'Numero du devis
        LeRep = Sheets("BASE").Range("B12").Value & UCase(Format(Date, "mmm-yyyy")) 'Repertoire des devis
        LeNom = Sheets("DEVIS").Range("H10").Value                                  'Nom du client

                If Dir(LeRep, vbDirectory) = "" Then
                    MkDir LeRep
                    MsgBox "Le dossier " & LeRep & " a été crée"
                End If

            Sheets("DEVIS").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            LeRep & "\" & "D-" & DEVIS & "-" & LeNom & "-" & LaDate & ".pdf", Quality:= _
            xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
            FROM:=1, OpenAfterPublish:=True

        ThisWorkbook.SaveAs Filename:= _
                LeRep & "\" & "D-" & DEVIS & "-" & LeNom & "-" & LaDate & ".xlsm" 'Enregistre le classeur en xlsm

        Else
            If MsgBox("Voulez vous enregistrer le fichier Excel ?", vbYesNo) = vbYes Then
               ThisWorkbook.SaveAs Filename:= _
                LeRep & "\" & "D-" & DEVIS & "-" & LeNom & "-" & LaDate & ".xlsm" 'Enregistre le classeur en xlsm

        Else
            Exit Sub
            End If
     End If

End Sub

Tu écris :

LaDate = Format(Range("H6"), "ddmmyyyy")

Donc ça paraît normal que ça prenne H6, non ? Et sinon, ça répond à ce que tu voulais ou pas ?

Alors Ok tu te permet de me dire que t'en as marre de jouer aux devinettes, mais a coté de çà, tu ne comprend rien et tu me prend pour un idiot.

Oui je sais que ce que j’écris en "H6", soit repris dans le nom de mon fichier car j'ai écris aussi

Filename:= LeRep & "\" & "D-" & DEVIS & "-" & LeNom & "-" & LaDate & ".pdf"

LaDate = Format(Date, "ddmmyyyy") est important pour moi, car ça me permet d’éviter les doublons en inscrivant la date du jour dans le nom du dossier.

Donc créer le fichier avec le bon nom, je sais faire comme tu as sans doute pu lire dans mon code.

Ce que je souhaite (pour la troisième fois), c'est pouvoir classer ce fichier devis et tous les autres devis que j'aurais a faire, dans le dossier correspondant a la date noté en H6.

Mais j'ai finalement trouvé la solution.

Bonjour,

Je crois qu'il y a eu une petite incompréhension entre vous deux...

Voici sinon une proposition avec un code plus dynamique pour éventuellement l'utiliser pour les devis et les factures (et autres), avec sous-dossiers au format AAAA-MM pour tri chronologique :

Sub Editer_PDF()

Dim Doss$, sDoss$, LeRep$
Dim Doc$, Ladate$, LeNom$, Chemin$

If Not MsgBox("Voulez vous enregistrer le document en PDF ?", vbYesNo) = vbYes Then Exit sub

with Activesheet
    If .Range("NumDoc") = "" Then MsgBox "Il n'y a pas de numéro de document !": Exit sub
    Doss = Range("DossierParent").Value 'Base[B12] nommée "DossierParent"
    sDoss = Doss & "\" & .Name
    LeRep = sDoss & "\" & Format(.Range("DateDoc").value, "yyyy-mm") 'ou "mmm-yyyy" sinon
'---> Base[B12] est nommée "DossierParent" (sur tout classeur) et contient le dossier parent (ex : "C:\...ADMIN") et le sous-dossier parent est ADMIN\DEVIS (car activesheet est nommée DEVIS)
'---> LeRep = "...\ADMIN\DEVIS\2020-09"
    on error goto Creer
    if getattr(LeRep) and vbDirectory then goto Passer
Creer:
    MkDir LeRep
Passer:
    DEVIS = .Range("NumDoc").Value 'Numero du devis
    LaDate = Format(.Range("DateDoc"), "ddmmyyyy") 'Date de l'evenement
    LeNom = .Range("ClientDoc").Value 'Nom du client
    Chemin = LeRep & "\" & left(.Name, 1) & "-" & Doc & "-" & LeNom & "-" & LaDate
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & ".pdf", IgnorePrintAreas:=False, OpenAfterPublish:=True
end with

'A TERME : PREVOIR UN FICHIER UNIQUE AFIN D'EVITER LES COPIES (ET ENFIN SUPPRIMER CES LIGNES)
If MsgBox("Voulez vous enregistrer le fichier Excel ?", vbYesNo) = vbYes Then
    ThisWorkbook.SaveAs Filename:=Chemin & ".xlsm" 'Enregistre le classeur en xlsm
end if

msgbox "Edition terminée"

End Sub

Ici, les sous-dossiers sont donc nommés comme les onglets visés. Et il faut que les informations utilisées (I5, H6, H10 de ton fichier, nommées resp. "NumDoc", "DateDoc", "ClientDoc" dans ce code) soient nommées avec le même libellé sur chaque feuille (avec une portée sur la feuille en question et pas sur tout le classeur) afin d'optimiser.

Cordialement,

Rechercher des sujets similaires à "export pdf creation dossier date"