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 :

Imprimer recto-verso / Taper # de page [WD-2003]


Sujet :

VBA Word

  1. #1
    Membre éclairé Avatar de Souriane
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2009
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2009
    Messages : 541
    Points : 758
    Points
    758
    Par défaut Imprimer recto-verso / Taper # de page
    Bonjour à tous!

    Je suis à mon premier message sur les forums mais ça fait au moins 200 lunes que je vous lis!

    J’ai une macro pour imprimer recto-verso (voir ci-dessous). J’ai un document d’admettons 100 pages qui a été imprimé en mode recto-verso.
    J’ai un coquille dans ce document alors, je veux réimprimer uniquement la page 51 et non pas tout le document.

    Comment puis-je modifier la macro de façon à ce qu’elle imprime la page active seulement et son « endos ». Par exemple, si je lance la macro sur la page 50, la page 49-50 sera imprimée recto-verso.

    Mes pages impaires sont toujours à droite donc 1-2, 3-4, 5-6, etc.

    Ma macro pour l’impression recto-verso complet :

    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
    Sub Imp_RectoVerso ()
     
    'Enregistre en mémoire l'imprimante active
    Dim strCurrentPrinter As String
        strCurrentPrinter = Application.ActivePrinter
     
    'Si un erreur tel "marge trop proche", va ignorer l'erreur
        On Error Resume Next ' ignore printing errors
    '_______________________________________________________
        
     
    'Même Imprimante mais avec settings RECTO-VERSO
        Application.ActivePrinter = "\\svmprtmain\I06383RV"
     
    'Lancement de l'impression
    Application.PrintOut Background:=True, Range:=wdPrintAllDocument
     
    '_______________________________________________________
     'Retour à l'imprimante par défaut
        Application.ActivePrinter = strCurrentPrinter 
        On Error GoTo 0 ' resume normal error handling
     
    End Sub

    GROS MERCI!!!!

    Souriane

  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 Souriane,

    On change de cambuse ??

    Le principe serait de travailler avec la page dans laquelle on se trouve.
    Pour récupérer le numéro de la page où le curseur se trouve, il faut utiliser un objet selection et la méthode information.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print Selection.Information(wdActiveEndPageNumber)
    Ensuite, il faut déterminer si c'est une page paire ou impaire, on peut le faire en divisant par deux le nombre obtenu.
    Il existe un opérateur qui renvoie le reste d'une division, si ce reste est = à 0, c'est que nous avons un nombre pair, si le reste est différent, c'est un nombre impair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub PageActive()
    Dim intPage As Integer
    intPage = Selection.Information(wdActiveEndPageNumber)
    If (intPage Mod 2) = 0 Then
        MsgBox "Pair"
    Else
        MsgBox "Impair"
    End If
    End Sub
    De là, il ne reste qu'à déterminer quelles pages imprimer.

    Si c'est un nombre pair, la page en cours et la précédente.
    Pour un impair, la page en cours et la suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub PageActive()
    Dim intPage As Integer
    intPage = Selection.Information(wdActiveEndPageNumber)
    If (intPage Mod 2) = 0 Then
        MsgBox "Pages à imprimer :" & intPage - 1 & " - " & intPage
    Else
        MsgBox "Pages à imprimer :" & intPage & " - " & intPage + 1
    End If
    End Sub
    Partant de là, il ne reste que l'impression à lancer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub PageActive()
    Dim intPage As Integer
    intPage = Selection.Information(wdActiveEndPageNumber)
    If (intPage Mod 2) = 0 Then
        ActiveDocument.PrintOut Range:=wdPrintFromTo, From:=CStr(intPage - 1), to:=CStr(intPage)
    Else
        ActiveDocument.PrintOut Range:=wdPrintFromTo, From:=CStr(intPage), to:=CStr(intPage + 1)
     
    End If
     
    End Sub
    L'argument pour les paramètre From To sont des chaînes de caractères, ce qui explique Cstr()

    Voilà.

  3. #3
    Membre éclairé Avatar de Souriane
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2009
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2009
    Messages : 541
    Points : 758
    Points
    758
    Par défaut
    Wow! Olivier, je suis impressionnée! Je ne croyais pas du tout qu’il soit possible de faire une telle macro. Tout le bureau a été fortement impressionné! Ici, on commence à parler de « l’Heureux Belge »!

    J’avoue que j’ai dû me référer à ma collègue Française pour savoir ce que signifiait « On change de cambuse »! Et oui, en effet, j’ai décidé de tenter ma chance sur DVP. C’est un site que j’aime beaucoup. Il est facile à consulter. Et je trouve qu’il y a plus une « âme » que les newsgroups. Je consultais les n.g. depuis près de 15 ans déjà. Mais il faut parfois qu’un vieux singe apprenne à faire des grimaces…

    Un très gros merci pour ton support. Toi comme les autres devez penser que je saute d’un problème à l’autre mais c’est que c’est mon travail à temps plein que de créer des macros et je ne suis que débutante-intermédiaire (plus débutante qu’intermédiaire, il me semble prafois!) Si l’internet n’était pas là, il y a déjà longtemps que j’aurais démissionné!

    Re-merci!!!!!

    Souriane

  4. #4
    Membre éclairé Avatar de Souriane
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2009
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2009
    Messages : 541
    Points : 758
    Points
    758
    Par défaut
    Bonjour!

    Longtemps plus tard, je viens documenter ce message car depuis, le code ci-dessus n'est pas tout à fait au point. Alors voici mon code complet pour référence future.

    Tout d'abord, le problème avec le code ci-dessus était le suivant :
    Si la numérotation des pages du document avait été modifiée, par exemple Débuter la numérotation des pages à partir de "3" au lieu de "1", la macro ne fonctionnait pas.

    Vous m'avez aider à la modifier comme suit:

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    ImpressionRectoVerso()
    'Macro créée par Souriane avec l'aide de Heureux-Oli, Septembre 2009
    'sur Developpez.net
     
    'Macro qui imprime la page encours plus son recto ou son verso selon si elle est paire ou impaire
     
    Dim intPageDebut As Integer
    Dim intPageActuel As Integer
     
    'Détermine quelle imprimante est actuellement par défaut afin de la remettre telle quelle à la fin de la macro.  J'ai créé un profil d'imprimante "normal" et un profil d'imprimante "Recto-verso" pour la même imprimante
    Dim strCurrentPrinter As String
    strCurrentPrinter = Application.ActivePrinter
     
    'Numéro de la page actuelle
    'Si la fonction ""Numérotation des pages... à partir de..."" a été utilisé
    'la variable utilisera le numéro attribué à cette page
    intPageActuel = Selection.Information(wdActiveEndAdjustedPageNumber)
     
     
    'Numéro de la première page du document
    'Si ""Numérotation des pages... à partir de...""
    'n'a PAS été utilisé, alors variable = 1, autrement variable = numéro attribué à la première page
     
    With ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).PageNumbers
       intPageDebut = .StartingNumber
    End With
     
    If intPageDebut = 0 Then
    intPageDebut = 1
    End If
     
    'Si il y a avis d'erreur tel "marge trop proche", va ignorer l'erreur et continuer la macro
        On Error Resume Next ' ignore printing errors
     
    'Sélectionne mon profil d'imprimante qui est en recto-verso
        ActivePrinter = "\\svmprtmain\I26048RV"
     
    'Vérifie si la première page du document est paire ou impaire
    If (intPageDebut Mod 2) = 0 Then
        '0 = paire
     
    'SI LA 1ERE PAGE DU DOCUMENT EST **PAIRE**, CECI:
     
        'Vérifie si la page active est paire ou impaire
     
            If (intPageActuel Mod 2) = 0 Then
     
            'Lancement d'impression
            'Si la page EN COURS du document est **paire**:
                    ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel), To:=CStr(intPageActuel + 1)
     
          Else
            'Si la page EN COURS du document est **impaire** :
                ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel - 1), To:=CStr(intPageActuel)
                'Page précédente + Page actuelle IMPAIRE
            End If
     
    Else
    'SI LA 1ERE PAGE DU DOCUMENT EST **IMPAIRE**, CECI:
     
        'Vérifie si la page active est paire ou impaire
     
            If (intPageActuel Mod 2) = 0 Then
     
            'Lancement d'impression
            'Si la page EN COURS du document est **paire**:
                'Page précédente + Page actuelle PAIRE
                ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel - 1), To:=CStr(intPageActuel)
     
     
            Else
            'Si la page EN COURS du document est **impaire** :
               'Page actuelle IMPAIRE + Page suivante
                ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel), To:=CStr(intPageActuel + 1)
     
            End If
    End If
     
    ' 'Retour à l'imprimante de départ i.e. le profil qui n'est pas "recto-verso"
        Application.ActivePrinter = strCurrentPrinter
        On Error GoTo 0 ' resume normal error handling
     
     
    End Sub
    Voilà! Si vous avez des commentaires, n'hésitez pas!

    Souriane

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

Discussions similaires

  1. Imprimer Recto verso
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/06/2009, 18h33
  2. Imprimer Recto Verso
    Par Rambotnic29 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/04/2009, 19h08
  3. Imprimer recto verso
    Par bullybone dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/09/2008, 18h28
  4. etat imprimé recto verso depuis access
    Par panro dans le forum IHM
    Réponses: 1
    Dernier message: 30/06/2008, 15h22
  5. [CR] Générer une page blanche pour imprimer en recto-verso
    Par PasHyperPon dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 02/04/2006, 19h06

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