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

Résolu
TaoQian Messages postés 10 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. TaoQian
       
      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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Good :-)
      bonne continuation
      eric
      0
  2. TaoQian Messages postés 10 Statut Membre
     
    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
    1. TaoQian Messages postés 10 Statut Membre
       
      En fait, je mets quoi en place et lieu des pointillés ?
      J'avais prévenu que j'étais ignorante .. désolée.
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      ben ton code, il ne fait pas que 3 lignes je suppose.
      eric
      0
    3. TaoQian Messages postés 10 Statut Membre
       
      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
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    5. TaoQian Messages postés 10 Statut Membre
       
      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