Générer fichiers PDF à partir d'un fichier Excel

Bonjour à tous et merci pour ce forum,

Voici mon problème. C'est assez compliqué (en tout cas pour moi) je ne sais pas si vous aurez une solution.

J'ai un planning créé sur Excel pour une société de transport de personnes. Une fois le contenu du fichier Excel renseigné manuellement je souhaiterais générer automatiquement des bons de transport au format pdf (destinés aux chauffeurs) qui reprennent chacun les informations contenues dans les champs d'une ligne du fichier Excel. (cf exemple de planning en PJ)

Exemple je voudrais que le fichier généré affiche les nom/prénom/numéro de vol/nombre de passagers/nom du chauffeur/etc

Ce que je fais actuellement c'est d'aller dans données, de filtrer par chauffeur, de copier coller dans un nouveau fichier excel et de l'enregistrer en PDF après avoir revu la mise en page et la la zone d'impression. C'est hyper long, surtout que parfois les plannings sont beaucoup plus fournis que celui mis en exemple.

Savez-vous m'aider ?

ce que tu dois faire c'Est de créer une macro qui modifiera la mise en page puis sauvera une copie en pdf .. qui ensuite redefinira la mise en page de base au besoin ...

envoi nous un fichier de base .. puis un fichier avec la mise en page désirée


ou tu pourrais simplement enregistrer la macro de mise en page puis exporter en pdf

exemple de code assez de base

Sub ExporterEnPDF()
    Dim fName As Variant

    ActiveSheet.PageSetup.PrintArea = "$A$1:$F$15"    'selection de zone

    fName = Application.GetSaveAsFilename( _
        InitialFileName:="C:\Chemin\BL-.pdf", _
        FileFilter:="PDF files, *.pdf", _
        Title:="Bon de Livraison Chauffeur")
    If fName <> False Then
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fName _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=True
    End If

Puis pour le bouton:

Private Sub CommandButton1_click
Call ExporterEnPDF
End Sub

bien sûr les options de mise en page les marges et tout le tralala sont réglables.

De plus une méthode qui ne demande pas de connaissance VBA: tu peux enregistrer directement une macro .. ton onglet développeur est bien dans ton ruban?

Bonjour,

Merci pour ton retour

Je n'ai malheureusement pas de connaissances en VBA. Oui j'ai bien l'onglet développeur dans le ruban.

Voici en pièce jointe un exemple de planning global à partir duquel je souhaiterais :

- générer des planning individuels pour chaque employé en pdf

(optimisés pour l'impression: voici ce que je mets habituellement comme mise en page: hauteur de cellules 100/police 18/Zone d'impression ajustée sur 1 page en largeur et deux pages en hauteur/marges étroites - cf exemple planning Jacques en PJ)

- générer des fichiers "bons de transports" pour chaque course toujours en pdf (cf exemple joint)

Si vous pouvez m'aider la dessus je vous en serais vraiment reconnaissant car pour le moment je fais tout manuellement et ça me prends un temps fou.

456exemple-planning.xlsx (18.89 Ko)

Juste un petit bonjour pour faire remonter mon post et un merci d'avance à ceux qui voudront bien consacrer un peu de temps à mon problème

Je vais y consacrer du temps ce week-end si personne s'en est occupé

Je ne t'oublie pas!

Merci crackwood01 c'est sympa

J'attends avec impatience ton retour

Sauf si d'autres veulent s'y coller entre temps

Comme il me manquait un peu d'informations sur ce que tu voulais vraiment faire

j'ai été un peu créatif.

Il manque des données à intégrer dans les cellules du Bon de Transport comme je n'ai pas les noms de familles des chauffeurs et la date de la commande.

J'ai moi-mêmes des compétences limitées en VBA alos j'ai fais de mon mieux.

Pour visualiser le VBA appuies sur Alt+F11

1'553planning.xlsm (80.83 Ko)

Merci pour ta créativité et aussi pour avoir pris de ton temps pour me donner un coup de main !

C'est vraiment très bien ce que tu as fait. Il y a juste quelques points que je souhaiterais revoir (si tu es ok?) afin d'optimiser le processus:

