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 :

Code VBA du numéro de page [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut Code VBA du numéro de page
    Bonjour,

    J'ai créé une mini-macro juste pour insérer le numéro de page dans mon document Word 2010. Je voulais reprendre cette macro dans un projet VB6 distribuable, mais la macro générée fait référence à un dossier de mon disque dur ! N'y a-t-il pas un moyen d'insérer un numéro de page plus simplement en VBA ?

    Voici la macro générée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Application.Templates( _
            "C:\Users\Jacques\AppData\Roaming\Microsoft\Document Building Blocks\1036\14\Built-In Building Blocks.dotx" _
            ).BuildingBlockEntries("Numéro normal").Insert Where:=Selection.Range, _
            RichText:=True
    Merci d'avance de vos retours.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack554 Voir le message
    Bonjour,

    A tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub MiseEnPlaceDuNumeroDePage()
     
    Dim I As Integer
     
            With ActiveDocument
                 For I = 1 To .Sections.Count
                     With .Sections(I).Footers(wdHeaderFooterPrimary)
                          .PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberRight  ' A adapter
                     End With
                 Next I
            End With
     
    End Sub

  3. #3
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Merci Eric, mais cela ne donne rien.

    En fait, voici le code généré dans la macro Word pour mon entête complète, code que j'ai inséré dans mon projet VB6 et qui fonctionne très bien, à part le problème soulevé dans ce post (accès à un dossier de mon PC). J'ai mis en commentaire la ligne concernant ce n° de page. Et donc, ajouté à la fin tes 7 lignes de 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
      '--- Définit l'entête du document ---
      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 = wdSeekCurrentPageHeader
      Selection.TypeText Text:=Prog$ & vbTab & vbTab & _
          "Page : "
    '  Application.Templates( _
    '      "C:\Users\Jacques\AppData\Roaming\Microsoft\Document Building Blocks\1036\14\Built-In Building Blocks.dotx" _
    '      ).BuildingBlockEntries("Numéro normal").Insert Where:=Selection.Range, _
    '      RichText:=True
      Selection.TypeParagraph
      Selection.TypeText Text:="Auteur : J. Vieillescaze" & vbTab & vbTab
      Selection.InsertDateTime DateTimeFormat:="dd/MM/yyyy", InsertAsField:= _
          False, DateLanguage:=wdFrench, CalendarType:=wdCalendarWestern, _
          InsertAsFullWidth:=False
      Selection.TypeParagraph
      Selection.TypeText Text:=vbTab & vbTab
      Selection.InsertDateTime DateTimeFormat:="HH:mm:ss", InsertAsField:=False, _
          DateLanguage:=wdFrench, CalendarType:=wdCalendarWestern, _
          InsertAsFullWidth:=False
      Selection.TypeParagraph
      Selection.TypeText Text:=vbTab & NomTournoi$
      Selection.TypeParagraph
      Selection.TypeText Text:=vbTab & "LISTE DES TABLES DE LA MANCHE " & IndM
      Selection.TypeParagraph
      Selection.TypeText Text:=vbTab & "(triée par n° de joueur)"
      Selection.TypeParagraph
      ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
     
      With ActiveDocument
        For I = 1 To .Sections.Count
          With .Sections(I).Footers(wdHeaderFooterPrimary)
            .PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberRight  ' A adapter
          End With
        Next I
      End With
    Voici maintenant l'entête générée actuellement :

    Nom : entete.jpg
Affichages : 1538
Taille : 19,6 Ko

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack554 Voir le message
    Il faut utiliser Headers et non Footers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                     With .Sections(I).Headers(wdHeaderFooterPrimary)
                          .PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberRight
                     End With

  5. #5
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Oups, désolé, je n'avais pas remarqué ça.

    Du coup j'ai changé d'idée, enlevé le numéro de page dans l'entête et laissé "Footers" afin qu'il me crée un pied de page juste avec le numéro de page.

    Cela fonctionne très bien, merci beaucoup.

    Dernière question : est-il possible d'afficher "Page xx" et non juste le numéro ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack554 Voir le message
    Dernière question : est-il possible d'afficher "Page xx" et non juste le numéro ?
    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                     With .Sections(I).Footers(wdHeaderFooterPrimary)
                          .Range.ParagraphFormat.Alignment = wdAlignParagraphRight
                          .Range.Text = "Page " & .Range.Information(wdActiveEndPageNumber)
                          '.PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberRight
                     End With

  7. #7
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Eh non, malheureusement on a "Page 1" sur toutes les pages

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack554 Voir le message
    Eh non, malheureusement on a "Page 1" sur toutes les pages
    Deux possibilités (Attention, le code efface tout le pied de page au départ, donc à adapter).

    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
     
    Sub MiseEnPlaceDuNumeroDePage2()
     
    Dim I As Integer
     
        With ActiveDocument
             For I = 1 To .Sections.Count
                 With .Sections(I).Footers(wdHeaderFooterPrimary)
                      .Range.Delete
                      .Range.Text = "Page"
                      .PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberRight
                      .Range.ParagraphFormat.Alignment = wdAlignParagraphRight
                 End With
             Next I
        End With
     
    End Sub

    Avec le code précédent, l'espace entre "Page" et le numéro est assez inesthétique; c'est dû à la présence du cadre autour du numéro de page.

    Pour supprimer ce cadre : (Il doit y avoir plus simple).

    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
     
    Sub MiseEnPlaceDuNumeroDePage()
     
    Dim I As Integer
     
            With ActiveDocument
                 For I = 1 To .Sections.Count
                     With .Sections(I).Footers(wdHeaderFooterPrimary)
                          .Range.Delete
                          With .PageNumbers
                               .Add PageNumberAlignment:=wdAlignPageNumberRight
                               .Item(1).Select
                          End With
                          With Selection
                               .Frames.Delete
                               .HomeKey unit:=wdLine
                               .Range.Text = "Page "
                               .ParagraphFormat.Alignment = wdAlignParagraphRight
                               .EndKey unit:=wdLine
                               .MoveDown unit:=wdLine, Count:=1, Extend:=True
                               .Delete
                          End With
                     End With
                 Next I
            End With
     
    End Sub

  9. #9
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Alors là, respect, on est loin du Basic de base y=2*x : print y !!!!!!!!!!!!

    Cela fonctionne bien, bravo, sauf qu'on arrive en visualisation en mode brouillon :

    Nom : w.jpg
Affichages : 1601
Taille : 95,6 Ko

    Comment repasser en mode normal ?

    A noter, pour pouvoir exécuter plusieurs fois la routine, j'ai dû préfixer "ActiveDocument" et "Selection" par mon objet Word (oWord)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack554 Voir le message
    Il faudrait créer une macro et réaliser la manip pour revenir en mode normal, et intégrer le code dans la macro le cas échéant.
    Nb : Je n'ai pas ce problème sur mon document.

  11. #11
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    J'ai trouvé le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      '--- Repasse en mode Normal
      If oWord.ActiveWindow.View.SplitSpecial = wdPaneNone Then
        oWord.ActiveWindow.ActivePane.View.Type = wdPrintView
        Else
        oWord.ActiveWindow.View.Type = wdPrintView
      End If
    Je l'ai collé dans mon projet, mais tout à la fin, ce qui tend à montrer que ce sont en effet d'autres manipulations qui passaient le document en mode brouillon.

    Tout cela est très compliqué mais fonctionne.

    Je vais m'amuser avec une ancienne version de Word pour voir (car je ne sais pas de quelle version disposent mes utilisateurs)

    MERCI beaucoup pour tout et bonne journée, je clos le sujet.

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

Discussions similaires

  1. [VBA-W]Récupérer le numéro de page
    Par perdix dans le forum VBA Word
    Réponses: 4
    Dernier message: 31/07/2007, 09h54
  2. [VBA-W]Numéro de page, mise en page...
    Par AlainTech dans le forum VBA Word
    Réponses: 4
    Dernier message: 02/03/2007, 14h32
  3. [VBA-E]Numéro de page 1/X
    Par MJMJ dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/04/2006, 18h56
  4. [VBA-W]Numéro de page des titres d'un document Word
    Par bonigo dans le forum VBA Word
    Réponses: 9
    Dernier message: 07/04/2006, 18h22
  5. [VBA-E] Numéro de page
    Par franckh99 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/03/2006, 18h04

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