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

VBA Word Discussion :

Automatiser l'impression de plusieurs docx 2010 en un minimum d'opérations utilisateur ? [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre éclairé
    Avatar de Oppenheimer
    Homme Profil pro
    Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Inscrit en
    Mars 2012
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2012
    Messages : 235
    Points : 891
    Points
    891
    Par défaut Automatiser l'impression de plusieurs docx 2010 en un minimum d'opérations utilisateur ?
    Bonjour !

    J'ai un mandat pour jeudi:
    Faire une impression de documents dans des répertoires différents "en moins de clics possible". Il s'agit d'impressions récurrentes.

    Evidemment, je commence par ordonner au client comme il se doit de faire une copie de ses quelques fichier dans un nouveau dossier, s'agissant de fichier souvent imprimés.

    À partir de là, il s'agit surtout de docx Word 2010, mais aussi de pdf.

    Je propose pour l'instant d'ignorer la partie .pdf, car je crois que ce format n'est pris en compte par aucune macro, et encore moins par un batch .bat.

    Est-ce que vous auriez une idée de la macro que je dois faire ?

    En vous remerciant d'avance pour votre/vos réponse(s).

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Salut,

    Plus simple, une liste des fichiers dans un tableau Word avec le chemin et une boucle sur les différents éléments.
    C'est accessible pour l'utilisateur.

  3. #3
    Membre éclairé
    Avatar de Oppenheimer
    Homme Profil pro
    Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Inscrit en
    Mars 2012
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2012
    Messages : 235
    Points : 891
    Points
    891
    Par défaut
    Merci beaucoup Heureux-Oli pour votre réponse !

    Je dois encore chercher un peu pour le VBA, car je ne suis pas expert en le domaine.

    C'est pas possible d'écrire quelque chose comme:

    Ouvrir *.*
    Print *.*

    (que je n'écris pas en courrier, ne s'agissant pas de VBA) ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Salut,

    On peut aller un peu plus loin dans la démarche.
    Une petite procédure pour ajouter une ligne au tableau.

    Une boucle sur le tableau pour imprimer les fichier.

    Voilà quelques lignes qui permettent ces deux opérations.

    Ce premier code va à l'aide d'une boîte de dialogue récupérer le chemin des fichiers choisis et les stocker dans un tableau Word.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub AjoutFichier()
    'Ajout d'un ficher à la table
    'Déclration des variables
    'Déclaration d'un objet FileDialog pour l'accès aux fichiers
    Dim oDlg As FileDialog
     
    'Affectation de l'objet FileDialog
    Set oDlg = Application.FileDialog(msoFileDialogFilePicker)
     
    'Définitions de certaines propriétés de l'objet FileDialog
    With oDlg
        .AllowMultiSelect = False
        .Title = "Choisissez un ficher"
    End With
    'Affichage de l'objet FileDialog
    oDlg.Show
     
    'Savoir si un fichier est choisi
    If oDlg.SelectedItems.Count = 1 Then
     
    'Boucle pour déterminer si une table existe
    'Si elle n'existe pas, on la crée.
        If ActiveDocument.Tables.Count = 0 Then
            ActiveDocument.Tables.Add Range:=Selection.Range, Numrows:=2, numcolumns:=1
            ActiveDocument.Tables(1).Rows(1).Range.Text = "Chemin du fichier"
            ActiveDocument.Tables(1).Rows(2).Range.Text = oDlg.SelectedItems(1)
        Else
        'Si la table existe, on ajoute une ligne
            ActiveDocument.Tables(1).Rows.Add
            ActiveDocument.Tables(1).Rows.Last.Range.Text = oDlg.SelectedItems(1)
        End If
    End If
     
     
    'Libération de l'objet
    Set oDlg = Nothing
     
     
    End Sub
    Ce second code va boucler sur les lignes du tableau rempli avec le code précédent pour imprimer chaque fichier.
    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
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    Sub BouclePourImpression()
    'Déclaration des variables
    Dim oDoc As Document
    Dim intI As Integer
    Dim oTbl As Table
     
    'Affectation de la table 1 à la variable
    Set oTbl = ActiveDocument.Tables(1)
     
    'Boucle sur les ligne de la table en commençant à la deuxième ligne
    For intI = 2 To oTbl.Rows.Count
    'Ouverture du document
    Set oDoc = Application.Documents.Open(FileName:=NetText(oTbl.Rows(intI).Cells(1).Range.Text))
    oDoc.PrintOut
    Debug.Print oDoc.Name
    DoEvents
     
    oDoc.Saved = True
    oDoc.Close
    Next intI
     
     
    Set oDoc = Nothing
     
     
    End Sub
    Cette fonction sert à nettoyer le texte récupéré dans les cellules du tableau. Une cellule contient en plus du texte deux caractères supplémentaires qui posent problème lors de la récupération et l'utilisation du texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Function NetText(stTemp As String) As String
    'Fonction de nettoyage
    NetText = Left(stTemp, Len(stTemp) - 2)
     
     
    End Function

  5. #5
    Membre éclairé
    Avatar de Oppenheimer
    Homme Profil pro
    Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Inscrit en
    Mars 2012
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2012
    Messages : 235
    Points : 891
    Points
    891
    Par défaut
    Merci beaucoup Heureux-Oli pour tout ce code !

    Je vais étudier tout cela ce matin même.

  6. #6
    Membre éclairé
    Avatar de Oppenheimer
    Homme Profil pro
    Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Inscrit en
    Mars 2012
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2012
    Messages : 235
    Points : 891
    Points
    891
    Par défaut
    Bonjour Heureux-Oli,

    Je viens de faire plusieurs essais. J'ai sélectionné les trois codes entiers que j'ai placé dans la partie VBA d'un fichier que j'ai nommé "MacroPourImpression".

    Ensuite ai-je choisi d'exécuter la première macro. J'ai pu sélectionner ce document même (qui alors a affiché son propre chemin dans l'éditeur de texte).

    J'ai choisi aussi un autre docx.


    Cependant, j'ai deux problèmes; le moindre, c'est la liste qui ne semble pas nettoyée, mais ce n'est pas grave.

    Par contre, lorsque je choisi la macro BouclePourImpression, il ne prend en compte que le premier élément de la liste, en l'occurence le chemin de lui même (c'est lui-même que j'ai sélectionné en premier).

    J'ai essayé en convertissant l'autre docx en docm, pour voir s'il devenait pris en compte; mais cela ne change rien.


    Je suis en train de me faire un structogramme Nassi-Schneidermann afin de comprendre le plus possible votre code.

    Est-ce que j'oserais vous demander de votre côté de faire un test, s'il vous plaît, pour voir si la BouclePourImpression fait effectivement une boucle ?

  7. #7
    Membre éclairé
    Avatar de Oppenheimer
    Homme Profil pro
    Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Inscrit en
    Mars 2012
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2012
    Messages : 235
    Points : 891
    Points
    891
    Par défaut
    Heureux-Oli,

    Je viens de comprendre, c'est bête de ma part. Depuis le temps, je devrais savoir qu'il ne faut jamais faire de singularité, soit tester des cas spécifiques.

    En effet, intelligemment, vous avez commandé:

    d'ouvrir le document,
    de l'imprimer,
    puis de le fermer.

    Or comme j'ai choisi le fichier de macro lui-même à imprimer, il s'est évidemment fermé avant d'avoir le temps de passer au second fichier.


    Bon en ce moment ai-je un problème de connexion à l'imprimante. Il y avait des "complément Microsoft" sous l'onglet Développeur; j'ai coché un truc et ça m'a mis une URL, je vais corriger cela, mais c'est une autre histoire.

    Je vais vous tenir informé de la suite d'ici quelques heures.

  8. #8
    Membre éclairé
    Avatar de Oppenheimer
    Homme Profil pro
    Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Inscrit en
    Mars 2012
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Certificat Fédéral de Capacité en informatique - orientation bases de données (conception)
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2012
    Messages : 235
    Points : 891
    Points
    891
    Par défaut
    Bon, je devais faire une présentation, mais finalement mon chef n'avait pas le temps.

    À côté de la macro, j'avais effectivement proposé de copier les fichiers dans un dossier, sélectionner tous les .docx, puis cliquer simplement sur imprimer du menu de Windows Explorer ou du menu contextuel. Il m'a demandé d'explorer cette voie.

    Je lui ai dit qu'une fois les chemins divers précisés dans le fichier de macro, celle-ci avait l'avantage d'éviter de copier les fichiers ou faire des raccourcis.

    Et je vous ai cité Heureux-Oli comme source.

    J'estime ce travail réussi et le problème , et j'en ai appris beaucoup Heureux-Oli: merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WinForms]Impression sur plusieurs colonnes
    Par penchu dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 31/08/2006, 21h03
  2. Pb d'impression sur plusieurs pages d'un JGraph
    Par StephG31 dans le forum 2D
    Réponses: 1
    Dernier message: 15/06/2006, 10h23
  3. [MFC]Impression de plusieurs vues
    Par valdeub dans le forum MFC
    Réponses: 3
    Dernier message: 19/01/2006, 09h30
  4. [Print] Impression de plusieurs composants graphiques....
    Par lilou77 dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 02/01/2006, 10h01
  5. [Rave reports] impression de plusieurs états ??
    Par Goldenkiller dans le forum Bases de données
    Réponses: 4
    Dernier message: 06/08/2004, 16h30

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