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

Résolu/Fermé
Signaler
Messages postés
10
Date d'inscription
vendredi 4 janvier 2013
Statut
Membre
Dernière intervention
3 décembre 2014
-
Messages postés
24290
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2022
-
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

2 réponses

Messages postés
24290
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2022
7 034
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
Messages postés
24290
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2022
7 034
Good :-)
bonne continuation
eric
0
Messages postés
10
Date d'inscription
vendredi 4 janvier 2013
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
10
Date d'inscription
vendredi 4 janvier 2013
Statut
Membre
Dernière intervention
3 décembre 2014

En fait, je mets quoi en place et lieu des pointillés ?
J'avais prévenu que j'étais ignorante .. désolée.
0
Messages postés
24290
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2022
7 034
ben ton code, il ne fait pas que 3 lignes je suppose.
eric
0
Messages postés
10
Date d'inscription
vendredi 4 janvier 2013
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
24290
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 janvier 2022
7 034
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
Messages postés
10
Date d'inscription
vendredi 4 janvier 2013
Statut
Membre
Dernière intervention
3 décembre 2014

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