Exporter en pdf selon arborescence de dossiers

Bonjour à toutes et tous,

Je m’adresse à vous au sujet d’une macro que j’aimerais créer mais je m’y perds clairement…

Pour résumer voici le projet : Générer des ordres de mission rapidement et facilement. Les ordres de mission doivent s’enregistrer en PDF dans le bon dossier (parmi une liste de plusieurs dossier) en fonction d’une cellule.

Vous trouverez ci-joint un document Excel ou je synthétise et explique ou j’en suis à ce jour.

A ce stade je n’arrive pas à faire varier le dossier d’enregistrement, contrôler la présence ou non du bon sous dossier, le créer le cas échéant et enregistrer en pdf dedans.

J’espère que je suis assez explicite et clair dans ma demande et mes explications.

Je me tiens évidement à la disposition de celles et ceux qui auraient des interrogations ou des demandes complémentaires.

Merci à tous par avance !
exemple-1.xlsm (970,4 Ko)

Bonjour

Ci-joint ma proposition

Onglet « Adresse+Chemin pour OM » colonne « C » mets à jour les chemins d’enregistrement
puis
Onglet « Ordre_de_mission » cliques sur le bouton « Enregistrer en PDF »
Constates dans le répertoire d’enregistrement la présence du sous dossier conformément à l’onglet « Contact prestataires » colonne « C » puis dans celui-ci le fichier pdf intégré

Fais des tests et dis moi

exemple-1.xlsm (97,2 Ko)

Bonjour FFO,

Je vous remercie pour votre retour. Je regarde ça en détail dès que possible et vous redis !

Encore merci à vous pour votre aide !

Re FFO,

Après plusieurs tests je trouve que l’état d’avancement est top ! Le document s’enregistre dans le bon dossier et va dans le sous dossiers qu’il faut (le sous dossier est créé dans le cas ou il n’existe pas encore) Tout est ok pour moi à ce niveau.