-Sur l'onglet "Bon-Chauffeur" que tu as créé: serait-il possible lorsque l'on clique sur le bouton "Produire un bon chauffeur" au lieu d'avoir les numéros des bons, d'avoir une liste des chauffeurs et qu'en choisissant un chauffeur, cela puisse automatiquement générer tous ses bons ?

-Sur l'onglet "Bon-Transport": Pareil. Serait-il possible d'avoir une liste déroulante des chauffeurs et qu'en en sélectionnant un, cela génère automatiquement tous les bons de transports qui lui sont attribués ?

Je ne sais pas si c'est très compliqué et si c'est quelque chose que tu saurais faire?

Tiens moi au courant et merci encore pour ton aide!

Et bien pour être franc c'est bien ce que j'essaye de faire déjà depuis un moment ...

comme j'ai dis mes connaissances sont limitées et je n'y arrive pas encore.

Si quelqu'un d'autre voudrait bien se prêter au jeu j'en serais ravi ... je saurais ensuite comment faire moi-même.

Bien sûr je vais continuer d'y travailler ce week-end

Merci à toi !

Et donc si quelqu'un a la solution, un petit coup de main serait le bienvenu

Avec un peu d'aide d'autres programeurs je suis parvenu ce matin à programmer les bons de chauffeur ...

je suis à travailler sur la création automatique de bon de transports.

218planning-v2.xlsm (78.75 Ko)

Bon je suis ce matin parvenu à fabriquer quelque chose de pas trop mal compte tenu de mes connaissances.

J'y suis allé un peu en longueurs et en répétition de code peut-être inutile mais au moins ca fonctionne!

Les bons de transports se génèrent en fonctions des bons de chauffeurs pré-établis.

Le code est bon jusqu'à 5 bon de transport qui se génère automatiquement mais en regardant un peu le code VBA et en faisait des COPIER/COLLER et en modifiant les valeurs tu pourras en ajouter plus au besoin.

Si quelqu'un veut épurer le code je vous y invite!

N.B. Le code est construit en fonction de valeurs de cellules! Donc il est impératif que vous ne modifiez pas le "Titre" des colonnes et leurs valeurs en fonctions de leurs titres.

SI vous voulez AJOUTER des colonnes ce sera toujours à la fin de votre tableau de faites aucune insertion de colonnes sinon tout sera à l'envers.

Même chose pour le bon de transport les ajouts se feront à la suite du contenu actuel sinon bonne chance

105planning-v4.xlsm (75.04 Ko)

J'ai pris la liberté d'ajouter un formulaire d'ajout de Transport

224planning-v5.xlsm (87.31 Ko)

Salut crackwood01,

Ta version 5 fonctionne très bien! Un très grand merci à toi !

Ok j'ai bien compris qu'il ne fallait ni modifier les titres de colonnes ou insérer de nouvelles colonnes.

Tu as bien fait de me le dire car c'est ce que je m'apprêtais à faire!

