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