VBA: bug publipostage piloté par excel
Résolu
Tikazor
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
Tikazor Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
Tikazor Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
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:
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
A voir également:
- VBA: bug publipostage piloté par excel
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel