IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Imprimer les fichiers d’un dossier


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2019
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Imprimer les fichiers d’un dossier
    Bonjour,

    J’ai créé un code pour imprimer des fichiers qui se trouvent dans un dossier. Il y a environ 10000 dossiers donc en tapant l’article et la structure dans deux cases Excel, je veux que la macro m’ouvre les fichiers du dossier puis que ça imprime les fichiers.
    Avec mon code, je réussis à ouvrir les fichiers mais je n’arrive pas à imprimer.

    Voici le code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Ouvrir_Fichiers()
     
     
    Dim sPath As String, sFilename As String, article As String, structure As String
    Dim MonApplication As Object
     
    Sheets("InfoRemplir").Activate
    Range("A2").Select
    article = Selection
    structure = Selection.Offset(0, 1)
     
    Set MonApplication = CreateObject("Shell.Application")
     
    Application.ScreenUpdating = False
     
    sPath = "O:\Dessins\" & structure & "\" & article & "-" & structure & "\"
    sFilename = Dir(sPath & "*.tif*")
    MonApplication.Open (sPath & sFilename)
     
    End Sub
    Merci pour votre aide

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Roran46 Voir le message
    J’ai créé un code pour imprimer des fichiers qui se trouvent dans un dossier.
    Dans la rubrique Excel, on va supposé à priori que ces fichiers sont des classeurs Excel.
    Mais, à la lecture de ton code, j'ai l'impression que ce n'est pas le cas.
    Tu pourrais en dire plus sur la nature de ces fichiers ?

    Il y a environ 10000 dossiers
    J'espère que tu as une imprimante (très) grande capacité et que tu n'as rien d'autre à faire dans la journée sur la machine qui lancera ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Ouvrir_Fichiers()
     
     
    Dim sPath As String, sFilename As String, article As String, structure As String
    Dim MonApplication As Object
     
    Sheets("InfoRemplir").Activate
    Range("A2").Select
    article = Selection
    structure = Selection.Offset(0, 1)
     
    Set MonApplication = CreateObject("Shell.Application")
     
    Application.ScreenUpdating = False
     
    sPath = "O:\Dessins\" & structure & "\" & article & "-" & structure & "\"
    sFilename = Dir(sPath & "*.tif*")
    MonApplication.Open (sPath & sFilename)
     
    End Sub
    Plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim MonFichier As Object
    Dim sPath As String, sFilename As String
     
    With Sheets("InfoRemplir")
        sPath = "O:\Dessins\" & .Range("B2").Value & "\" & .Range("A2").Value & "-" & .Range("B2").Value & "\"
    End With
     
    sFilename = Dir(sPath & "*.tif*")
     
    Set MonFichier = GetObject(sPath & sFilename)
    Si tu peux avoir plus d'un fichier par dossier, il va falloir rajouter une boucle autour du Dir().

    Mais je pense que ce n'est pas la bonne solution.
    En ouvrant le fichier, il va falloir que tu gères l'impression en utilisant la bibliothèque d'objets de l'application qui ouvre les TIF par défaut, ce qui risque d'être assez compliqué.

    Il vaudrait mieux laisser l'Explorateur Windows gérer ça lui-même en utilisant les fonctions de la bibliothèque shell32.dll.
    Perso, je ne l'ai jamais fais mais si j'avais à le faire, je commencerais mes recherche pas ces codes :
    https://excel.developpez.com/faq/?pa...erShellExecute
    https://excel.developpez.com/sources...eApercuWindows
    En envoyant "print" en second paramètre (lpOperation).

    Une lecture qui peut servir : https://docs.microsoft.com/en-us/win...-shellexecutea
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour Menhir, bonjour à tous,

    Citation Envoyé par Menhir Voir le message
    Dans la rubrique Excel, on va supposé à priori que ces fichiers sont des classeurs Excel.
    Mais, à la lecture de ton code, j'ai l'impression que ce n'est pas le cas.
    Tu pourrais en dire plus sur la nature de ces fichiers ?
    En tout cas, il y a au moins un fichier Tiff

    J'étais en train de répondre `sa question quand j'ai répondu Oui à la question de l'installateur d'Antidote demandant si je voulais redémarrer plus tard et qu'il aurait visiblement fallu répondre Non.
    Comme quoi que la boîte de dialogue n'a pas été vérifiée dans Antidote

    Mais puisque ta réponse rejoint un peu la mienne, je vais juste me permettre de résumer.

    La macro qui est présentée dans la question ne fait qu'ouvrir un fichier d'image dans le programme par défaut désigné dans le registre, en fonction de l'extension du fichier, sans lancer l'impression.

    Donc, je voyais deux solutions:

    1) Ou son programme par défaut est utilisable en ligne de commande, et il faut réécrire la ligne shell pour intégrer l'exécutable par défaut, ou un autre idoine, et les options de ligne de commande du programme utilisé.

    2) Ou bien, une suite de SendKeys

    Mais, toute l'explication que j'avais ajoutée devrait se retrouver dans les liens que tu as ajoutés
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2019
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Effectivement, mes dossiers ne contiennent aucun fichier Excel mais uniquement des fichiers images TIF. Ce sont des plans à imprimer.

    Et il ne faudra pas imprimer tous les fichiers dans les dossiers car chaque jour j’aurais une extraction entre 10 et 100 articles avec autant de plans à imprimer. C’est pourquoi je voudrais automatiser le processus.

    Chaque dossier comprend 1 ou 2 fichiers mais il faut uniquement imprimer le 1er fichier

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Roran46 Voir le message
    Effectivement, mes dossiers ne contiennent aucun fichier Excel mais uniquement des fichiers images TIF.
    En plus d'une imprimante grande capacité, il te faudra aussi un stock de cartouches d'encre...

    Et il ne faudra pas imprimer tous les fichiers dans les dossiers car chaque jour j’aurais une extraction entre 10 et 100 articles avec autant de plans à imprimer. C’est pourquoi je voudrais automatiser le processus.
    Comment comptes-tu distinguer les fichiers à imprimer de ceux qui ne le sont pas ?

    Chaque dossier comprend 1 ou 2 fichiers mais il faut uniquement imprimer le 1er fichier
    Qu'est-ce qui, pour toi, désigne un fichier comme "le premier" ?
    J'espère que tu ne comptes pas simplement sur le premier sélectionné par Dir() ? Parce que ce serait comme jouer à pile-ou-face.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour

    exemple pour imprimer un fichier externe
    methode 1 avec Shell.Application (namespace(0) et invokeverb(VBA/VBS)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function ImpressionDeFichier1(fname)    'Version 1 avec shell.application
        CreateObject("Shell.Application").Namespace(0).ParseName(fname).InvokeVerb ("Print")
    End Function
    '
    Sub TestImpressionDeFichier1()
    ' va Imprimer le fichier sur l'inprimante par defaut de WINDOWS!!!!!!!!!!!
        fname$ = "C:\Users\polux\DeskTop\probleme avec certains controls Activx inséeré dans une feuille excel2013 (webbrowser).pdf"
        ImpressionDeFichier1 fname
    End Sub
    methode 2 avec api shellexecute (VBA)excel 32 bits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                                          (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String _
                                        , ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
     
    Function ImpressionDeFichier3(fname)
        'Attention Imprime le fichier avec l'imprimante par defaut de excel pas celle de windows!!!!!!!!!!!
            x = Application.hWnd
            ShellExecute x, "print", fname, "", "", 1
    End Function
    '
    Sub TestImpressionDeFichier3() 'OK
    ' va Imprimer le fichier sur l'inprimante par defaut de WINDOWS!!!!!!!!!!!
        fname$ = "C:\Users\polux\DeskTop\probleme avec certains controls Activx inséeré dans une feuille excel2013 (webbrowser).pdf"
        ImpressionDeFichier3 fname
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Imprimer les fichiers d’un dossier
    Bonjour,

    Ma demande est en lien avec la discussion mais diffère quelque peu.

    Je souhaiterais imprimer l'ensemble des PDF présents dans un dossier (unique) et selon l'ordre d'enregistrement de ces derniers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Impression()
     
    Dim FichierAImprimer As Variant
     
    FichierAImprimer = "C:\Users\N579967\Desktop\PDF\Document1.pdf" '<-- chemin complet du fichier à imprimer
        CreateObject("Shell.Application").Namespace(0).ParseName(FichierAImprimer).InvokeVerb ("Print")
    End Sub
    Avec le code ci-dessus je peux imprimer un fichier en indiquant son chemin en revanche je n'arrive pas à faire de même en intégrant une boucle permettant d'ouvrir et imprimer l'ensemble des fichiers du dossier.

    Si vous avez une solution je suis preneur...

    Merci d'avance.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 225
    Points : 553
    Points
    553
    Par défaut
    Salut Larisse14,

    As-tu trouvé la solution à ta demande ?
    Si oui, ça serait gentil de poster le code, cela pourrait aider d'autres utilisateurs

    A+

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 225
    Points : 553
    Points
    553
    Par défaut
    J'ai trouvé un site intéressant,

    Il y a une BD qui permet de sélectionner un dossier et de copier les noms des .txt (mais on peut changer en .pdf dans le code) dans une ZL
    ensuite on a besoin de faire une boucle sur cette liste afin d'imprimer tous les pdf

    https://youtu.be/QmdRvNRG5KY?list=PL...cJCe-j6Sk-UJjZ

Discussions similaires

  1. Réponses: 15
    Dernier message: 19/10/2016, 10h11
  2. Réponses: 2
    Dernier message: 16/06/2008, 14h08
  3. Réponses: 9
    Dernier message: 25/04/2008, 21h21
  4. Réponses: 7
    Dernier message: 17/11/2007, 17h05
  5. Réponses: 1
    Dernier message: 12/09/2007, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo