IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Publipostage Word à partir d'Excel [FAQ]


Sujet :

Delphi

  1. #21
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Points : 190
    Points
    190
    Par défaut
    as tu cherché sur le MSDN ?

    par exemple ça

    Je sais, c'est pas tout à fait la réponse à la question, mais ça peut informé de la façon dont focntionne mailmerge

    PS : Ecoute Laurent quand il te dit que si tu mets ton source en donwload, on pourra plus facilement t'aider (met le projet, le fichier et un exemple de fichier source)

    @Laurent Dardenne : je suis d'accord, faut pas rajouter une complication de plus en passant par VB, mais comme beaucoup d'étudiants 'tripatouillent' avec ça avant d'attaquer le pascal objet, je me suis dis que ça pouvait donner une piste. J'ai voulu bien faire, désolé

  2. #22
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par diam's
    J'ai voulu bien faire
    J'ai bien compris, y a pas de soucis

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    J'vous remercie de vous pencher sur mon probleme...


    J'ai pas mal potassé oui, et j'arrive à creer mon publipostage mais comme j'ai dit plus haut j'en crée une multitude et un seul contient le publipostage total...


    J'ai conclu a un probleme d'algo mais j'ai beau comparer avec la FAQ je suis raccord (cf mon code plus haut )...


    J'ai mis un nombre de point d'arrêt astronomique et ca se déroule bien, je parcours le fichier, chaque ligne chaque champs (logique puisque j'ai un publipostage qui fonctionne)...




    Le seul petit hic reste donc que la procédure nécessite une intervention humaine...

  4. #24
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Je regarde ça dés que j'ai 5 minutes...

  5. #25
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Points : 190
    Points
    190
    Par défaut
    et est tu sûr du 'mainDocumentType' ?

    Essaie ça :
    wdCatalog
    wdDirectory
    wdEMail
    wdEnvelopes
    wdFax
    wdFormLetters
    wdMailingLabels <--
    wdNotAMergeDocument

    Autrement, met toute cette partie de ton code entre les end (While / MailMerge/wordDoc), je pense que c'est la solution à la création des 69 fichiers vide en trop.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
         NewWord:=WordApplication1.ActiveDocument;
         DocResultat := SaveDialog1.Filename;
         NewWord.SaveAs(DocResultat,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                         EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                         EmptyParam);
          //DocResultat := chemin+'Resultat'+IntToStr(LigneCourante)+'.doc';
     
          Inc(LigneCourante);
          NewWord.Close(SaveChanges,EmptyParam,EmptyParam);
    Pour info, la fusion doit se faire en une seule fois si dans ton fichier 'DOT' tu as bien spécifié qu'il s'agissait d'étiquettes et si tu as bien choisi ton type de document. Dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        .DataSource.FirstRecord = 1
        .DataSource.LastRecord = 70 // ou le n° de ton dernier enregistrement
    J'ai trouvé ça sur le MSDN à cette adresse

    Pour ce qui est des séparateurs de champs, j'ai pas trouvé...

  6. #26
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    OK merci j'vais regarder ca aujourd'hui, j'vous tient au courant

  7. #27
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Et ba voilà ca avance


    J'arrive a créer un seul fichier contenant les etiquettes...

    Voici le code modifié (j'ai laissé les commentaires pour montre ce qui a été supprimé) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    function TForm1.publipostage (LigneTotal : integer; Dot : string; Fichier, chemin : string):integer;
    var
       DocWord : _Document;
       NewWord : _Document;
     
       DotFilename,
       DocResultat,
       Pause,
       SaveChanges,
       Visible : OleVariant;
     
       LigneCourante : integer;
     
     
    begin
     Try
     
    SaveDialog1.Filter :='Document Word (*.doc)|*.doc';
     SaveDialog1.FileName := Fichier;
     SaveDialog1.Execute;
     if (SaveDialog1.FileName<>'') then
     
     Begin
     
      SaveChanges := wdDoNotSaveChanges;
     
       // Contient les champs de publipostage
      //DotFilename :='C:\Temp\Mailing.dot';
      DotFilename := Dot;
       // Démarre à la premiére ligne
      LigneCourante:=1;
       // N'affiche pas le document
      WordApplication1.Visible := False;
     
       // On ouvre le Modéle de document concerné par le publipostage
      showmessage(DotFileName);
     
     
     
      DocWord:=WordApplication1.Documents.Open(DotFileName,EmptyParam,EmptyParam,
                                               EmptyParam,EmptyParam,
                                               EmptyParam,EmptyParam,
                                               EmptyParam,EmptyParam,
                                               EmptyParam,EmptyParam,
                                               EmptyParam);
          {Prépare le publipostage}
      With DocWord Do
       With MailMerge Do
       Begin
          // Définit le type du document principal du publipostage
         //MainDocumentType := wdFormLetters;
         MainDocumentType := wdMailingLabels;
     
          // Associe une source de données au document spécifié, qui devient alors
          // le document principal, s'il ne l'était pas encore.
         showmessage (chemin+Fichier);
     
         OpenDataSource(chemin+Fichier,
                        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                        EmptyParam,EmptyParam,EmptyParam);
     
         Destination := wdSendToNewDocument; // Définit la destination du résultat de la fusion
     
         MailAsAttachment := False;  // Le résultat n'est pas envoyé par mail
         MailAddressFieldName := ''; // Adresse Email
         MailSubject := '';          // Sujet du mail
     
         SuppressBlankLines := True; // les lignes vides sont supprimées quand les
                                     // champs d'un document principal
                                     // de publipostage sont vides.
     
      {Execute le publipostage}
     
        {Pause
          True : Word s'interrompe et affiche une boîte de dialogue de dépannage
           chaque fois qu'il rencontre une erreur liée à la fusion et au publipostage.
          False : consigne les erreurs dans un nouveau document.
        }
        Pause:=False;
         // traite toutes les lignes
        DataSource.ActiveRecord:= wdLastRecord;
         // Récupére le nombre de ligne à traiter
        LigneTotal:=DataSource.ActiveRecord;
         // Se repositionne sur la premiére ligne
        DataSource.ActiveRecord:= wdFirstRecord;
     
     
          DataSource.FirstRecord := 1;
          DataSource.LastRecord := wdLastRecord;
          DocResultat := SaveDialog1.Filename;
     
        //While LigneCourante <= LigneTotal do
         //begin
          //DataSource.FirstRecord := LigneCourante;
          //DataSource.LastRecord  := LigneCourante;
     
          Execute(Pause);
          {Rend actif le document crée par la fusion}
     
          NewWord:=WordApplication1.ActiveDocument;
     
     
          //Inc(LigneCourante);
     
          NewWord.SaveAs(DocResultat,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                         EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                         EmptyParam);
     
          //end; // while
     
          NewWord.Close(SaveChanges,EmptyParam,EmptyParam);
     
     
      //DocResultat := chemin+'Resultat'+IntToStr(LigneCourante)+'.doc';
     
     
       End; {With MailMerge}
     
      {With WordDoc}
       end;
     Finally
      DocWord.Close(SaveChanges,EmptyParam,EmptyParam);
     end;
    end;

    Pour le coup du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //MainDocumentType := wdFormLetters;
         MainDocumentType := wdMailingLabels;
    l'un ou l'autre ne change rien (c'est bizarre d'ailleurs).


    Il me reste mon probleme de séparateur qui doit être spécifié à chaque fois, j'avais pensé que ca pouvait se changer dans cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    OpenDataSource(chemin+Fichier,
                        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                        EmptyParam,EmptyParam,EmptyParam);
    mais aucun champs n'est prévu pour le séparateur.



    Ensuite à la fin de mon programme j'ai word qui reste ouvert (une fenetre sans document dedans). Je vais voir pour regler ca....

  8. #28
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Bon ba autant pour moi, en mode débugage le Word reste ouvert mais pas en execution normale...

    Pareil pour la demande de séparateur qui a disparue...


    Bon ba en théorie la c'est bon ca marche


    Merci de tous vos efforts

  9. #29
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Points : 190
    Points
    190
    Par défaut
    Si c'est bon pour toi, pense au tag

  10. #30
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    C'est fait...

  11. #31
    Nouveau Candidat au Club
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Solution au problème
    J'avais exactement le même problème.
    Je l'ai résolut en mettant les champs de mon csv entre double cotes (").
    Depuis Word ne me demande plus de lui préciser quel est le séparateur de champs, la fusion passe nickel!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2013] Publipostage Word à partir d'Excel : Création d'un nombre de pages illimité
    Par Chtik dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/03/2014, 19h20
  2. [XL-2010] Ouvrir publipostage Word à partir d'une macro Excel
    Par jncoffy dans le forum Excel
    Réponses: 1
    Dernier message: 05/03/2014, 18h52
  3. Réponses: 1
    Dernier message: 05/04/2012, 13h38
  4. [VBA-E] ouverture de fichier word à partir d'Excel
    Par aramge dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/08/2006, 09h18
  5. [VBA-E]Insérer des autotext dans Word à partir d'excel
    Par noordman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2006, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo