VBA: bug publipostage piloté par excel

Résolu/Fermé
Tikazor Messages postés 17 Date d'inscription vendredi 17 juillet 2020 Statut Membre Dernière intervention 28 août 2020 - Modifié le 28 août 2020 à 11:33
Tikazor Messages postés 17 Date d'inscription vendredi 17 juillet 2020 Statut Membre Dernière intervention 28 août 2020 - 28 août 2020 à 11:50
Bonjour,



Je fonctionne sous windows 10, avec Microsoft excel 2010. A l'aide de tuto vidéo, j'ai créée un fichier excel qui me permettait via d'une base de donnée externe( fichier excel) de publiposter sur un word préconçu. Le code a fonctionné sans erreur manifeste. Depuis je n'ai pas souvenir d'avoir modifié le code.

Aujourd'hui lors de la réutilisation du pilotage, une demande de sauvegarde de la BDD a été demandé, ce qui n'était pas le cas avant et la création des documents word ne s'est pas fait. Je n'ai eu aucun retour d'erreur de l'exécution du code.
J'aimerai savoir quelle manipulation faire pour le refaire fonctionner correctement (dysfonctionnement d'excel, de windows, du pc)?



Voici le code:

Sub Publipostage()
'activer microsoft word object library
'constante fichier
Const FIC_NAME = "C:\Users\Utilisateur\Desktop\Formation OPCO\OPCOsignet.docx"
Const DATA_SOURCE = "FormationOpco.xlsm"

'constantes d'index colonne

Const IDX_Action = 3
Const IDX_AAA = 14
Const IDX_Apprenant = 37
Const IDX_Auteur = 10
Const IDX_Cesper = 13
Const IDX_Commentaire = 42
Const IDX_Competence = 16
Const IDX_Consignes = 23

'(.....etc 32 signets en tout)
                   
               
'variable objet word

Dim appWord As Word.Application
Dim wordDocModele As Word.Document
'déclaration variable des signets
Dim bkm As Word.Bookmark
'variable objet excel
Dim wkb As Workbook
Dim sh As Worksheet
'autres variables
Dim sFicName As String ' construire le nom de la lettre
Dim iNumLigne As Integer 'index pour controler la ligne courante
Dim iTailleBDD As Integer 'enregistre le nombre de lignes de la BDD
Dim sCodeData As String
Dim sProg As String


'démarrer word
'on garde une référence à l'instance word dans la variable appWord

Set appWord = New Word.Application

'rendre word visible (il est masqué par défaut)

appWord.Visible = True

'on charge la base donnée
'nota bene: thisworkbook.path renvoi le répertoire ou se situe l'application
Set wkb = Workbooks.Open(ThisWorkbook.Path & "\" & DATA_SOURCE)
Set sh = wkb.Worksheets("Contacts")

'calculer la taille de la BDD
iTailleBDD = sh.Range("A1").CurrentRegion.Rows.Count

' on initialise à
iNumLigne = 2 ' car 1 est la ligne du titre

' on parcourt la base de donnée
Do While iNumLigne <= iTailleBDD
'on lit le nom du programme
sProg = sh.Cells(iNumLigne, IDX_Programme)
' on traite les données seulement de cette valeur
If sProg = "OPCO" Then

'on ouvre le modèle de fiche word, charger un document
Set wordDocModele = appWord.Documents.Open(FIC_NAME)

'comme le doc word cible est chargé on parcourt l'ensemble des signets du doc, ATTENTION les case sont des case sensitive
For Each bkm In wordDocModele.Bookmarks
'vérifier le fonctionnement du code
'Debug.Print bkm.Name
            Select Case bkm.Name
                    Case "Action"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_Action)
                    Case "AAA"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_AAA)
                    Case "Apprenant"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_Apprenant)
                    Case "Auteur"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_Auteur)
                    Case "Cesper"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_Cesper)
                    Case "Commentaire"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_Commentaire)
                    Case "Competence"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_Competence)
                    Case "Consignes"
                    bkm.Range.Text = sh.Cells(iNumLigne, IDX_Consignes)
                    

                    '(.....etc 32 signets en tout)


            End Select
Next
'lire le code donnée
sCodeData = sh.Cells(iNumLigne, IDX_Reference)
'le nom du fichier, nota bene: on laisse le système ajouter l'extension
sFicName = "C:\Users\Utilisateur\Desktop\Formation OPCO\fiche action\ficheaction_" & sCodeData
'sauvegarde de la fiche
wordDocModele.SaveAs2 Filename:=sFicName
'fermer le document
wordDocModele.Close
End If

' et on recommence tout :-) en décalant de par rapport à la dernière selection
iNumLigne = iNumLigne + 1
Loop

'on ferme le fichier excel
wkb.Saved = True

wkb.Close

'fermer word
appWord.Quit

'libérer la mémoire occupé par les variables word

Set wordDocModele = Nothing
Set appWord = Nothing



End Sub

1 réponse

Tikazor Messages postés 17 Date d'inscription vendredi 17 juillet 2020 Statut Membre Dernière intervention 28 août 2020
28 août 2020 à 11:50
Problème résolu, il s'agissait d'un décalage de colonne dans la BDD
0