Séquence de fusion et publipostage - VB/VBA/VBS - Programmation
Marsh Posté le 12-01-2006 à 09:04:45
Dis-donc, tu n'as que des problèmes ...
Ne serait-ce pas plus facile si il y avait 2 fichiers word... 1 pour la première page et 1 pour la seconde ?
Marsh Posté le 12-01-2006 à 11:26:19
si d'ailleur sc'est ce que j'ai fais mais mine de rien!!! ca doit pouvoir se faire?
Marsh Posté le 12-01-2006 à 11:29:06
Est-ce que ca marche avec deux fichiers différents ?
Marsh Posté le 12-01-2006 à 11:51:49
Tu peux mettre le code pour l'adapter à un seul fichier ?
Marsh Posté le 12-01-2006 à 11:59:23
Oue mais ca va etre hardu car le code run un user form et ce la requete SQLstatement qui specifie quelle donnée importer!
Comment sur le fichier "double" je peux adapter une requete d'une macro ainsi que des conditions ecrite sur le fichier.
expl, la macro prend les donnee du mois date system et peux analyser le fichiers ^pour passer à la sequence suivante!!
à mon avis ce choo!
voila le code de la macro qui rapatrie la base avec la requete month!
Function fusion_master(month As String) As Boolean
'
' e_c_t Macro
' Macro enregistrée le 06/01/2006 par DENISE Louis
'
MyMonth_num = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" )
MyMonth_letter = Array("Janvier", "Fevrier", "Mars", "Avril", "mai", "Juin", "juillet", "Aout", "Septembre", "Octobre", "Novenbre", "Decembre" )
Const separateur As String = "/"
Const appos As String = "'"
Dim i As Integer
Dim MyDate
MyDate = Date
If month = "mois_anterieur" Then
i = 0
iret2 = Split(MyDate, separateur, -1, vbTextCompare)
mois = CInt(iret2(1))
fusion_master = True
Do
i = i + 1
Loop Until (CInt(MyMonth_num(i - 1)) = mois)
st = MyMonth_letter(i - 1)
X = "(Mois = " & appos & st & appos & " )"
ActiveDocument.MailMerge.OpenDataSource Name:= _
"I:\comptabilité matiière\liste_MASTER.xls", ConfirmConversions:=False, _
ReadOnly:=True, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=I:\comptabilité matiière\liste_MASTER.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLE" _
, SQLStatement:="SELECT * FROM `'Fichier Master$'` WHERE ((Type = 'A') AND " & X & " )" & "", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ElseIf month = "" Then
MsgBox ("veuillez sasir un mois" )
fusion_master = False
Else
X = "(Mois = " & appos & month & appos & " )"
fusion_master = True
ActiveDocument.MailMerge.OpenDataSource Name:= _
"I:\comptabilité matiière\liste_MASTER.xls", ConfirmConversions:=False, _
ReadOnly:=True, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=I:\comptabilité matiière\liste_MASTER.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLE" _
, SQLStatement:="SELECT * FROM `'Fichier Master$'` WHERE ((Type = 'A') AND " & X & " )" & "", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End If
End Function
voila!
Marsh Posté le 12-01-2006 à 13:59:14
Est-ce que tu peux écrire un exemple concret ?
Ta macro est bien sur le fichier Word, non ? Décris le cheminement à faire... J'ai pas tout compris (c'est l'heure de la sieste, donc je suis pas très réveillé...)
Marsh Posté le 12-01-2006 à 14:31:21
en fait pr cette macro manu c'est pas presse car mon boss est ok pr deux fichiers word separé.
je ferai un description globale qd j'aurais plus le tps.
Par contre sais tu comment fonctionne la fct RECHERCHEV.
Je m'explique; j'ai deux onglets .
le premier est visible; le type commence à remplir la colonne 1 avec des noms qu'une liste lui propose, c'est le fameux pb de tout à l'heure que vs avez resolu! une fois qu'il a rempli la case, j'aimerai que la case d'a coté(A2 s"il à rempli A1) dans le feuillet visible se remplisse à son tour par la valeur du champ directement à la droite des valeur statique du feuillet 2.
expl:
feuillet 1:
choix pr A1 RN
la fct RECHERCHEV importe ds A2 du feuillet visible la valeur directement à droite de la case de la premiere colonne du feuillet contenant les données statiques. Elle va chercher la valeur à droite de RN dans le feuillet invisible puis l'exporte dans feuillet 1!Ca lui importe Raffinerie de normandie par ex!
C'est bete que l'on ne ouisse pas faire un schema!!!!
Marsh Posté le 12-01-2006 à 14:43:14
je donne la reponse sauf que la formule s'applique actuellement que pour une ligne j'aimarai qu'elle s'applique pr toute une colonne:
=RECHERCHEV(Etablissements!A1:A15;Etablissements!A1:B15;2;FAUX)
bon jcherche pr appliquer la formule à toute la colonne!
Marsh Posté le 12-01-2006 à 14:51:55
Pour que cela marche pour toutes les cellules, tu n'as pas d'autres choix que de copier la formule dans toutes les cellules...
Marsh Posté le 12-01-2006 à 15:17:51
te sur!!! qu'on peut pas à l'aide d'une macro appliquer la formule à toute la plage; ou bien apres avoir defini un nom sur la plage dont les cellules sont touchées par la formule
Marsh Posté le 12-01-2006 à 15:24:18
Là, mes compétences s'arrêtent et débute mon ignorance...
Marsh Posté le 13-01-2006 à 12:11:34
voila je suis en train de resoudre le pb j'ai cree un macro qui fait ca toute seule comme une grande::
le probleme ce la derniere ligne il me dit que l'indice a ppartient pas a la selection HELP please!!!!!
Sub formule()
'
' formule Macro
' Macro enregistrée le 12/01/2006 par Louis DENISE
'
'
Dim CFIN As String
Dim CINIT As String
Dim DINIT As String
Dim DFIN As String
Dim FIN As Integer
Dim plage As String
DINIT = "D2"
CINIT = "C2"
FIN = 2
Do
CFIN = "C" & CStr(FIN)
If CFIN = CINIT Then
Range("C2" ).Select
Else
plage = CINIT & ":" & CFIN
Range(plage).Select
End If
FIN = FIN + 1
Loop Until IsEmpty(Worksheets("Fichier Master" ).Range(CFIN).Value) = True
DFIN = "D" & CStr(FIN)
plage_D = DINIT & ":" & DFIN
Range(plage_D).Select
Worksheets("Fihier Master" ).Range(plage_D).FormulaArray = _
"=RECHERCHEV(Etablissements!$A$2:$A$14;Etablissements!$A$2:$B$14;1;FAUX)"
End Sub
la derniere bug jpense que les dollars peuvent etre enlevé j'essaie!
Marsh Posté le 13-01-2006 à 12:13:38
lol j'ai oublie un c a fichier!! comme quoi travailler en 1600*1200 ce pas top parfois!!!!
Marsh Posté le 13-01-2006 à 12:16:37
ca marche pas mainteant il me dit impossibilite de definir la prop FormulaArray de la classe range????la ce du foutage de guelle!
Marsh Posté le 13-01-2006 à 12:42:27
Fichier Master
Et maintenant ?
J'ai rien dit
Marsh Posté le 13-01-2006 à 12:46:19
C'est le range(CFIN) qui ne doit pas lui plaire, je pense...
Marsh Posté le 13-01-2006 à 13:43:18
sis ca ce nickel t'inkiet ce juste la derniere ligne qui va pas! et oue pas evident la!!
Marsh Posté le 11-01-2006 à 23:07:06
Bonjour
Al l'aide. je deviens fou
Je vous explique mon probleme!
J'ai un document word qui est compose de deux pages tres importantes...
la premieres lors de la fusion est censee editer que des docs donc le champ type de la base de donnée excel est egale a A
le seconde que des docs dont le chp type dans la base de données excel est T!
le probleme c'est que j'aimerais arriver dans un premier tepms a le faire avec des signets ou SKIPIF...enfin un truc qui marche !
ca serait par expl
etiquette 1: si "A ok" je fusionne tout ce qui correspond a la premiere page, la fusion n'est donc pas appliquée sur la deuxieme page censée rapatrier des champs du fichier excel.
etiquette 2: si "T ok" je fusionne tout ce qui correspond à la deuxieme page, apres l'etiquette 2 donc la page 1 n'est pas publipostée.
commun peut on dans un meme fichier sequencer l'enregistrement ou bien separer lors de la fusion.
need some help please!
thx
lden
Message édité par lden le 18-01-2006 à 08:10:36