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

Macros et VBA Excel Discussion :

[VBA Excel sur Word] Ajouter pied de page [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut [VBA Excel sur Word] Ajouter pied de page
    Bonjour le forum,

    Grace à l'aide du forum il y a quelque mois, j'étais parvenu à bricoler une macro (qui fonctionne très bien) qui me permet de créer un fichier Word à partir de mes zones d'impression définies.

    J'essaye maintenant d'ajouter un beau pied de page qui ressemble à ça : Nom : 2020-07-15 11_06_39-Démarrer.png
Affichages : 131
Taille : 5,7 Ko

    Je ne connais pas la méthode pour y parvenir. Je vais vous montrer ce que j'ai tenté (vers la fin de la macro)
    Le fichier qui lance la macro est utilisé par plusieurs utilisateurs (donc plusieurs pc)
    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
    Sub ET_Excel_to_word()
        On Error Resume Next
        Dim obj As Object, newObj As Object, sh As Worksheet, myFile$, n As Byte, nn As Byte, MonPDP As String, MonChemin As String, wdSeekCurrentPageFooter
     
    Application.ScreenUpdating = False
        Set obj = CreateObject("Word.Application")
        obj.Visible = True
        Set newObj = obj.Documents.Add
         With obj.Selection.PageSetup
            .TopMargin = (20)
            .LeftMargin = (20)
            .RightMargin = (20)
            .BottomMargin = (0)
            .HeaderDistance = (0)
            .FooterDistance = (15)
        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")).CopyPicture Appearance:=xlScreen, Format:=xlPicture
           With obj.Selection
                nn = newObj.InlineShapes.Count + 1
                While newObj.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
                .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")).CopyPicture Appearance:=xlScreen, Format:=xlPicture
            With obj.Selection
                nn = newObj.InlineShapes.Count + 1
                While newObj.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
                .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")).CopyPicture Appearance:=xlScreen, Format:=xlPicture
            With obj.Selection
                nn = newObj.InlineShapes.Count + 1
                While newObj.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
                .InsertBreak Type:=6
            End With
        End If
    Next
    ThisWorkbook.Worksheets("CGV").Range("CGV").CopyPicture Appearance:=xlScreen, Format:=xlPicture
        With obj.Selection
                nn = newObj.InlineShapes.Count + 1
                While newObj.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
        End With
     
     newObj.Sections(1).Footers(1).PageNumbers.Add (1)
     
        'obj.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
          ' PageNumberAlignment:=wdAlignPageNumberRight
     
    '!!!!!!!!!!! Ce que j'essaye d'ajouter !!!!!!!!!!!!
    MonChemin = VBA.Environ("UserProfile") & "\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Building Blocks.dotx"
    newObj.ActivePane.View.SeekView = wdSeekCurrentPageFooter
        newObj.Templates(MonChemin).BuildingBlockEntries("MCTM_PDP").Insert Where:=Selection.Range, RichText:=True
     
     
     
    '!!!!!!!!!!! La suite de la macro !!!!!                 
       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
     Application.ScreenUpdating = True
        MsgBox "Export vers Word terminé", vbInformation + vbOKOnly, "Export vers Word"
     
        obj.Activate
        Set obj = Nothing
        Set newObj = Nothing
    End Sub
    L'enregistreur de macro sur word m'a donné ce code, j'ai isolé le début du chemin pour que ça s'adapte en fonction de l'utilisateur.
    Ca fonctionne si je lance le bout de code par word, mais pas depuis excel.

    Je pensais à deux options :
    -Mettre le pied de page sur un dossier partager sur notre réseau (je ne sais pas comment faire)
    -réécrire dans la macro le pied de page directement (je ne sais pas comment faire non plus )

    Voilà voilà

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le pied de page doit-il être différent suivant critère ?
    Si pas, je passerais tout simplement par un modèle Word créé manuellement que j'ouvrirais depuis Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Le pied de page doit-il être différent suivant critère ?
    Si pas, je passerais tout simplement par un modèle Word créé manuellement que j'ouvrirais depuis Excel
    Bonjour Philippe,

    Non, il sera tout le temps identique.

    Tu peux me détailler un peu la manip et ce que j'aurai à changer dans mon code ?

    Si je comprend bien, je prépare un modèle que j'enregistre dans un dossier partagé.
    Ensuite à la place de générer un nouveau fichier word, j'ouvre le modèle.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Anthony,
    Voici un exemple de l'ouverture d'un nouveau document Word, basé sur un modèle, ici nommé myTemplate.docx se trouvant dans un sous-répertoire nommé Template
    Pour que cette procédure fonctionne, il faut référencer la bibliothèque Microsoft Word nn.n Object Library soit pour Office 2010, Microsoft Word 14.0 Object Library

    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
    Sub OpenWordTemplate()
      ' Nécessite de référencer Microsoft Word nn.n Object Library
      ' Déclaration
      Const SubFolder As String = "Template"            ' Sous-répertoire où se trouve le modèle
      Const TemplateName As String = "myTemplate.docx"  ' Nom du modèle
      Dim appWrd As Word.Application
      Dim wrdDoc As Word.Document
      Dim appPath As String, wrdFullName As String
      '
      appPath = ThisWorkbook.Path
      wrdFullName = appPath & "\" & SubFolder & "\" & TemplateName
      Set appWrd = CreateObject("Word.Application")
      '
      With appWrd
       Set wrdDoc = .Documents.Add(Template:=wrdFullName)  ' Ouvre un nouveau docment basé sur un modèle
      .Visible = True                                      ' Rend visible l'application
      .Activate                                            ' Active l'application
      End With
      ' Fin de procédure
      Set appWrd = Nothing: Set wrdDoc = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Je suis parvenu à adapter ton code, ça fonctionne très bien !

    Je m'étais juste fait avoir par le appPath qui supposait que le modèle soit dans le même dossier que le fichier Excel.

    Comme les utilisateurs ne seront pas toujours connectés au serveur, j'effectue un test pour changer de chemin et chercher le modèle sur leur bureau.

    Comme je sens que ça va arriver, j'ai prévu le cas où ils ne sont pas connectés au serveur et le fichier sur leur bureau n'existe plus.

    Peut-tu me dire si tout te parait bon ou si quelque chose de choque dans mon code (procédure, variable, autre)
    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
    Sub ET_Excel_to_word()
    On Error Resume Next
    Dim myFile$, n As Byte, nn As Byte, appWrd As Word.Application, wrdDoc As Word.Document, wrdFullName As String, MyPath, Chemin$, TemplateName$
    Application.ScreenUpdating = False
     
    TemplateName = "Pied de page.docx" ' Nom du modèle
    Chemin = "\\srv-dom\Commun\Transfert - Partage\Anthony - Ne pas supprimer\Devis\" ' Sous-répertoire où se trouve le modèle
    MyPath = Dir(Chemin & TemplateName)
    If MyPath = "" Then
    Chemin = VBA.Environ("UserProfile") & "\desktop\"
    End If
    MyPath = Dir(Chemin & TemplateName)
    If MyPath = "" Then
    Set appWrd = CreateObject("Word.Application")
    appWrd.Visible = True
    Set wrdDoc = appWrd.Documents.Add
    MsgBox "Attention les pieds de page n'ont pas été chargés"
    GoTo ajoutpage
    End If
     
    wrdFullName = Chemin & TemplateName
    Set appWrd = CreateObject("Word.Application")
    With appWrd
        Set wrdDoc = .Documents.Add(Template:=wrdFullName)  ' Ouvre un nouveau docment basé sur un modèle
        .Visible = True                                      ' Rend visible l'application
        .Activate                                            ' Active l'application
    End With
     
    ajoutpage:
    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")).CopyPicture Appearance:=xlScreen, Format:=xlPicture
            With appWrd.Selection
                nn = wrdDoc.InlineShapes.Count + 1
                While wrdDoc.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
                .InsertBreak Type:=6
            End With
            '.PasteSpecial Link:=True, DataType:=wdPasteBitmap, Placement:=wdInLine, DisplayAsIcon:=False
            '.PasteSpecial Link:=True, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine, DisplayAsIcon:=False
        End If
    Next
    For n = 1 To 15
        If exist("Descriptif", "page_" & Format(n, "00")) Then
         ThisWorkbook.Worksheets("Descriptif").Range("page_" & Format(n, "00")).CopyPicture Appearance:=xlScreen, Format:=xlPicture
            With appWrd.Selection
                nn = wrdDoc.InlineShapes.Count + 1
                While wrdDoc.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
                .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")).CopyPicture Appearance:=xlScreen, Format:=xlPicture
            With appWrd.Selection
                nn = wrdDoc.InlineShapes.Count + 1
                While wrdDoc.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
                .InsertBreak Type:=6
            End With
        End If
    Next
    ThisWorkbook.Worksheets("CGV").Range("CGV").CopyPicture Appearance:=xlScreen, Format:=xlPicture
        With appWrd.Selection
                nn = wrdDoc.InlineShapes.Count + 1
                While wrdDoc.InlineShapes.Count < nn: DoEvents: .Paste: Wend 'en attente de l'exécution
        End With
     
    'newObj.Sections(1).Footers(1).PageNumbers.Add (1) 'option 1
    'appWrd.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.AddPageNumberAlignment:=wdAlignPageNumberRight 'option 2
    'MonChemin = VBA.Environ("UserProfile") & "\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Building Blocks.dotx" 'option 3
    'appWrd.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    'appWrd.Templates(MonChemin).BuildingBlockEntries("MCTM_PDP").Insert Where:=Selection.Range, RichText:=True
     
    Application.CutCopyMode = False
    myFile = Replace(ActiveWorkbook.Name, "xlsm", "docx")   'remplacer "docx" par l'extension qui convient, si nécessaire
    wrdDoc.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & myFile
     
    appWrd.Activate
    Set appWrd = Nothing
    Set wrdDoc = Nothing
    Application.ScreenUpdating = True
    MsgBox "Export vers Word terminé", vbInformation + vbOKOnly, "Export vers Word"
    End Sub
    Merci beaucoup

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour rendre pérenne une application, je privilégie toujours les sous-dossiers ce qui permet de déplacer l'ensemble d'un dossier vers n'importe quel endroit du réseau.
    Parmi les sous-dossiers, j'en ai un nommé Config qui contient entre autres un ou plusieurs fichiers suffixés Ini donc si l'adresse esr différente par utilisateur, je choisi de définir ces chemins dans un fichier ini du nom de l'utilisateur et qui contient donc les chemins propres à chaque utilisateur
    Il faut éviter de "Hard coder" afin de maintenir aisément l'application
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [XL-2016] Mise en page/export Excel sur Word
    Par Anthony47 dans le forum Macros et VBA Excel
    Réponses: 30
    Dernier message: 19/08/2019, 14h11
  2. WORD : Ajouter une nouvelle page
    Par salrouge dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/06/2007, 10h17
  3. Pb de chemin en VBA excel sur tableau croisé dynamique
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2007, 14h23
  4. [VBA-E] Insertion d'un pied de page dans Word
    Par fred bx dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2006, 12h49
  5. Réponses: 3
    Dernier message: 09/04/2006, 09h10

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