Probléme avec un publiposta de Excel=>Word

Résolu
Cybercraft2003 Messages postés 22 Date d'inscription jeudi 10 août 2006 Statut Membre Dernière intervention 8 juillet 2010 - 17 nov. 2009 à 16:58
Cybercraft2003 Messages postés 22 Date d'inscription jeudi 10 août 2006 Statut Membre Dernière intervention 8 juillet 2010 - 18 nov. 2009 à 11:19
Bonjour a tous,

J'ai pour habitude de me débrouillé seul en VBA, mais j'avoue que la j'ai un probléme (sûrement trés bête) que je n'arrive pas à résoudre.

Je vous explique :

J'ai un classeur avec 3 feuilles : Tableau de bord, Dossiers, Base opérateur.

1. Tableau de bord : Cette feuille refléte statistiquement le contenu de la feuille "Dossiers". En plus des statistiques on y trouve des boutons executant plusieurs UserForm pour l'encodage, feedbacks de dossier, etc... et enfin le récapitulatif de "Dossiers".

2. Dossiers : Base de données où sont encodés toutes les entrées dossiers. Ce n'est pas utiles d'entrer plus dans le détail des informations de la feuille.

3. Base opérateur : Devrait servir à encodé des entreprises et leurs infos (FJ, Adresse, etc...). "Devrait", car je n'ai pas encore rempli la base.

En annexe dans le dossier de ce classeur, j'ai plusieurs documents modéles dans lesquels sont repris des canevas de documents avec leur MergeField.
Dans la première feuille "Tableau de bord", j'ai placé un bouton publipostage. Ce bouton débouche sur un UserForm dans lequel est demandé à l'utilisateur de préciser la ligne de début et de fin du publipostage, ensuite il a la possibilité de choisir quelle fichier fusionner avec la base.

Je demande lors de ma fusion d'enregistré les fichiers sur base de valeur contenu dans DataField (ex. docName = "LE FICHIER" & DataField(3).Value)

Lorsque je clique sur OK et quelque soit les données entré dans les ComboBoxs. Le Visual editor me renvoi (Impossible d'exécuter car aucun document n'est active. Et s'arréte sur With "Word.ActiveDocument" juste avant la sauvegarde du document actif.

Voici mon code lors du publipostage :

Sub publipostage()

'EN COURS DE DEVELOPPEMENT
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"

Dim NomBase As String
Dim i As Integer
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim FR As Long
Dim LR As Long
Dim PctDone As Single
Dim docName As String

Application.ScreenUpdating = False

NomBase = "P:\Christopher\En développement\Ver 2.00\menu.xls"
FR = fusionPB.FR_cb.ListIndex
LR = fusionPB.LR_cb.ListIndex



Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open(fusionPB.chemin.Caption)

'fonctionnalité de publipostage pour le document spécifié
For i = FR To LR
With docWord.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [Dossiers$]"
'Spécifie la fusion vers
.Destination = wdSendToNewDocument
.suppressBlankLines = True
'Les enregistrements renvoient des nombres de type long ex: 1, 2, 3 etc...
With .DataSource
.FirstRecord = i
'essayé de définr à l'aide de listIndex
.LastRecord = i
'essayé de définr à l'aide de listIndex
End With
docName = .DataSource.DataFields(3).Value
docName = docName & "-Lot " & i

.DataSource.ActiveRecord = i
Debug.Print docName; i
'Exécute l'opération de publipostage
.Execute Pause:=False
IL S'ARRETE ICI ===> With Word.ActiveDocument <===
.SaveAs "P:\Christopher\En développement\Ver 2.00" & docName & ".doc"
.Close
End With
End With


Next i
'Fermeture du document Word
'docWord.Close False
'appWord.Quit
For a = 1 To 301
Sheets("Dossiers").Select
Range("AI" & a).Select
Select Case Selection
Case 1
Range("O" & a).Select
ActiveCell.Value = "Cahier des charges"
Case 2
Range("O" & a).Select
ActiveCell.Value = "Choix technique"
Case 3
Range("O" & a).Select
ActiveCell.Value = "Fiche action"
Case 4
Range("O" & a).Select
ActiveCell.Value = "Convention"
Case 5
Range("O" & a).Select
ActiveCell.Value = "Formation"
End Select
PctDone = a / 301
' Appelle de la sous-routine qui met à jour la progressBar sur base du PctDone
UpdateProgressBar PctDone

Next a
Range("B1").Select
Sheets("Tableau de bord").Activate
Application.ScreenUpdating = True
Unload fusionPB
MsgBox "Publipostage terminé !!!"
End Sub


Aprés le publipostage je demande à la macro d'incrémenter la valeur dans une cellule, sur base de quoi je connait le statut du dossier...
Dans cette incrémentation viens ce mettre l'index de ma progressbar "PctDone".

Voila, en tout cas j'éspère que vous pourrez m'aider. J'ai planché sur cette fonction toute la journée et j'avoue avoir le cerveau en compote.

Merci d'anvance

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 nov. 2009 à 21:25
Salut
With appWord.ActiveDocument
serait peut-être plus adapté, l'objet "Word" ne faisant référence qu'à un type et pas un objet.

Dans tes prochains messages, merci d'utiliser la colorisation syntaxique (3ème icone à partir de la droite) pour présenter du code, ce sera plus digeste à lire.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
Cybercraft2003 Messages postés 22 Date d'inscription jeudi 10 août 2006 Statut Membre Dernière intervention 8 juillet 2010
17 nov. 2009 à 21:31
Merci pour l'info, je test ça dès demain au boulot, et je t'informerais.

Dsl pour l'indigestion de code

------------
Même joueur joue encore
0
Cybercraft2003 Messages postés 22 Date d'inscription jeudi 10 août 2006 Statut Membre Dernière intervention 8 juillet 2010
18 nov. 2009 à 11:19
appWord.ActiveDocument fonctionne trés bien. Merci
------------
Même joueur joue encore
0
Rejoignez-nous