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 :

Impression de la page x à y [Toutes versions]


Sujet :

VBA Word

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut Impression de la page x à y
    Bonjour,

    Tout d'abord, je ne connais pas plus que ça VBA, mais je pense pouvoir faire du développement basique.

    Je souhaite développer aussi simplement que possible une macro me permettant d'imprimer un document de la page contenant "1ere partie" à la page contenant "3e partie".

    Pour l'instant j'ai deux pistes :

    En partant d'un code trouvé sur le net, j'avais dans l'idée d'imprimer, à partir de la page contenant "1ere partie", page à page tant que je ne trouvais pas '"3e partie"...Problème je ne sais pas passer à la page suivante et je ne sais pas tester si mon texte est dans cette page.

    Qu'à cela ne tienne, autre moyen : je cherche ma première page et ma dernière page et avec une fonction, j'imprime en boucle de ma page x à ma page y... Ca y était presque, mais il m'imprime des pages qui ne correspondent pas tout à fait. En fait si en dur, je lui demande de m'imprimer la page 2 il m'imprime la page 1, mais ça fonctionne parfaitement pour les 1 et 3 par exemple...

    Bref, si vous un moyen direct de résoudre mon problème, je suis preneuse sinon si vous pouviez m'indiquer le moyen de :
    - passer à la page suivante
    - tester si la page contient un texte "Toto"
    - voir s'il y a un truc qui cloche avec le deuxième morceau de code...
    D'avance merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    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 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Pourquoi passer à la page suivante ?

    Si tu fais une recherche sur tes deux termes, tu devrais pouvoir obtenir la page où se trouve ton texte.
    Il ne te reste plus qu'à imprimer de la page de début à la page de fin.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Pourquoi passer à la page suivante ?
    C'était la première idée qui m'est venu avec le morceau de code que j'ai trouvé.

    Citation Envoyé par Heureux-oli Voir le message
    Si tu fais une recherche sur tes deux termes, tu devrais pouvoir obtenir la page où se trouve ton texte.
    Il ne te reste plus qu'à imprimer de la page de début à la page de fin.
    Solution que j'essaie maintenant de mettre en place.
    Ne sachant pas s'il y a une méthode qui permet de la faire directement j'utilise le deuxième morceau de code que j'ai trouvé.
    Mais certaines fois, il me sort deux fois le première ou dernière page de mon document...

    Donc la question est : y'a t'il un moyen direct de lui dire "imprimer moi les pages x à y" ?

    Pour info, voilà le code :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    Sub ChercheEtPrint()
    Dim premierePage, dernierePage, i
     
        ' recherche de la première page à imprimer
        ActiveDocument.Range.Select
        Selection.HomeKey unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "1re partie"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
        End With
        premierePage = Selection.Information(wdActiveEndPageNumber)
     
        ' recherche de la derniere page à imprimer
        ActiveDocument.Range.Select
        Selection.HomeKey unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "3e partie"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
        End With
        dernierePage = Selection.Information(wdActiveEndPageNumber)
     
        ' impression de premierePage à dernierePage
        For i = premierePage To dernierePage
        SelectionPage (i)
        Application.PrintOut Range:=wdPrintCurrentPage
        Next i
     
    End Sub
    ' ----------------------------------------------------------------- 
    Sub SelectionPage(numPageSelection As Integer)
    ActiveDocument.Range.Select
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=numPageSelection + 1
    Selection.Move unit:=wdCharacter, Count:=-1
    nbligne = Selection.Information(wdFirstCharacterLineNumber)
    Selection.Move unit:=wdCharacter, Count:=1
    With Selection
        .HomeKey unit:=wdLine, Extend:=wdMove
        .ExtendMode = True
        .MoveUp unit:=wdLine, Count:=nbligne
        .ExtendMode = False
    End With
    End Sub

    Sinon, puisque je t'ai sous la main, question subsidiaire :
    Comment je déploie ma petite macro sur les postes utilisateurs ? Si possible, sans avoir à passer sur chaque poste.

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    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 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    J'avais déjà donné un code similaire, mais je ne parviens plus à le retrouver, alors je l'ai refait.

    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
    Sub ImprimerCertainesPages()
    Dim intDeb
    Dim intFin
     
    intDeb = 0
    intFin = 0
    Selection.HomeKey unit:=wdStory
     
    With Selection.Find
        .Text = "Première"
        .Execute
    End With
    intDeb = Selection.Information(wdActiveEndPageNumber)
    Selection.HomeKey unit:=wdStory
    With Selection.Find
        .Text = "Dernière"
        .Execute
    End With
    intFin = Selection.Information(wdActiveEndPageNumber)
     
    Debug.Print intDeb & "  -  " & intFin
     
    ActiveDocument.PrintOut Range:=wdPrintFromTo, From:=CStr(intDeb), to:=CStr(intFin)
     
     
    End Sub
    Pour copier la macro dans les documents situés sur le réseau,
    Un début de solution ici :http://word.developpez.com/faq/?page...emplacer_macro

    Et pour les pc sur le réseau, je te conseille l'utilisation de FileSystemObject

    http://warin.developpez.com/access/fichiers/

    Pour le faire, j'utilise une base de données Access avec le chemin de tous les postes et un case à cocher pour traiter ou pas ce poste.
    Je fais juste tourner sur tous les enregistrements et ouvre une connection ou pas suivant le choix.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    J'avais déjà donné un code similaire, mais je ne parviens plus à le retrouver, alors je l'ai refait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.PrintOut Range:=wdPrintFromTo, From:=CStr(intDeb), to:=CStr(intFin)
    Parfait ça marche nikel, Merci!!!

    Citation Envoyé par Heureux-oli Voir le message
    Pour copier la macro dans les documents situés sur le réseau,
    Un début de solution ici :http://word.developpez.com/faq/?page...emplacer_macro

    Et pour les pc sur le réseau, je te conseille l'utilisation de FileSystemObject

    http://warin.developpez.com/access/fichiers/

    Pour le faire, j'utilise une base de données Access avec le chemin de tous les postes et un case à cocher pour traiter ou pas ce poste.
    Je fais juste tourner sur tous les enregistrements et ouvre une connection ou pas suivant le choix.
    En sachant que ma macro doit être utilisée exclusivement par une autre appli et que je ne veux pas écraser normal.dot, je viens de tester une solution qui a l'air de fonctionner :
    - créer un modèle avec ma macro liée
    - le placer dans C:\Documents and Settings\Toto\Application Data\Microsoft\Word\DÉMARRAGE
    Ma macro est alors chargée à chaque ouverte de session et devient active directement sans manipulation !
    Pas d'objection sur cet emplacement ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    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 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Dans le lien que j'ai donné, on ne remplace pas la normal.dot, mais on y copie simplement le code.

    Maintenant, la solution d'un modèle dans le dossier de démarrage de Word est aussi une solution.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Dans le lien que j'ai donné, on ne remplace pas la normal.dot, mais on y copie simplement le code.

    Maintenant, la solution d'un modèle dans le dossier de démarrage de Word est aussi une solution.
    On reste sur la solution du modèle pour des questions de déploiement et de maintien/évolution. (J'avouerais que je n'ai pas eu le courage de me plonger dans le code fourni )


    Sinon après présentation au chef, une nouvelle demande apparaît : Est-il possible de monter à l'écran un nouveau document Word contenant la sélection pour ne pas l'imprimer directement ? ou alors faire un apercu avant impression ?

    Merci d'avance

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    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 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Le printpreview ne permet pas de visualiser une partie du document, mais son intégralité.

    Copier dans un nouveau document comporte pas mal de risque au niveau de la mise en page et le code est sensiblement différent.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Le printpreview ne permet pas de visualiser une partie du document, mais son intégralité.
    Effectivement, je viens de tester...

    Citation Envoyé par Heureux-oli Voir le message
    Copier dans un nouveau document comporte pas mal de risque au niveau de la mise en page et le code est sensiblement différent.
    Même si je n'ai réussi qu'à copier le document en entier, il est vrai que le paste colle le texte brut sans les images ou la mise en page...

    Autre piste peut être :
    - copier mon document
    - supprimer tout ce qui se trouve avant le texte "1ere partie"
    - supprimer tout ce qui se trouve après "3eme partie"
    Je vais chercher de ce côté en m'appuyant sur cette FAQ...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut
    Ayé !!! ça fonctionne

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Sub ChercheEtOuvre()
      ' ouvre un nouveau document de la page contenant "1re partie" à la page précédente contenant "3e partie"                     
     
    Dim AppWord As Word.Application
     
        ' recherche du premier caractere à imprimer
        ActiveDocument.Range.Select
        Selection.HomeKey unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "1re partie"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
        End With
     
        If Selection.Find.Found Then
            premiercaract = Selection.Range.Start
     
     
        Else
            premiercaract = 0
        End If
     
        ' recherche du dernier caractere à imprimer
        ActiveDocument.Range.Select
        Selection.HomeKey unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "3e partie"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
        End With
     
        If Selection.Find.Found Then
            derniercaract = Selection.Range.Start
            derniercaract = derniercaract - 1  'retour chariot
        Else
            derniercaract = 0
        End If
     
     
     
        ' impression du premierCaract à derniereCaract
        If derniercaract > 0 And premiercaract <= derniercaract Then
            ' ouvre Word
            Set AppWord = New Word.Application
            AppWord.ShowMe
            AppWord.Visible = True
            ' copie le contenu selectionnée dans un nouveau document
            AppWord.Documents.Add
            ActiveDocument.Range(premiercaract, derniercaract).Copy
            AppWord.Selection.PasteAndFormat (wdFormatOriginalFormatting)
     
        Else
            ' pas d'ouverture de doc
        End If
     
    End Sub
    En gras, la petite centaine de caractères qui fait la différence (et qui était bien cachée...). Résultat : Le texte voulu avec en prime la mise en page nickel ! Et voilà

    Merci Heureux-oli pour ton aide !

  11. #11
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    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 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Si tu n'a que du texte, tu devrais pouvoir y arriver, mais si tu as autre chose que du texte, tu vas te heurter à quelques difficultés.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Si tu n'a que du texte, tu devrais pouvoir y arriver, mais si tu as autre chose que du texte, tu vas te heurter à quelques difficultés.
    Il y a uniquement du texte et des tableaux normalement.
    J'ai essayé en intégrant une image, ça a l'air de fonctionner aussi.

    Par contre, les entetes et pieds de page ne sont pas copiés, mais c'est pas nécessaire dans mon cas.

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

Discussions similaires

  1. [VB]infos complémentaires pour l'impression d'une page excel avec vb
    Par Jacen dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 25/04/2006, 15h57
  2. Impression d'une page HTML dans un JTextPane
    Par sozie9372 dans le forum Composants
    Réponses: 1
    Dernier message: 06/12/2005, 03h22
  3. [C#] Impression de la page
    Par calinou dans le forum ASP.NET
    Réponses: 3
    Dernier message: 29/03/2005, 15h13
  4. [CR & VB.NET] Pb impression pied de page
    Par arno2000 dans le forum SDK
    Réponses: 2
    Dernier message: 07/03/2005, 09h13
  5. [VB6+API][Impression] Mise en page
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 06/09/2004, 17h11

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