MACRO sélectionner un enregistrement d'un document fusionné

Résolu/Fermé
TaoQian Messages postés 10 Date d'inscription vendredi 4 janvier 2013 Statut Membre Dernière intervention 3 décembre 2014 - 4 janv. 2013 à 18:55
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 6 janv. 2013 à 15:44
Bonjour,

Pour l'élaboration d'un gros dossier, j'ai dû créer 9 documents Word fusionnés avec Excel (soit plus de 2000 champs de fusion).
Dans une macro (créée avec l'enregistreur) j'arrive à fusionner les 9 docs en un seul, puis enregistrer le fichier final.
Mais, je n'ai pas la main pour sélectionner UN enregistrement en particulier : je suis obligée d'en saisir le numéro dans la macro avant chaque exécution : par exemple
With .DataSource
.FirstRecord = 3
.LastRecord = 3

Pouvez-vous m'expliquer comment modifier la macro pour avoir le choix lors de son exécution , soit par le numéro d'enregistrement, soit par le contenu d'un champs (chacun des 9 documents comporte au moins un champs de fusion commun qu'on appellera "contrat", et j'ai 25 contrats à traiter d'où l'intérêt d'une automatisation).

Merci d'avance si vous avez une solution à me proposer. Attention, si je sais faire des macros simples via l'enregistreur je suis ignare en langage VBA, il me faut donc une solution facile et limpide.

Bien cordialement
A voir également:

2 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 4/01/2013 à 19:10
Bonjour,

en utilisant une variable ça ne marche pas ?
dim numEnr as long
numEnr = Application.InputBox("Numero d'enregistrement", "Saisie numéro", Type:=1)
....
With .DataSource
.FirstRecord = numEnr
.LastRecord = numEnr
....

Ou bien faire une boucle
For numEnr = 1 to 9
...
Next numEnr

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
J'AI TROUVE !!!
Bonjour,
TOUTE SEULEUH... comme dirait mon petit-fils (mon pseudo aurait pu être mamy ou mémé).
Il fallait définir autant de variables que de fichiers mais en donnant aux variables de 2 à 9 la valeur de la première !!!
C'était juste une question de logique.
En tout cas si j'y ai passé du temps, ça va me faire gagner un bon nombre d'heures de travail pour les années qui viennent.
Un grand merci à Eric
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
6 janv. 2013 à 15:44
Good :-)
bonne continuation
eric
0
TaoQian Messages postés 10 Date d'inscription vendredi 4 janvier 2013 Statut Membre Dernière intervention 3 décembre 2014
4 janv. 2013 à 19:59
Merci Eric,

J'ai sans doute mal entré les lignes : ça ne marche pas.
J'ai un message "erreur de compilation : membre de méthode ou de données introuvable" et le terme InputBox est surligné.

TQ
0
TaoQian Messages postés 10 Date d'inscription vendredi 4 janvier 2013 Statut Membre Dernière intervention 3 décembre 2014
4 janv. 2013 à 20:20
En fait, je mets quoi en place et lieu des pointillés ?
J'avais prévenu que j'étais ignorante .. désolée.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
4 janv. 2013 à 20:26
ben ton code, il ne fait pas que 3 lignes je suppose.
eric
0
TaoQian Messages postés 10 Date d'inscription vendredi 4 janvier 2013 Statut Membre Dernière intervention 3 décembre 2014
4 janv. 2013 à 20:41
non 25, si on parle bien de la même chose

pour info voilà un extrait de la macro originale :

Documents.Open FileName:="""C:\Mon fichier-1ère partie.doc""", _
ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
wdOpenFormatAuto, XMLTransform:=""
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = 1
.LastRecord = 1
End With
.Execute Pause:=False
End With
ActiveDocument.SaveAs FileName:="MF 1ère partie.doc", FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
Documents.Open FileName:="""Mon fichier-2ème partie.doc""", _
ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
wdOpenFormatAuto, XMLTransform:=""
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = 1
.LastRecord = 1
End With
.Execute Pause:=False
End With
ActiveDocument.SaveAs FileName:="MF 2ème partie.doc", FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False

ETC.. jusqu'à Mon fichier-9ème partie.doc


End Sub
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 4/01/2013 à 20:55
et bien tu mets
dim numEnr as long 
numEnr = Application.InputBox("Numero d'enregistrement", "Saisie numéro", Type:=1)  
tout au début,
et tu remplaces partout :
.FirstRecord = 1 
.LastRecord = 1  
par :
.FirstRecord = numEnr 
.LastRecord = numEnr  

Au début le programme te demandera le n° voulu et il sera remplacé par ta saisie dans .FirstRecord et .LastRecord
Essaie sur une copie car je ne connais pas les macros word.

eric
0
TaoQian Messages postés 10 Date d'inscription vendredi 4 janvier 2013 Statut Membre Dernière intervention 3 décembre 2014
4 janv. 2013 à 21:09
Merci de ta patience ...

Voilà donc ce que j'ai fait, mais j'ai le même message avec "InputBox" surligné.
Qu'en penses-tu ?

Documents.Open FileName:="""Manuel-systeme-1ère partie.doc""", _
ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
wdOpenFormatAuto, XMLTransform:=""
Dim numEnr As Long
numEnr = Application.InputBox("Numero d'enregistrement", "Saisie numéro", Type:=1)
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = numEnr
.LastRecord = numEnr
End With
ActiveDocument.SaveAs FileName:="MAS 1ère partie.doc", FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
ActiveWindow.Close
0