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 :

Ajouter numéro de page en pied de page sur Word


Sujet :

VBA Word

  1. #1
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut Ajouter numéro de page en pied de page sur Word
    Bonjour à tous !

    Depuis un fichier Excel, j'ai une macro qui me génère un fichier Word qui va bien.

    A la fin de la macro, j'aimerais ajouter quelque ligne pour ajouter le numéro de page en pied de page sur le Word généré.

    Voici la macro :

    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
    Function exist(feuille As String, nom As String) As Boolean
    exist = False
    On Error Resume Next
        x = Sheets(feuille).Range(nom).Address
        If Err.Number = 0 Then exist = True
    On Error GoTo 0
    End Function
     
    Sub export_excel_to_word()
        Dim obj As Object
        Dim newObj As Object
        Dim sh As Worksheet
        Dim myFile
     
     
        Set obj = CreateObject("Word.Application")
        obj.Visible = True
        Set newObj = obj.Documents.Add
    ' obj.Selection.ParagraphFormat.LeftIndent = (20)
          With obj.Selection
            .PageSetup.TopMargin = (20)
            .PageSetup.LeftMargin = (17.5)
            .PageSetup.RightMargin = (20)
            .PageSetup.BottomMargin = (0)
        End With
     
    For n = 1 To 3
        If exist("En_tête", "page_" & Format(n, "00")) Then
         ThisWorkbook.Worksheets("En_tête").Range("page_" & Format(n, "00")).Copy
            With obj.Selection
            .PasteSpecial Link:=True, DataType:=wdPasteBitmap, _
          Placement:=wdInLine, DisplayAsIcon:=False
         '   .PasteSpecial Link:=True, DataType:=wdPasteEnhancedMetafile, _
          '  Placement:=wdInLine, DisplayAsIcon:=False
            .InsertBreak Type:=6
            End With
         End If
    Next
     
    For n = 1 To 15
        If exist("Descriptif", "page_" & Format(n, "00")) Then
         ThisWorkbook.Worksheets("Descriptif").Range("page_" & Format(n, "00")).Copy
            With obj.Selection
            .PasteSpecial Link:=True, DataType:=wdPasteBitmap, _
          Placement:=wdInLine, DisplayAsIcon:=False
            .InsertBreak Type:=6
            End With
        End If
    Next
     
    For n = 1 To 5
        If exist("Carac_tech", "page_" & Format(n, "00")) Then
         ThisWorkbook.Worksheets("Carac_tech").Range("page_" & Format(n, "00")).Copy
            With obj.Selection
            .PasteSpecial Link:=True, DataType:=wdPasteBitmap, _
          Placement:=wdInLine, DisplayAsIcon:=False
            .InsertBreak Type:=6
            End With
        End If
    Next
     
         ThisWorkbook.Worksheets("CGV").Range("CGV").Copy
        obj.Selection.PasteSpecial Link:=True, DataType:=wdPasteBitmap, _
          Placement:=wdInLine, DisplayAsIcon:=False
     
         'Worddoc.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
            'PageNumberAlignment:=wdAlignPageNumberRight
     
       Application.CutCopyMode = False
        myFile = Replace(ActiveWorkbook.Name, "xlsm", "docx")   'remplacer "docx" par l'extension qui convient, si nécessaire
        newObj.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & myFile
     
        MsgBox "Export vers Word terminé", vbInformation + vbOKOnly, "Export vers Word"
     
        obj.Activate
        Set obj = Nothing
        Set newObj = Nothing
    End Sub
    Voilà, si vous savez comment faire, merci

    PS : Vous voyez, j'ai tenté ce bout de code trouvé sur le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Worddoc.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
    'PageNumberAlignment:=wdAlignPageNumberRight
    Mais évidement ça fonctionne pas, il faut déclarer le WordDoc et ça je sais pas faire.

  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 Anthony47 Voir le message
    PS : Vous voyez, j'ai tenté ce bout de code trouvé sur le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Worddoc.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
    'PageNumberAlignment:=wdAlignPageNumberRight
    Mais évidement ça fonctionne pas, il faut déclarer le WordDoc et ça je sais pas faire.
    Dans ta macro, le document Word est référencé par la variable newObj.

    C'est donc elle qu'il faut utiliser comme référence de document pour appliquer le pied de page.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Ah oui d'accord, j'ai tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         newObj.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
            PageNumberAlignment:=wdAlignPageNumberRight
    Mais ça me dit : Le membre de la collection requis n'existe pas

  4. #4
    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,

    Si ta macro est dans Excel, tu ne peux pas utiliser seulement les noms des constantes de Word. Ta macro Excel doit avoir la valeur numérique de la constante.

    Soit que tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Const wdAlignPageNumberRight = 2
     newObj.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
            PageNumberAlignment:=wdAlignPageNumberRight
    ou tu le mets directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    newObj.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
            PageNumberAlignment:=2
    Et c'est vrai pour toutes les constantes dans tous les cas de pilotage.
    À 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.

  5. #5
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Bonjour clementmarcotte,

    Merci pour ton aide, je pense en effet que ça doit être lié à ce que tu dis, mais je n'ai pas les connaissances nécessaire pour y arriver de moi même.

    En tout cas j'ai essayé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Const wdAlignPageNumberRight = 2
     newObj.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
            PageNumberAlignment:=wdAlignPageNumberRight
    Et ça me dit propriété ou méthode non géré par cet objet si j'utilise Obj
    et Le membre de la collection requis n'existe pas si j'utilise NewObj

    Idem pour ta deuxième solution.

    Est-ce que ça viendrait pas de ce Sections(1) ?

  6. #6
    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,

    Oups !! j'ai oublié, c'est le même problème avec wdHeaderFooterPrimary

    Et cela arrive, que OLE ne supporte pas non plus les paramètres nommés. (Second problème, si on peut dire.)



    Essaie à l'ancienne mode :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newObj.Sections(1).Footers(1).PageNumbers.Add(2)
    À 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.

  7. #7
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Top ça fonctionne !

    Comment tu sais par quel numéro tu dois le remplacer ?

    Du coup ça me génère aussi un entête vide et ça j'en veux pas, ça décale mes éléments vers le bas.

    Possible de diminuer la hauteur de l'entête à 0 ?

    L'enregisteur de macro word me donne ç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
    21
    22
    23
    24
    25
     With Selection.PageSetup
            .LineNumbering.Active = False
            .Orientation = wdOrientPortrait
            .TopMargin = CentimetersToPoints(0.71)
            .BottomMargin = CentimetersToPoints(0)
            .LeftMargin = CentimetersToPoints(0.62)
            .RightMargin = CentimetersToPoints(0.71)
            .Gutter = CentimetersToPoints(0)
            .HeaderDistance = CentimetersToPoints(0.1)
            .FooterDistance = CentimetersToPoints(1.25)
            .PageWidth = CentimetersToPoints(21)
            .PageHeight = CentimetersToPoints(29.7)
            .FirstPageTray = wdPrinterDefaultBin
            .OtherPagesTray = wdPrinterDefaultBin
            .SectionStart = wdSectionNewPage
            .OddAndEvenPagesHeaderFooter = False
            .DifferentFirstPageHeaderFooter = False
            .VerticalAlignment = wdAlignVerticalTop
            .SuppressEndnotes = False
            .MirrorMargins = False
            .TwoPagesOnOne = False
            .BookFoldPrinting = False
            .BookFoldRevPrinting = False
            .BookFoldPrintingSheets = 1
            .GutterPos = wdGutterPosLeft
    Je pense que c'est le HeaderDistance

    Mais je sais pas l'inclure à la suite de ton code

    NB : J'ai trouvé, je l'ai mis à la suite de mon code tout au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With obj.Selection
            .PageSetup.TopMargin = (20)
            .PageSetup.LeftMargin = (17.5)
            .PageSetup.RightMargin = (20)
            .PageSetup.BottomMargin = (0)
            .PageSetup.HeaderDistance = (0)

  8. #8
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Tu sais si c'est possible d'avoir Nb page/Nb total de page : 3/6

  9. #9
    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,


    Citation Envoyé par Anthony47 Voir le message
    Top ça fonctionne !

    Comment tu sais par quel numéro tu dois le remplacer ?
    Ils sont sur MSDN

    Sans garantir que la méthode est infaillible, parce que des fois, il faut fouiller plus longtemps. J'utilise Bing !, mais cela devrait marcher avec Google. (Bing! me donne des points de Microsoft)

    Je lui met en pâture :

    MSDN le nom de la constante. Et généralement on trouve le lien dans les premiers résultats

    Cela a été plus rapide pour wdAlignPageNumberRight. Pour l'autre cela a été plus long.

    Nom : msdn1.jpg
