J'aurais besoin d'un peu d'aide, car là, je bloque...
J'ai un code qui est capable de générer une lettre par enregistrement
correspondant à la combinaison de 2 critères (colonnes 2 & 37).
Le souci c'est qu'il ne génère qu'une lettre et qu'il faudrait qu'il génére
plusieurs lettres car il existe plusieurs enregistrements qui ont eux aussi
cette combinaison.
Il y a une histoire de boucle ou de filtre à gérer que je ne sais pas gérer.
Je joins le code :
-------
Sub Macro()
Dim iR As Integer
Dim i As Integer
Dim oDoc As Document
Dim DocName As String
Dim oDS As MailMergeDataSource
Set oDoc = ActiveDocument
Set oDS = oDoc.MailMerge.DataSource
iR = oDoc.MailMerge.DataSource.RecordCount - 1
Debug.Print x
sup = MsgBox("Voulez-vous démarrer la fusion du document ?",
vbYesNoCancel + vbQuestion, "Fusion ?")
If sup = vbYes Then
For i = 1 To iR
With oDoc.MailMerge
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.Destination = wdSendToNewDocument
.Execute
.DataSource.ActiveRecord = i
DocName = .DataSource.DataFields(37).Value
DocName = DocName & "-" & .DataSource.DataFields(2).Value
Debug.Print DocName; i
End With
With ActiveDocument
.SaveAs "c:\" & DocName & ".doc"
.Close
End With
Next i
End If
End Sub
------
Est-ce que cela inspire qq'un ?... Ce serait chouette !
Merci bcp d'avance pour votre aide & votre disponibilité
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
parci
On 3 fév, 23:37, lilou51 wrote:
Bonjour,
J'aurais besoin d'un peu d'aide, car là, je bloque...
J'ai un code qui est capable de générer une lettre par enregistrement correspondant à la combinaison de 2 critères (colonnes 2 & 37). Le souci c'est qu'il ne génère qu'une lettre et qu'il faudrait qu'il génére plusieurs lettres car il existe plusieurs enregistrements qui ont eux aus si cette combinaison. Il y a une histoire de boucle ou de filtre à gérer que je ne sais pas gérer. Je joins le code : ------- Sub Macro()
Dim iR As Integer Dim i As Integer Dim oDoc As Document Dim DocName As String Dim oDS As MailMergeDataSource
Set oDoc = ActiveDocument Set oDS = oDoc.MailMerge.DataSource
iR = oDoc.MailMerge.DataSource.RecordCount - 1
Debug.Print x
sup = MsgBox("Voulez-vous démarrer la fusion du document ?", vbYesNoCancel + vbQuestion, "Fusion ?")
If sup = vbYes Then
For i = 1 To iR With oDoc.MailMerge .DataSource.FirstRecord = i .DataSource.LastRecord = i .Destination = wdSendToNewDocument .Execute .DataSource.ActiveRecord = i DocName = .DataSource.DataFields(37).Value DocName = DocName & "-" & .DataSource.DataFields(2).Val ue Debug.Print DocName; i End With With ActiveDocument .SaveAs "c:" & DocName & ".doc" .Close End With
Next i End If
End Sub ------
Est-ce que cela inspire qq'un ?... Ce serait chouette !
Merci bcp d'avance pour votre aide & votre disponibilité
Supprime ta boucle (For i = 1 To iR) et écrit par exemple :
With oDoc.MailMerge With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Destination = wdSendToNewDocument .Execute End With
En supposant qu'il y ait bien une source de données associé à ton doc . Sinon, on peut le faire dynamiquement avec la méthode OpenDataSource. Ajoute Option Explicit en entête du module aussi.
La suite sur microsoft.public.fr.word
On 3 fév, 23:37, lilou51 <lilo...@discussions.microsoft.com> wrote:
Bonjour,
J'aurais besoin d'un peu d'aide, car là, je bloque...
J'ai un code qui est capable de générer une lettre par enregistrement
correspondant à la combinaison de 2 critères (colonnes 2 & 37).
Le souci c'est qu'il ne génère qu'une lettre et qu'il faudrait qu'il génére
plusieurs lettres car il existe plusieurs enregistrements qui ont eux aus si
cette combinaison.
Il y a une histoire de boucle ou de filtre à gérer que je ne sais pas gérer.
Je joins le code :
-------
Sub Macro()
Dim iR As Integer
Dim i As Integer
Dim oDoc As Document
Dim DocName As String
Dim oDS As MailMergeDataSource
Set oDoc = ActiveDocument
Set oDS = oDoc.MailMerge.DataSource
iR = oDoc.MailMerge.DataSource.RecordCount - 1
Debug.Print x
sup = MsgBox("Voulez-vous démarrer la fusion du document ?",
vbYesNoCancel + vbQuestion, "Fusion ?")
If sup = vbYes Then
For i = 1 To iR
With oDoc.MailMerge
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.Destination = wdSendToNewDocument
.Execute
.DataSource.ActiveRecord = i
DocName = .DataSource.DataFields(37).Value
DocName = DocName & "-" & .DataSource.DataFields(2).Val ue
Debug.Print DocName; i
End With
With ActiveDocument
.SaveAs "c:" & DocName & ".doc"
.Close
End With
Next i
End If
End Sub
------
Est-ce que cela inspire qq'un ?... Ce serait chouette !
Merci bcp d'avance pour votre aide & votre disponibilité
Supprime ta boucle (For i = 1 To iR) et écrit par exemple :
With oDoc.MailMerge
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Destination = wdSendToNewDocument
.Execute
End With
En supposant qu'il y ait bien une source de données associé à ton doc .
Sinon, on peut le faire dynamiquement avec la méthode OpenDataSource.
Ajoute Option Explicit en entête du module aussi.
J'aurais besoin d'un peu d'aide, car là, je bloque...
J'ai un code qui est capable de générer une lettre par enregistrement correspondant à la combinaison de 2 critères (colonnes 2 & 37). Le souci c'est qu'il ne génère qu'une lettre et qu'il faudrait qu'il génére plusieurs lettres car il existe plusieurs enregistrements qui ont eux aus si cette combinaison. Il y a une histoire de boucle ou de filtre à gérer que je ne sais pas gérer. Je joins le code : ------- Sub Macro()
Dim iR As Integer Dim i As Integer Dim oDoc As Document Dim DocName As String Dim oDS As MailMergeDataSource
Set oDoc = ActiveDocument Set oDS = oDoc.MailMerge.DataSource
iR = oDoc.MailMerge.DataSource.RecordCount - 1
Debug.Print x
sup = MsgBox("Voulez-vous démarrer la fusion du document ?", vbYesNoCancel + vbQuestion, "Fusion ?")
If sup = vbYes Then
For i = 1 To iR With oDoc.MailMerge .DataSource.FirstRecord = i .DataSource.LastRecord = i .Destination = wdSendToNewDocument .Execute .DataSource.ActiveRecord = i DocName = .DataSource.DataFields(37).Value DocName = DocName & "-" & .DataSource.DataFields(2).Val ue Debug.Print DocName; i End With With ActiveDocument .SaveAs "c:" & DocName & ".doc" .Close End With
Next i End If
End Sub ------
Est-ce que cela inspire qq'un ?... Ce serait chouette !
Merci bcp d'avance pour votre aide & votre disponibilité
Supprime ta boucle (For i = 1 To iR) et écrit par exemple :
With oDoc.MailMerge With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Destination = wdSendToNewDocument .Execute End With
En supposant qu'il y ait bien une source de données associé à ton doc . Sinon, on peut le faire dynamiquement avec la méthode OpenDataSource. Ajoute Option Explicit en entête du module aussi.
La suite sur microsoft.public.fr.word
lilou51
Bonjour Parci,
je n'ai pas bien compris ou qq ch m'échappe... Le code que tu me donnes c'est le code de la fusion simple. Mais comment je gère en ce cas les "x" fichiers correspondant aux "x" combinaisons de 2 critères (et intégrant eux-mêmes un certains nb de lettres / destinataires) ? Je ne sais pas à quoi sert l'Option Explicit et comment l'utiliser, ce qu'elle appporte ?
Merci,
Supprime ta boucle (For i = 1 To iR) et écrit par exemple :
With oDoc.MailMerge With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Destination = wdSendToNewDocument .Execute End With
En supposant qu'il y ait bien une source de données associé à ton doc.. Sinon, on peut le faire dynamiquement avec la méthode OpenDataSource. Ajoute Option Explicit en entête du module aussi.
Bonjour Parci,
je n'ai pas bien compris ou qq ch m'échappe... Le code que tu me donnes
c'est le code de la fusion simple.
Mais comment je gère en ce cas les "x" fichiers correspondant aux "x"
combinaisons de 2 critères (et intégrant eux-mêmes un certains nb de lettres
/ destinataires) ?
Je ne sais pas à quoi sert l'Option Explicit et comment l'utiliser, ce
qu'elle appporte ?
Merci,
Supprime ta boucle (For i = 1 To iR) et écrit par exemple :
With oDoc.MailMerge
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Destination = wdSendToNewDocument
.Execute
End With
En supposant qu'il y ait bien une source de données associé à ton doc..
Sinon, on peut le faire dynamiquement avec la méthode OpenDataSource.
Ajoute Option Explicit en entête du module aussi.
je n'ai pas bien compris ou qq ch m'échappe... Le code que tu me donnes c'est le code de la fusion simple. Mais comment je gère en ce cas les "x" fichiers correspondant aux "x" combinaisons de 2 critères (et intégrant eux-mêmes un certains nb de lettres / destinataires) ? Je ne sais pas à quoi sert l'Option Explicit et comment l'utiliser, ce qu'elle appporte ?
Merci,
Supprime ta boucle (For i = 1 To iR) et écrit par exemple :
With oDoc.MailMerge With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Destination = wdSendToNewDocument .Execute End With
En supposant qu'il y ait bien une source de données associé à ton doc.. Sinon, on peut le faire dynamiquement avec la méthode OpenDataSource. Ajoute Option Explicit en entête du module aussi.
parci
On 4 fév, 12:50, lilou51 wrote:
Bonjour Parci,
je n'ai pas bien compris ou qq ch m'échappe... Le code que tu me donnes c'est le code de la fusion simple. Mais comment je gère en ce cas les "x" fichiers correspondant aux "x" combinaisons de 2 critères (et intégrant eux-mêmes un certains nb d e lettres / destinataires) ? Je ne sais pas à quoi sert l'Option Explicit et comment l'utiliser, ce qu'elle appporte ?
Merci,
Désolé, j'étais à coté de la plaque. Tu peux le faire comme ça
With oDoc.MailMerge.DataSource .ActiveRecord = wdFirstRecord Do While .ActiveRecord <> .LastRecord .FirstRecord = .ActiveRecord .LastRecord = .ActiveRecord oDoc.MailMerge.Execute False ' ici tu sauvegardes le doc actif .ActiveRecord = wdNextRecord Loop End With
Ma version de Word ne connait pas DataSource.RecordCount mais sur le principe ça ne change rien à ce que tu fais. Donc, si ça ne fonctionn e pas pour toi, le problème vient sans doute de ta source de données.
Option Explicit en entête de module impose la déclaration des variables, ça t'évitera plein d'erreurs.
Tu devrais aussi gérer les erreurs, surtout lors de la sauvegarde (la combinaison des 2 champs est-elle un nom de fichier possible ? remplacer le fichier si il existe déjà ou pas ? un doc de même nom es t- il déjà ouvert ? ...)
On 4 fév, 12:50, lilou51 <lilo...@discussions.microsoft.com> wrote:
Bonjour Parci,
je n'ai pas bien compris ou qq ch m'échappe... Le code que tu me donnes
c'est le code de la fusion simple.
Mais comment je gère en ce cas les "x" fichiers correspondant aux "x"
combinaisons de 2 critères (et intégrant eux-mêmes un certains nb d e lettres
/ destinataires) ?
Je ne sais pas à quoi sert l'Option Explicit et comment l'utiliser, ce
qu'elle appporte ?
Merci,
Désolé, j'étais à coté de la plaque. Tu peux le faire comme ça
With oDoc.MailMerge.DataSource
.ActiveRecord = wdFirstRecord
Do While .ActiveRecord <> .LastRecord
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
oDoc.MailMerge.Execute False
' ici tu sauvegardes le doc actif
.ActiveRecord = wdNextRecord
Loop
End With
Ma version de Word ne connait pas DataSource.RecordCount mais sur le
principe ça ne change rien à ce que tu fais. Donc, si ça ne fonctionn e
pas pour toi, le problème vient sans doute de ta source de données.
Option Explicit en entête de module impose la déclaration des
variables, ça t'évitera plein d'erreurs.
Tu devrais aussi gérer les erreurs, surtout lors de la sauvegarde (la
combinaison des 2 champs est-elle un nom de fichier possible ?
remplacer le fichier si il existe déjà ou pas ? un doc de même nom es t-
il déjà ouvert ? ...)
je n'ai pas bien compris ou qq ch m'échappe... Le code que tu me donnes c'est le code de la fusion simple. Mais comment je gère en ce cas les "x" fichiers correspondant aux "x" combinaisons de 2 critères (et intégrant eux-mêmes un certains nb d e lettres / destinataires) ? Je ne sais pas à quoi sert l'Option Explicit et comment l'utiliser, ce qu'elle appporte ?
Merci,
Désolé, j'étais à coté de la plaque. Tu peux le faire comme ça
With oDoc.MailMerge.DataSource .ActiveRecord = wdFirstRecord Do While .ActiveRecord <> .LastRecord .FirstRecord = .ActiveRecord .LastRecord = .ActiveRecord oDoc.MailMerge.Execute False ' ici tu sauvegardes le doc actif .ActiveRecord = wdNextRecord Loop End With
Ma version de Word ne connait pas DataSource.RecordCount mais sur le principe ça ne change rien à ce que tu fais. Donc, si ça ne fonctionn e pas pour toi, le problème vient sans doute de ta source de données.
Option Explicit en entête de module impose la déclaration des variables, ça t'évitera plein d'erreurs.
Tu devrais aussi gérer les erreurs, surtout lors de la sauvegarde (la combinaison des 2 champs est-elle un nom de fichier possible ? remplacer le fichier si il existe déjà ou pas ? un doc de même nom es t- il déjà ouvert ? ...)
lilou51
je comprends pas ... à quel moment ds le process on dit que la fusion doit correspondre à l'enregistrement actuel jusqu'au dernier enregistrement ayant les 2 mêmes critères identiques ?
Parce que là, si je lis bien, on dit si les lignes entières (record) sont identiques ? Alors que tous les records sont bien différents mais certains ont 2 critères semblables.
Dès lors que 2 critères sont semblables (ils sont triés en fonction de cela sous Excel), alors on fait la fusion et on génère un fichier au nom des 2 critères (et accessoirement, on fait un pdf, mais pour cela, je sais faire).
Dis-moi ?
je comprends pas ... à quel moment ds le process on dit que la fusion doit
correspondre à l'enregistrement actuel jusqu'au dernier enregistrement ayant
les 2 mêmes critères identiques ?
Parce que là, si je lis bien, on dit si les lignes entières (record) sont
identiques ? Alors que tous les records sont bien différents mais certains
ont 2 critères semblables.
Dès lors que 2 critères sont semblables (ils sont triés en fonction de cela
sous Excel), alors on fait la fusion et on génère un fichier au nom des 2
critères (et accessoirement, on fait un pdf, mais pour cela, je sais faire).
je comprends pas ... à quel moment ds le process on dit que la fusion doit correspondre à l'enregistrement actuel jusqu'au dernier enregistrement ayant les 2 mêmes critères identiques ?
Parce que là, si je lis bien, on dit si les lignes entières (record) sont identiques ? Alors que tous les records sont bien différents mais certains ont 2 critères semblables.
Dès lors que 2 critères sont semblables (ils sont triés en fonction de cela sous Excel), alors on fait la fusion et on génère un fichier au nom des 2 critères (et accessoirement, on fait un pdf, mais pour cela, je sais faire).
Dis-moi ?
lilou51
Holà Parci !
En fait la macro n'enclenche rien... Ca marchait pr toi ? Merci.
Holà Parci !
En fait la macro n'enclenche rien...
Ca marchait pr toi ?
Merci.
En fait la macro n'enclenche rien... Ca marchait pr toi ? Merci.
parci
On 4 fév, 17:51, lilou51 wrote:
je comprends pas ... à quel moment ds le process on dit que la fusion d oit correspondre à l'enregistrement actuel jusqu'au dernier enregistrement ayant les 2 mêmes critères identiques ?
Parce que là, si je lis bien, on dit si les lignes entières (record) sont identiques ? Alors que tous les records sont bien différents mais certa ins ont 2 critères semblables.
Ok, ,j'avais pas compris.
Sub Publi
Dim oDoc As Document Dim c1 As String Dim c2 As String Dim nFirst As Long Dim nLast As Long Dim i As Long Dim nbRecords As Long Dim bLast As Boolean
Set oDoc = ActiveDocument
With oDoc.MailMerge .OpenDataSource ' tes paramètres suivant le format des données (voir l'aide pour les détails) .Destination = wdSendToNewDocument End With
Do c1 = .DataFields(2) c2 = .DataFields(37) nFirst = i
Do While (c1 & c2) = (.DataFields(1) & .DataFields(2)) If .ActiveRecord = nbRecords Then bLast = True Exit Do End If .ActiveRecord = wdNextRecord i = i + 1 Loop
If Not bLast Then nLast = i - 1 Else nLast = nbRecords End If
.FirstRecord = nFirst .LastRecord = nLast oDoc.MailMerge.Execute False ' ici tu sauvegardes le doc actif ' avec un nom du type : path & c1 & c2 & ".doc"
Loop While Not bLast End With
End Sub
Ca suppose que les données source soient triées sur les colonnes 2 et 37. Il manquait l'appel de OpenDataSource dans ta macro d'origine pour qu'elle fasse quelque chose. Ma version de Word ne connait pas MailMerge.DataSource.RecordCount, donc je l'ai calculé.
On 4 fév, 17:51, lilou51 <lilo...@discussions.microsoft.com> wrote:
je comprends pas ... à quel moment ds le process on dit que la fusion d oit
correspondre à l'enregistrement actuel jusqu'au dernier enregistrement ayant
les 2 mêmes critères identiques ?
Parce que là, si je lis bien, on dit si les lignes entières (record) sont
identiques ? Alors que tous les records sont bien différents mais certa ins
ont 2 critères semblables.
Ok, ,j'avais pas compris.
Sub Publi
Dim oDoc As Document
Dim c1 As String
Dim c2 As String
Dim nFirst As Long
Dim nLast As Long
Dim i As Long
Dim nbRecords As Long
Dim bLast As Boolean
Set oDoc = ActiveDocument
With oDoc.MailMerge
.OpenDataSource ' tes paramètres suivant le format des données
(voir l'aide pour les détails)
.Destination = wdSendToNewDocument
End With
Do
c1 = .DataFields(2)
c2 = .DataFields(37)
nFirst = i
Do While (c1 & c2) = (.DataFields(1) & .DataFields(2))
If .ActiveRecord = nbRecords Then
bLast = True
Exit Do
End If
.ActiveRecord = wdNextRecord
i = i + 1
Loop
If Not bLast Then
nLast = i - 1
Else
nLast = nbRecords
End If
.FirstRecord = nFirst
.LastRecord = nLast
oDoc.MailMerge.Execute False
' ici tu sauvegardes le doc actif
' avec un nom du type : path & c1 & c2 & ".doc"
Loop While Not bLast
End With
End Sub
Ca suppose que les données source soient triées sur les colonnes 2 et
37.
Il manquait l'appel de OpenDataSource dans ta macro d'origine pour
qu'elle fasse quelque chose.
Ma version de Word ne connait pas MailMerge.DataSource.RecordCount,
donc je l'ai calculé.
je comprends pas ... à quel moment ds le process on dit que la fusion d oit correspondre à l'enregistrement actuel jusqu'au dernier enregistrement ayant les 2 mêmes critères identiques ?
Parce que là, si je lis bien, on dit si les lignes entières (record) sont identiques ? Alors que tous les records sont bien différents mais certa ins ont 2 critères semblables.
Ok, ,j'avais pas compris.
Sub Publi
Dim oDoc As Document Dim c1 As String Dim c2 As String Dim nFirst As Long Dim nLast As Long Dim i As Long Dim nbRecords As Long Dim bLast As Boolean
Set oDoc = ActiveDocument
With oDoc.MailMerge .OpenDataSource ' tes paramètres suivant le format des données (voir l'aide pour les détails) .Destination = wdSendToNewDocument End With
Do c1 = .DataFields(2) c2 = .DataFields(37) nFirst = i
Do While (c1 & c2) = (.DataFields(1) & .DataFields(2)) If .ActiveRecord = nbRecords Then bLast = True Exit Do End If .ActiveRecord = wdNextRecord i = i + 1 Loop
If Not bLast Then nLast = i - 1 Else nLast = nbRecords End If
.FirstRecord = nFirst .LastRecord = nLast oDoc.MailMerge.Execute False ' ici tu sauvegardes le doc actif ' avec un nom du type : path & c1 & c2 & ".doc"
Loop While Not bLast End With
End Sub
Ca suppose que les données source soient triées sur les colonnes 2 et 37. Il manquait l'appel de OpenDataSource dans ta macro d'origine pour qu'elle fasse quelque chose. Ma version de Word ne connait pas MailMerge.DataSource.RecordCount, donc je l'ai calculé.
parci
a écrit :
Correction :
c1 = .DataFields(2) c2 = .DataFields(37)
Do While (c1 & c2) = (.DataFields(2) & .DataFields(37))
parci@free.fr a écrit :
Correction :
c1 = .DataFields(2)
c2 = .DataFields(37)
Do While (c1 & c2) = (.DataFields(2) & .DataFields(37))
Do While (c1 & c2) = (.DataFields(2) & .DataFields(37))
lilou51
Bonjour !
Merci bcp Parci pour ton aide.... Mais ça n'a pas voulu marché. Pdt mon absence du forum pdt les 10 derniers jours, j'ai continué à chercher et j'ai trouvé !... Pour ceux qui serait intéressés voici comment ça marche...
Il fallait compter le nb de records contenant la combinaison des 2 colonnes, mais en décallant d'une ligne vers le haut (en ligne 2, on calcule le nb de combinaison identiques à celle présente en ligne 3). J'ai donc ajouté pour + de simplicité cette colonne directement ds le fichier source + une colonne combinaison. Formule concatener de combinaison (col. AQ) ²&"-"&AK2 Formule compteur de combinaisons (col. AR) =SI(ESTVIDE(AQ3);0;NB.SI($AQ$2:$AQ$53;AQ3)-1)
Partant de là, on peut faire la macro suivante
i = 1
With oDoc.MailMerge .DataSource.ActiveRecord = 1 End With
Do While i <= iR With oDoc.MailMerge j = .DataSource.DataFields(6).Value .DataSource.FirstRecord = i .DataSource.LastRecord = i + j .Destination = wdSendToNewDocument .Execute .DataSource.ActiveRecord = i + j DocName = .DataSource.DataFields(2).Value DocName = DocName & "-" & .DataSource.DataFields(1).Value Debug.Print DocName; i End With ' Sauvegarde du document publiposté With ActiveDocument .SaveAs stChemin & "" & DocName & ".doc" End with
i = i + j + 1 Loop
Bonjour !
Merci bcp Parci pour ton aide.... Mais ça n'a pas voulu marché. Pdt mon
absence du forum pdt les 10 derniers jours, j'ai continué à chercher et j'ai
trouvé !... Pour ceux qui serait intéressés voici comment ça marche...
Il fallait compter le nb de records contenant la combinaison des 2 colonnes,
mais en décallant d'une ligne vers le haut (en ligne 2, on calcule le nb de
combinaison identiques à celle présente en ligne 3). J'ai donc ajouté pour +
de simplicité cette colonne directement ds le fichier source + une colonne
combinaison.
Formule concatener de combinaison (col. AQ) ²&"-"&AK2
Formule compteur de combinaisons (col. AR)
=SI(ESTVIDE(AQ3);0;NB.SI($AQ$2:$AQ$53;AQ3)-1)
Partant de là, on peut faire la macro suivante
i = 1
With oDoc.MailMerge
.DataSource.ActiveRecord = 1
End With
Do While i <= iR
With oDoc.MailMerge
j = .DataSource.DataFields(6).Value
.DataSource.FirstRecord = i
.DataSource.LastRecord = i + j
.Destination = wdSendToNewDocument
.Execute
.DataSource.ActiveRecord = i + j
DocName = .DataSource.DataFields(2).Value
DocName = DocName & "-" & .DataSource.DataFields(1).Value
Debug.Print DocName; i
End With
' Sauvegarde du document publiposté
With ActiveDocument
.SaveAs stChemin & "" & DocName & ".doc"
End with
Merci bcp Parci pour ton aide.... Mais ça n'a pas voulu marché. Pdt mon absence du forum pdt les 10 derniers jours, j'ai continué à chercher et j'ai trouvé !... Pour ceux qui serait intéressés voici comment ça marche...
Il fallait compter le nb de records contenant la combinaison des 2 colonnes, mais en décallant d'une ligne vers le haut (en ligne 2, on calcule le nb de combinaison identiques à celle présente en ligne 3). J'ai donc ajouté pour + de simplicité cette colonne directement ds le fichier source + une colonne combinaison. Formule concatener de combinaison (col. AQ) ²&"-"&AK2 Formule compteur de combinaisons (col. AR) =SI(ESTVIDE(AQ3);0;NB.SI($AQ$2:$AQ$53;AQ3)-1)
Partant de là, on peut faire la macro suivante
i = 1
With oDoc.MailMerge .DataSource.ActiveRecord = 1 End With
Do While i <= iR With oDoc.MailMerge j = .DataSource.DataFields(6).Value .DataSource.FirstRecord = i .DataSource.LastRecord = i + j .Destination = wdSendToNewDocument .Execute .DataSource.ActiveRecord = i + j DocName = .DataSource.DataFields(2).Value DocName = DocName & "-" & .DataSource.DataFields(1).Value Debug.Print DocName; i End With ' Sauvegarde du document publiposté With ActiveDocument .SaveAs stChemin & "" & DocName & ".doc" End with