Je note cependant quelques problèmes :

  • Lorsque j’enregistre deux ordres me mission dans le même dossier et le même sous dossier, le nouveau ordre de mission écrase l’ancien (je ne souhaite pas cela car je peux enregistrer plusieurs ordres de mission identiques avec comme seul différence le nom de l’entreprise mandatée)

  • Le fichier pdf enregistré comporte un 2ème page (je ne parviens pas à identifier ou je dois modifier ça dans le code

  • Le nom du fichier pose également problème (j’ai dû mal formuler ma demande…) : le nom du fichier doit être construit comme suit → Ordre de mission + « nom de l’entreprise=cellule Q13 de l’ordre de mission » + « cellulle BB20= soit D soit T » + « code du site=cellule Q22 de l’ordre de mission » + « date du jour au format aaaammjj »

Exemple résultat recherché : Ordre de mission Entreprise X Tsite 2 20231027
Valeur des cellules pour ce test :
- Q13 = Entreprise X
- BB20 = T
- Q22 = site 2

Résultat obtenu actuellement : Ordre de mission Entreprise 1+T+site 2+202310JJ

Re !

J’ai également identifié une autre anomalie. Dans votre code, à ce niveau :

sousdossier = Sheets("Contact prestataires").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Value
If sousdossier = "" Then

Dans ce passage, le code affecte le nom du sous dossier en fonction du « code site ». Mon objectif est de rattacher le nom du sous dossier en fonction de l’entreprise (colonne G feuille Contact prestataires).
En effet, je peux avoir plusieurs entreprises pour un même code site mais ces entreprises peuvent avoir des catégories différentes.

Je pensais simplement faire cette modif :

sousdossier = Sheets("Contact prestataires").Columns("G:G").Find(What:=Range("Q13"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, -4).Value
If sousdossier = "" Then

Mais ça ne fonctionne pas. J’ai la message box qui s’affiche et mon pdf n’est pas généré…

Etant débutant je galère sacrément…

Je vous remercie par avance pour aide et votre temps… C’est très gentil de votre part !

Merci pour ce retour

" Lorsque j’enregistre deux ordres me mission dans le même dossier et le même sous dossier, le nouveau ordre de mission écrase l’ancien (je ne souhaite pas cela car je peux enregistrer plusieurs ordres de mission identiques avec comme seul différence le nom de l’entreprise mandatée)"

Pas d’autre choix que d’apporter une mention spécifique à chacun de ces enregistrements pour rendre le nom de chaque fichier unique
Peut-être dans les paramètres de l’ordre de mission en ce qui concerne le nom
A toi de voir

" Le fichier pdf enregistré comporte un 2ème page (je ne parviens pas à identifier ou je dois modifier ça dans le code"

Le format de l’Onglet « Ordre_de_mission » doit être en paysage et non en portrait
A verifier

« Résultat obtenu actuellement : Ordre de mission Entreprise 1+T+site 2+202310JJ »
Il faut que je ré-étudie le traitement peut-être une bévue de ma part
Je rentre jeudi de la semaine prochaine, je suis en déplacement
Un peu de patience donc je regarde dés que possible et te dis

« Dans ce passage, le code affecte le nom du sous dossier en fonction du « code site ». Mon objectif est de rattacher le nom du sous dossier en fonction de l’entreprise (colonne G feuille Contact prestataires).
En effet, je peux avoir plusieurs entreprises pour un même code site mais ces entreprises peuvent avoir des catégories différentes. »

Adaptes cette partie :

Offset(0, 2)

Comme ceci

.Offset(0, 6)

Celà doit donner ceci

sousdossier = Sheets("Contact prestataires").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 6).Value
If sousdossier = "" Then

Celà devrait convenir

Fais moi un retour

Bonjour !

Je vous remercie pour ce retour.

Je vais regarder ce que j’arrive à faire avec ces nouveaux éléments car je penses qu’ils vont me permettre de bien avanver !

J’essaye tout ça lundi et vous redis.

Pour ce qui est de vos disponibilités je m’adapte ! C’est déjà très gentil à vous de m’aider !

Merci pour cette réponse
N’hésites pas à me communiquer tes résultats
Dès mon retour je les prendraient en compte dans mes recherches
Au plaisir de te lire

Bonjour,

Je reviens vers vous au sujet de ma problématique.

Après avoir essayé pas mal de chose (à mon niveau) j’ai obtenu ceci :

Sub EnregistrerPDF()
On Error Resume Next
chemin = Sheets("Adresse+Chemin pour OM").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Adresse+Chemin pour OM").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Value
If chemin = "" Then
MsgBox ("le code " & Range("Q22") & " est inexistant onglet Adresse+Chemin pour OM colonne A !!!")
Exit Sub
End If
sousdossier = Sheets("Contact prestataires").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Value
If sousdossier = "" Then
MsgBox ("le code " & Range("Q22") & " est inexistant onglet Contact prestataires colonne A !!!")
Exit Sub
End If
If Dir(chemin & "\" & sousdossier, vbDirectory) = "" Then
MkDir chemin & "\" & sousdossier
End If
If Range("BB21") = 1 Then
typeordre = "D"
Else
typeordre = "T"
End If
jour = Replace(Format(Date, "YYYYMMDD"), "/", "")
nomfichier = "Ordre de mission " & Range("Q13") & " " & jour & "_" & typeordre & Range("Q22")
    ActiveSheet.Columns("A:AR").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
       chemin & "\" & sousdossier & "\" & nomfichier, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End Sub


Malgré vos dernières précisions, je ne parviens pas à rattacher le nom du sous dossier de destination au nom de la « catégorie 1 » de l’entreprise. A ce stade cette catégorie découle du code site (ce qui n’est pas ce que je cherche à faire).

Pour ce qui est du nom du fichier je me suis dépatouillé et ça me convient ainsi ! Seul bémol :
Lorsque j’enregistre un fichier avec un nom déjà utilisé, je voudrais qu’excel me propose le choix entre supprimer l’ancien document ou ajouter un « (1) » , « (2) » , « (3) » etc si le nom du ficher est déjà pris.

En théorie je serai plus souvent amené à écraser l’ancien fichier et ne devrait pas rencontrer ce cas de figure souvent mais j’aimerais intégrer cette fonctionnalité.

Concernant le fait que mon pdf comportait 2 page, je n’ai pas ce soucis avec mon version final. Tout est donc ok à ce niveau.

Un dernier point me vient… en therme de confort visuel, j’aimerais que la feuille « ordre de mission » soit centrée sur mon écran pour éviter de regarder à gauche en permanence… Je ne vois pas comment faire…

Je vous remercie une fois de plus pour votre aide !

Dans l’attente de votre retour.

Bonjour
Merci pour ces différents résultats obtenus suite à tes essais

« Malgré vos dernières précisions, je ne parviens pas à rattacher le nom du sous dossier de destination au nom de la « catégorie 1 » de l’entreprise. A ce stade cette catégorie découle du code site (ce qui n’est pas ce que je cherche à faire). »

Tu n’as pas suivi mes indications concernant l’instruction en rapport :

sousdossier = Sheets("Contact prestataires").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Value

Je t’ai préconisé de mettre ceci :

sousdossier = Sheets("Contact prestataires").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 6).Value

Soit de modifier cette partie :

Offset(0, 2)

Comme ceci

.Offset(0, 6)

Ce n’est pas fait donc ta déconvenue logique

Adaptes la ligne de code et cela devrait le faire

« je voudrais qu’excel me propose le choix entre supprimer l’ancien document ou ajouter un « (1) » , « (2) » , « (3) » etc si le nom du ficher est déjà pris »

A mon retour je regarde et te fais une proposition

« Un dernier point me vient… en therme de confort visuel, j’aimerais que la feuille « ordre de mission » soit centrée sur mon écran pour éviter de regarder à gauche en permanence… Je ne vois pas comment faire… »

Il faut travailler la mise en page
Je regarde dès que possible

Bonjour,

Ne vous pressez pas pour répondre je peux patienter jusqu’à votre retour !

J’ai bien suivi vos préconisations mais j’ai remis le code initial car je ne parviens pas au résultat recherché.

En mettant :
Offset(0, 6)

Le nom du sous dossier créé porte le nom de la société. Or, je cherche à ce que le nom du sous dossier porte le nom de la catégorie 1. (comme c’est le cas lorsque laisse Offset(0, 2))

SAUF QUE : avec cette ligne de code, on recherche la valeur de la cellule Q22 (feuille ordre de mission) dans la colonne A de la feuille contact prestataires, puis on affecte au sous dossier le nom de la 2ème cellules à droite de la 1ère valeur trouvée.

Avec votre proposition initiale je rencontre donc les problèmes suivants :

-si une même société intervient sur deux sites (je constaterai donc deux lignes avec les mêmes infos dans la feuille contact prestataires ; et la seul différence sera le code site) → excel prendra la 1ère valeur de la colonne « site » qu’il trouvera. Il y a donc une possibilité d’erreur d’affectation du dossier d’enregistrement à ce niveau

  • si deux sociétés avec deux « catégories » différentes interviennent sur un même « site », excel prendra également la 1ère valeur qu’il trouvera dans la colonne « catégorie ». Il y a donc une possibilité d’erreur d’affectation du sous dossier d’enregistrement à ce niveau

Pour faire plus simple : ce sont les éléments présents dans l’ordre de mission qui doivent être pris en compte pour déterminer le dossier + le sous dossier d’enregistrement

je penses qu’il convient donc de rechercher dans la feuille « contact prestataire » la ligne où le « site » + « l’entreprise » (indiqués dans l’ordre de mission) se trouve sur la même ligne. C’est une fois cette ligne identifiée qu’il faut attribuer les bons noms de dossier et sous dossier.

Une fois de plus, c’est bien le croisement des données « entreprise » + « site » de l’ordre de mission qui doivent permettre de diriger le pdf au bon endroit et de le ranger dans le sous dossier qui correspond.

Je galère à exprimer le fond de ma pensée mais j’espère que vous parvenez à me comprendre…

Redite moi si je ne suis pas clair et je vous ferai un tableau synthétique dans mon fichier excel « exemple »

Je vous remercie pour votre aide.

" Le nom du sous dossier créé porte le nom de la société. Or, je cherche à ce que le nom du sous dossier porte le nom de la catégorie 1. (comme c’est le cas lorsque laisse Offset(0, 2) )"

Donnes moi un exemple concret pour determiner le nom du sous dossier car j’avoue ne pas bien comprendre comment le déterminer de manière fiable

« je penses qu’il convient donc de rechercher dans la feuille « contact prestataire » la ligne où le « site » + « l’entreprise » (indiqués dans l’ordre de mission) se trouve sur la même ligne. C’est une fois cette ligne identifiée qu’il faut attribuer les bons noms de dossier et sous dossier. »

C’est à dire ???

Une fois la bonne ligne déterminée que doit on réaliser pour obtenir le bon nom du sous dossier ?

J’avoue être dans le flou le plus total

Merci de m’aider

Bonjour,

Veuillez trouver ci-joint, dans l’onglet contact prestataire, une explication plus claire du problème.

Redite moi si vous avez compris ce que j’essaye de dire.

Je vous remercie pour votre aide.

Exemple 1.xlsm (1,2 Mo)

Bonjour

Ton dernier fichier adapté

J’ai modifié la présentation de l’onglet « Ordre_de_mission » afin d’avoir les seules données du pdf à créer sur une seule page pour une présentation correcte dans ce fichier à réaliser

Je n’ai pas constaté d’anomalie sur le nom du fichier concernant sa partie date comme tu l’avais indiqué

Tes propos sur ce sujet :

"Exemple résultat recherché : Ordre de mission Entreprise X Tsite 2 20231027
Valeur des cellules pour ce test :

  • Q13 = Entreprise X
  • BB20 = T
  • Q22 = site 2

Résultat obtenu actuellement : Ordre de mission Entreprise 1+T+site 2+202310JJ"

Ce que j’obtiens :

Tu constateras toi même que celles-ci sont tout à fait correctes

Testes et dis moi

Exemple 1.xlsm (108,1 Ko)

1 « J'aime »

Bonjour !

En effet je n’avais plus de soucis au niveau du nom des pdf créés (pour le soucis de date il y avait une erreur : le format était yyyymmjj et je l’ai remplacé par yyyymmdd). Après plusieurs test j’ai compris le fonctionnement de cette partie et ai adapté le nom à mon besoin. → Plus de soucis à ce niveau.

Après bon nombre d’essais je ne vois plus de soucis d’enregistrement ! Tout semble fonctionner !

Je vous remercie infiniment pour votre précieuse aide !

Il me reste une dernière interrogation : au niveau de mon document final, j’ai listé les dizaines de chemin d’enregistrement des mes différents « sites ». Ces liens hypertexte fonctionnent bien mais excel ne parvient pas enregistrer les pdf dans ces dossiers via la macro.

Pour créer ces liens hypertexte j’ai tapé « C:\Exemple chemins d’accès » dans ma barre de recherche. et lors du lancement de la macro excel fait mine d’enregistrer le pdf mais ce dernier ne se trouve pas dans le dossier…

La seule solution que j’ai est de renseigner les liens hypertexte 1 par 1 via l’onglet « insertion » et « liens hypertexte » de excel. C’est fastidieux…

Avez-vous une idée de la raison de ce problème ? Y-a-il moyen de renvoyer dans deux cellules le nom du dossier et sous dossier dans lequel excel place les pdf ? (en demandant une sorte de feedback à excel ? -->afin de visualiser que le fichier s’enregistre au bon endroit).
L’idée du « feddback » est d’obtenir l’emplacement « réelle d’enregistrement » et non pas celui déterminé par excel (cela permettrait de constater d’éventuelles erreur). Est-ce possible ?

Encore merci à vous pour votre aide !

Bonne fin de journée et bon weekend !

Merci pour ce retour positif
Concernant les fichiers pdf et leur enregistrement le traitement en rapport à besoin du chemin interne du dossier dans lequel le sous dossier est présent ou créé
Un lien hypertexte ne peux répondre à cette exigence d’où tes difficultés lorsque tu cherches à les utiliser
Il faut impérativement l’adresse exacte du point d’enregistrement si tu veux obtenir tes fichiers pdf

Je ne peux te dire mieux sur ce sujet

Si ma dernière proposition correspond à tes attentes n’oublies pas de la valider un petit plus bien agréable

Merci d’avance

Je prends bonne note de ces éléments.

Je vais créer les chemins + par 1 manuellement alors ! Ça devrait le faire !

Je vous remercie une fois de plus poir tout votre temps et votre aide :pray:

J’ai validé votre réponse (du moins je penses) pouvez-vous me confirmer ça car c’est la moindre des choses !

Bonjour
Bien validé
Un grand merci à toi
Si cela peux t’aider je peux te créer une macro qui sur une liste de liens hypertextes intègre le chemin correspondant dans la cellule appropriée pour les besoins du traitement de la création du fichier pdf

A toi de dire

Au plaisir de te lire

Bonjour,

Si c’est faisable assez facilement pour vous et que ca ne vous dérange pas ce serait avec plaisir !!

Pour tout vous dire j’ai environ 200 liens hypertextes alors ca peut vraiment m’aider !

Je vous remercie une fois de plus !