Affichages : 366
Taille : 154,8 Ko

    Nom : msdn2.jpg
Affichages : 337
Taille : 144,6 Ko

    Tu sais si c'est possible d'avoir Nb page/Nb total de page : 3/6
    Oui c'est possible.
    À 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.

  10. #10
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Ah d'accord je comprend mieux, même si je pense pas être capable de savoir quand remplacer le texte par les numéros, au moins si j'ai un numéro associer à une fonction je pourrais trouver par quoi le modifier

    En passant par l'enreugistreur de maccro, j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
            ActiveWindow.Panes(2).Close
        End If
        If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then
            ActiveWindow.ActivePane.View.Type = wdPrintView
        End If
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
        Application.Templates( _
            "C:\Users\FRED\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Built-In Building Blocks.dotx" _
            ).BuildingBlockEntries("Numéros en gras 3").Insert Where:=Selection.Range _
            , RichText:=True
    On est loin de ton petit newObj.Sections(1).Footers(1).PageNumbers.Add (2)

  11. #11
    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
    L'enregistreur de macro est un très bon outil à condition de ne pas utiliser directement le code fourni mais de prendre le temps de l'analyser en s'aidant de l'aide en ligne de VBA.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  12. #12
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Oui on est d'accord ^^

    Ce que je comprend de mon analyse c'est que ça c'est la partie utile du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
        Application.Templates( _
            "C:\Users\FRED\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Built-In Building Blocks.dotx" _
            ).BuildingBlockEntries("Numéros en gras 3").Insert Where:=Selection.Range _
            , RichText:=True
    Après je sais pas comment transformer ça en newObj.Sections(1).Footers(1).PageNumbers.Add (#?)

Discussions similaires

  1. [Beamer] Insérer Numéro de page sur certains slides
    Par darkman19320 dans le forum Beamer
    Réponses: 0
    Dernier message: 08/09/2010, 17h22
  2. Numéro de page sur Word 2000
    Par vrirere dans le forum Word
    Réponses: 2
    Dernier message: 15/02/2009, 23h42
  3. Suppression des numéros de page sur le sommaire
    Par jozog47 dans le forum Mise en forme
    Réponses: 10
    Dernier message: 30/12/2007, 09h19
  4. Réponses: 5
    Dernier message: 22/09/2007, 10h44
  5. Pas de numéro de page sur la première page (titre)
    Par szdavid dans le forum Mise en forme
    Réponses: 3
    Dernier message: 12/08/2005, 11h29

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