Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Imprimer le dernier PDF en date d'un Dossier

gaby66

XLDnaute Occasionnel
Bonjour,

Je cherche une macro qui me permettrait d'imprimer un fichier .pdf dans un dossier spécifique, peu importe le nom du .pdf, mais il faut que ce soit le dernier en date qui se trouve dans ce dossier.

Exemple : Si il trouve plusieurs fichier .pdf dans un dossier, il doit m'imprimer alors seulement le dernier en date.

Pour Info : J'ai trouvé des tas de macro qui permette d'imprimer un pdf, mais il faut a chaque fois stipuler le nom du fichier en + du chemin où il se trouve, sauf que mon problème c'est que le nom varie souvent sans possibilité de savoir exactement l'orthographe à coup sûre (Du coup ça fonctionne pas car il trouve pas le fichier si l'orthographe est pas totalement juste, logique). Par contre une chose qui est sûre dans mon cas, c'est que c'est toujours le dernier fichier en date enregistrer dans ce dossier.

Dans un 2nd temps, j'aimerais qu'il me rajoute un msgbox pour me stipuler si une erreur est survenu, du style "Fichier Introuvable". Si toutefois il ne trouve aucun fichier pdf dans le dossier a imprimer. Mais ce n'est pas mon problème principal

Merci pour votre aide à ceux qui passeront par là.

Bonne Soirée
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir
il te faut donc cibler le dernier fichier par sa date de création et non son nom
  1. a tu entendu parler de la fonction "DIR"?
  2. a tu entendu parler de la fonction "FileDateTime"?
  3. a tu déjà vu un code avec une boucle sur DIR
je suppose que non donc comme ca a la vite fait je ferais bien une toute petite fonction
les commentaires sont suffisamment explicatifs je crois
VB:
Function getLastFichier(ByVal dossier As String, ByVal extention As String) As String
    Dim fichiers, fiche$, dat As Date, datefichier As Date 'variables
    getLastFichier = "" 'on la met a vide des le departelle ne renvera rien si le dir qui suit ne fait pas de match
    fichiers = Dir(dossier & "*." & extention) 'on instencie un DIR
    dat = CDate("01/01/1900") ' on crée un olddate (minimum geré par excel )
    If fichiers <> "" Then ' si fichier renvoir une chaine
        Do 'alors on boucle
            datefichier = CDate(Format(FileDateTime(dossier & fichiers), "DD-MM-YYYY")) 'on récupe la date du fichier
            'on la compare avec la date min si plus grand la date min devient celle du fichier
           'et la variable fiche devien le nom du fichier
           If datefichier > dat Then fiche = fichiers: dat = datefichier
             fichiers = Dir 'on relance(raffraichi le dir)
        Loop While fichiers <> "" 'on tourne tant que dir renvoie quelque chose (une chaine)
        getLastFichier = fiche 'la fonction renvoie le fichioer trouvé
    End If
End Function

maintenant on la teste
VB:
Sub test()
    Dim dossier$, leFichier$, Ext$                   'variables
    dossier = "G:\vba excel\boisgontier jacques\"    'dossier a fouiller
    Ext = "pdf"                                      'extention de fichier désirés
    leFichier = getLastFichier(dossier, Ext)       'appel a la fonction
    If leFichier <> "" Then                          'si leFichier n'est pas vide
        MsgBox "le dernier pdf créée dans ce dossier est " & vbCrLf & dossier & leFichier
    Else 'sinon bye!!bye!!
        MsgBox "pas de fichiers avec cette extention dans ce dossier"
    End If
End Sub
voila
tu sais comment trouver le dernier fichier d'un dossier sans connaitre son nom au depart
 

gaby66

XLDnaute Occasionnel
Merci PatrickToulon,
Je la test demain et te dis ça en retour.
Je connaissez pas non les fonctions DIR, FileDateTime, je sais faire quelque macro de base assez simple (je débute), je sais aussi réadapter des macro plus complexe à ma situation, car j'arrive à les comprendre.
En + la je vois que tu y a rajouter des explications avec la macro, c'est top, ça me permet de mieux comprendre tous ça, et en attend de la testé, si je comprends bien la macro, celle-ci me permet donc de retrouver la dernière date de création d'un fichier pdf basé sur une date de départ très ancienne (01/01/1900), avec son msgbox qui l'accompagne, qui par ailleurs et même mieux que ce que je voulais car le message box indique le nom du fichier qui trouve si je me trompe pas (je vois bien le vba qui réalise ça), par contre il manque l'impression du pdf, si je me trompe pas sans la testé pour le moment, juste en lisant ta macro, et je t'avoue que parfois je ne sais pas où la placé quand plusieurs fonctions rentre en prise de compte.
 

patricktoulon

XLDnaute Barbatruc
ok
non elle imprime pas elle te donne le chemin complet du fichier

tu veux imprimer le fichier trouvé j'ai 2/3 methode
la plus simple
remplace la ligne du msgbox qui te donne le nom par celle ci
VB:
CreateObject("Shell.Application").Namespace(0).ParseName(dossier & leFichier).InvokeVerb ("Print")
voila ca t'imprime le fichier


et si ca t'ouvre adobe reader (sur certaine version ca le fait tu ajoute en dessous cette ligne
Code:
 Application.Wait (Now + TimeValue("0:00:03"))
     Shell "Taskkill /im AcroRd32.exe /f", 0
peut etre faudra changer AcroRd32.exe pour celui que tu utilise tu le trouve dans gestion des tache windows/processus
 

gaby66

XLDnaute Occasionnel
Application.wait, je la connais celle là, c'est celle qui permet de lancer une application avec une durée définie
Si je remplace la ligne de code par celle de Msg Box, ça va m'enlever le fait de savoir quel fichier il va imprimer, c'est dommage ça me plaisait bien ça au final, même si c'était pas prévus de base.

Par ailleurs il y a quelques mois auparavant pour autre chose, je cherchais une fonctionne qui force l'impression d'un document en Recto/Verso. Je n'ai rien trouver de très concluant après plusieurs test que j'ai réalisé, et comme tu as un meilleur niveau que moi en VBA, est-ce que à tout hasard ça te parle ?
 

patricktoulon

XLDnaute Barbatruc
Application.wait, je la connais celle là, c'est celle qui permet de lancer une application avec une durée définie
non c'est pas du tout ca ,ca sert a faire une pose
pour le reste c'est plus compliqué que cela et ca fonctionne pas avec toutes les imprimantes
apres rien ne t'interdi de faire des recherche
j'ai répondu a ta question de base je crois
 

gaby66

XLDnaute Occasionnel
Oui c'est vrai, le reste c'est optionnel.
Je teste ça demain et te dis.
Bonne Soirée à toi

PS : Les recherches pour une impression en Recto/Verso j'y ai passer plusieurs heures sur le net et plusieurs test sans succès, je laisse tomber, c'était vraiment au cas où si ça te disait quelque chose
 

gaby66

XLDnaute Occasionnel
Re Patricktoulon,

J'ai eu un petit contre-temps qui m'a empêcher de te répondre le lendemain comme prévus.
Juste pour te dire, que ça fonctionne parfaitement, un Grand Merci.

Je vais juste essayer de la peaufiné en essayant de rajouter le nombre de copie d'impression souhaitées, et retenter de trouver comme faire en Recto/Verso, et sa sera top.

Merci en tous cas pour ton Aide

@+
 

Discussions similaires

Réponses
3
Affichages
304
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…