En effet, pour que tout soit complet il faudrait ajouter 3 colonnes dans le plannings (comme dans l'exemple joint):

  • Date de la commande
  • Heure de la commande
  • Date de la prise en charge
Qui doivent se reporter dans les bons de transports

Autre précision: Les trajets ne sont que trajet depuis l'aéroport de Nice jusqu'à Cannes (ou sens inverse)

Il faudrait donc que appliquer la variable suivante:

► Si dans la colonne Arrivée/Départ du planning la lettre est A = Le champ "lieu de prise en charge" du bon de transport soit automatiquement "Aéroport International de Nice" et le champs "Destination" soit automatiquement "Cannes, + contenu du champs Adresse du planning"

Et inversement

► Si dans la colonne Arrivée/Départ du planning la lettre est D = Le champ "lieu de prise en charge" du bon de transport soit automatiquement "Cannes, + contenu du champs Adresse du planning" et le champs "Destination" soit automatiquement "Aéroport International de Nice"

Et dernière contrainte: La réglementation nous impose à ce que les bons soient obligatoirement numérotés dans l'ordre chronologique. Saurais-tu intégrer cela ?

Dis moi si les explications n'étaient pas claires. Et encore X1000 mercis pour ton aide!

Oui ca me semble clair pour les variables mais pour ce qui est du numérotage j'aimerais des précisions ...

Soit dit en passant je suis charpentier-menuisier dans la vie. La programmation est pour moi un hobby que j'ai depuis que j'ai 11 ans ( j'ai 28 ans aujourd'hui) je programme du html/php/css3/mysql depuis tout jeune. Je me suis mis récemment ( il y a 3 semaines ) au vba.

Tout ca pour dire que les forums excel-vba sont la pour donner un coup de main ... Tu devrais quandmeme essayer par toi même d'intégrer les nouvelles fonctions en te basant sur le code existant. Je n'ai peut-être pas beaucoup commenté le code mais les lignes directrices le sont.

Je vais avec grand plaisir continuer de programmer ton classeur mais sache que pour tes propres connaissances il serait bon que tu essayes un peu.

Que ce soit bien clair: il me fera plaisir de continuer ton classeur

Tout d'abord un très Joyeux anniversaire à toi !

C'est sympa ça, tu vas donc avoir des cadeaux + des chocolats !

Alors une fois n'est pas coutume, je tiens encore à te remercier, et à remercier également tous les participants et administrateurs du forum, car on l'oublie souvent mais effectivement les gens qui prennent de leur temps et de leur énergie sur les forums d'entraide, de manière le plus souvent complètement désintéressée, c'est quelque chose de vraiment formidable! Qui plus est, en ces heures assez obscures de notre actualité, un peu d'altruisme et d'abnégation ça fait pas de mal. Ce sont de petites choses mais qui je trouve remettent un peu d'espoir dans une certaine vision de l'humanité et dans ce que nous avons de plus positif en nous...

Oui effectivement j'ai bien pensé à tout faire par moi-même, mais malheureusement je l'avoue mes connaissances en VBA sont à peu près équivalentes à...zéro

Ceci dit, j'ai clairement l'intention de m'y mettre un de ces quatre... si si, et pour me motiver j'ai déjà lu l'introduction du cours https://www.excel-pratique.com/fr/vba.php proposé ici-même...

Pour l'instant c'est vrai que même si c’est la solution de facilité, c'est plus facile pour moi de faire appel à ceux qui savent 8) En plus j'ai encore un congrès qui va commencer dans 10 jours, et même avec beaucoup d'efforts je ne serai jamais devenu un érudit en VBA d'ici là

Voilà, sache donc que tu as toute ma gratitude et que grâce à ton code je vais pouvoir être plus efficace pour ma préparation des plannings et qu'en plus, le temps économisé pourra être réattribué à des tâches plus sympas comme par exemple passer des soirées relax avec ma copine devant la nouvelle saison de game of thrones ou autres Donc merci !!!

Haha pas de problêmes ! J'ai fini ton code pour les variables tout fonctionne nickel!

J'ai juste besoin de precisions sur les numero chronologique

En fait, la legislation impose juste que les bons de transports soient numérotés. Ensuite concrètement il faut juste que chaque bon aie un numéro différent. La chronologie est pas forcément indispensable (car invérifiable en cas de contrôle).

Je t'ai mis en PJ un exemple de bon de transport numéroté tel qu'il doit vraiment apparaître avec les infos sociétés à jour.

C'est juste un détail, mais sans vouloir abuser, est-il possible pour une meilleure lisibilité pour les chauffeurs, de mettre le nom du passager en gras ou en police un peu plus grande ?

N'hésite pas si tu souhaites des infos complémentaires...

Merci!

Bon comme je n'étais pas trop sûre pour ton numéro de bon j'ai créer une petite macro sur la page Bon-Transport .. tu n'as qu'a mettre en"J6" la valeur du premier bon puis cliquer sur le bouton!

Les variables sont crées et les tableaux ont 3 nouvelles colonnes.

J'ai intégrer un calendrier pour sélectionner les dates! ( laisse moi te dire qu'avec Excel 2010 en 64 bit c'était TRES TRES complex )

j'espère t'avoir bien servi!

Il existe assurément un meilleur code beaucoup plus simple et vraiment moins long pour gérer tout ca .. mais pour un humble charpentier j'ai fais mon possible!

362planning-v6.xlsm (201.56 Ko)
Rechercher des sujets similaires à "generer fichiers pdf partir fichier"