Creation de signet en VBA et affection données Excel pour publipostage

Bonjour,

Je suis en train de développer une petite application sous Excel.

Mais là je bloque. Voici mon problème.

J'ai réussi a générer dans un document word un tableau avec un certain formatage.

J'ai une feuille excel qui me sert de base données. Je veux faire un publipostage sur le document word généré. J'ai réussi a lié celui-ci à ma base Excel mais après je bloque. Je voudrais insérer dans certaines cases de mon tableau Word les données de mon tableau excel.

Je voudrais préciser que je ne veux pas mettre de signet manuellement dans mon doc mais que cela soit automatisé en vba.

J'ai cherché sur le web mais j'ai du mal à lancer la procédure...

Voici la partie de mon code concerné :

'------------------------------------------------
'Creation du document Word et copie gabarit Excel
'------------------------------------------------

DL = Worksheets(FeuilleGab & " GAB").Cells(Application.Rows.Count, 2).End(xlUp).Row + 4

sUrlFichierWord = Chemin & NomFichierWord

'Definition du fichier word
Set wdDoc = appWD.Documents.Open(sUrlFichierWord)

'Mise en page du document Word
With appWD.Documents(sUrlFichierWord).PageSetup
 .LeftMargin = 15
 .RightMargin = 15
 .TopMargin = 15
 .BottomMargin = 10
'.FitToPages
End With

'Copie du gabarit excel vers le document word
With Worksheets(FeuilleGab & " GAB")
    Range(.Cells(1, 2), .Cells(DL, 12)).Copy 'Picture
End With

appWD.Selection.PasteAndFormat Type:=16 'wdFormatOriginalFormatting
wdDoc.Tables(1).AutoFitBehavior 1 ' wdautoFitWindow
Application.CutCopyMode = False

'-----------------------------------------------
' On va chercher les donnees de la feuille Excel
'-----------------------------------------------

FeuilleSourceData = Chemin & ThisWorkbook.Name

wdDoc.MailMerge.OpenDataSource Name:=FeuilleSourceData, ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, Format:=0, _
    Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=FeuilleSourceData;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry ", _
    SQLStatement:="SELECT * FROM `'" & FeuilleBDD & "$'`", SQLStatement1:="", SubType:=1
    

Je mets également a disposition un exemple de chaque fichier. Merci a tous ceux qui voudront se pencher sur mon problème.

En gros, je veux créer et positionner des signets dans mon tableau word pointant sur les entetes de ma feuille excel, tout cela en vba.

Comme cela je lancerai ma commande .MailMerge.Execute

Est-ce possible ?

57classeur1.xlsx (14.34 Ko)

Après quelques heures de réflexion . J'ai enfin trouvé la solution a mon problème. Je la partage pour ceux qui bloque sur le même sujet.

Mon tableau excel est dynamique donc il peut avoir un nombre aleatoir de colonnes.

L'idée est de générer des signets que l'on va inserer dans un tableau de variables et que l'on va utiliser dans le document word comme ceci:

'On crée les libellés des signets pour l'ensemble des colonnes de notre BDD
For nn = 1 To DC_BDD ' DC_BDD etant la dernière colonne de ma feuille excel
    'je génère mon signet en otant tous les caracteres superflus
    Signet = ""
    Signet = VBA.Replace(Worksheets(FeuilleBDD).Cells(1, nn).Value, "(", "")
    Signet = VBA.Replace(Signet, ")", "")
    Signet = VBA.Replace(Signet, "/", "")
    Signet = VBA.Replace(Signet, VBA.Chr(10), " ")
    Signet = VBA.Replace(Signet, " - ", "__")
    Signet = VBA.Replace(Signet, " ", "_")
    Signet = VBA.Left(Signet, 39) ' j'ai remarqué que tous les signets ne depasse jamais 39 caracteres
    Signet = VBA.Replace(Signet, ".", "")
    'MsgBox Signet
    'Je mets le libellé de mon signet dans le tableau à la même position
    MonTableau(nn - 1) = Signet
    'Je récupère mes positions importantes pour la suite
    If Signet = "MOY_UE1" Then posTabMoyUE1 = nn - 1
    If Signet = "MOY_UE2" Then posTabMoyUE2 = nn - 1
    If Signet = "MOY_UE3" Then posTabMoyUE3 = nn - 1
    If Signet = "MOY_UE4" Then posTabMoyUE4 = nn - 1
    If Signet = "MOY_UE5" Then posTabMoyUE5 = nn - 1
Next nn 

En suite il suffit juste de positionner le bon signet de mon tableau de variables dans la bonne case de mon tableau Word.

Si mes lignes Word sont dynamiques également alors je crée une boucle For:

For nn = 7 To posTabMoyUE1 - 1
    wdDoc.MailMerge.Fields.Add Range:=wdDoc.Tables(1).Cell(ligne, 4).Range, Name:=MonTableau(nn)
    ligne = ligne + 1
    nn = nn + 1
Next nn

...etc...

et le tour est joué.

Rechercher des sujets similaires à "creation signet vba affection donnees publipostage"