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

Word Discussion :

Effectuer des enregistrements conditionnés sur une seule page [WD-2007]


Sujet :

Word

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Effectuer des enregistrements conditionnés sur une seule page
    Bonjour,

    Tout d'abord je m'excuse par avance de mon opportunisme avec mon 1er msg.

    Je cherche à effectuer un publipostage classique avec des champs de fusion.
    Problème : ma source de donnée se trouve être un fichier txt dans lequel les enregistrements sont issus d'une requête SQL, le nombre de lignes sont de fait complètement variables.

    En clair dans la source de donnée on retrouve ça :

    Nom Date Debut Date fin Hopital

    Nom Datedebut1 DateFin1 NomHopital1
    Nom Datedebut2 DateFin2
    Nom Datedebut3 DateFin3
    Nom Datedebut4 DateFin4 NomHopital2

    ...

    Nom DatedebutN DateFinN NomHopitalN


    Dans la lettre fusionnée je cherche donc à lister l'ensemble des dates (de congés) prise par cette même personne sur une seule page.
    Difficulté supplémentaire : l'hôpital n'est pas un champs obligatoire et le client souhaiterait voir sur la feuille d'une part les dates de congés avec séjour hospitalier (lorsque dans une ligne d'enregistrement on retrouve un nom d'hôpital de facto c'est un sejour hospitalier) et d'autre part les congés sans séjour hospitalier.

    Grosso modo la lettre fusionnée donnerait ça :

    Nom

    Dates de congés avec séjour hospitalier :

    NomHop1 DateDebut1 DateFin1
    NomHop2 DateDebut2 DateFin2
    NomHop3 DateDebut3 DateFin3
    ...

    Dates de congés SANS séjour hospitalier :

    DateDebut4 DateFin4
    ...

    Je pensais avoir trouver la solution avec le champs NEXT mais il ne fait que passer à la ligne suivante, or comme le nombre d'enregistrements est variable je ne peux mettre dans ma lettre type, un certain nombre de NEXT pré-déterminé.
    L'idéal serait donc de faire une boucle qui effectuerait des NEXT jusqu'à ce qu'on ne trouve plus d'enregistrement mais impossible de trouver un champs qui ressemble à un While ou un For.
    Peut être (sûrement même) la solution se trouve dans la macro ?
    Dans le doute je laisse quand même le code de la macro, effectué depuis un logiciel de développement :

    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
     
     
     
    Sub mamacro ()
     
        ' Lecture du nom du document principal
        g_NomDocPpal = ActiveDocument.Name
     
           ' Lecture du nom du document de fusion
        g_NomDocFus = ActiveDocument.MailMerge.DataSource.Name
     
        ' Réalisation de la Fusion
        With ActiveDocument.MailMerge
            .OpenDataSource      Name:="C:\DEV\sourcededonees.txt"
            .Destination = wdSendToNewDocument
            .MailAsAttachment = False
            .MailAddressFieldName = ""
            .MailSubject = ""
            .SuppressBlankLines = True
     
           '        
         With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                ' lastrecord
     
              End With
            .Execute Pause:=True
     
     
        End With
        Selection.WholeStory
        Selection.Fields.Update
     
        ' Fermeture du document principal qui ne sert plus à l'utilisateur
       Documents(g_NomDocPpal).Close SaveChanges:=wdDoNotSaveChanges
     
     
    End Sub
    Aidez un pauvre stagiaire à qui on lui impose des deadline

    Merci d'avance pour vos futures réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Le publipostage proposé par Word ne permet pas de faire ce genre de mise en page.
    Avec des artifices de condition, on peut y parvenir mais on doit dès le départ connaître le nombre de lignes maximum qu'il y aura.


    Je vais te donner un lien vers un morceau de tutoriel qui traite ce genre de choses.

    http://heureuxoli.developpez.com/off.../publipostage/

    Et plus précisément :

    http://heureuxoli.developpez.com/off...ostage/#L8-D-2

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci Heureux Oli d'avoir pris la peine de répondre


    Intéressant de savoir que Word ne dispose pas de Champs correspondant à une boucle..

    La solution réside donc bien dans le contenu de la macro, problème je n'y connais absolument rien en VBA.

    Je suis quand même parvenu à un résultat grâce au tuto de Heureux Oli et de ce topic

    En y mettant une boucle de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            With ActiveDocument.MailMerge
            .OpenDataSource Name:="C:\Users\Desktop\fiche_position.txt"
     
        For i = 1 To  .DataSource.RecordCount
     
    nomhop = ActiveDocument.MailMerge.DataSource.DataFields("nom_hopital").Value
     
    ActiveDocument.Bookmarks("nom_hopital").Range.Text = nomhop + " "
     
    ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
     
    Next i
    Mais le count ne s'effectue pas (ca retourne -1), pourtant en remplaçant la méthode RecordCount par un chiffre test, l'opération tourne sans pb..
    Ma source de donnée est un fichier txt, peut être que le souci vient de là ?

    Accessoirement, au lieu d'avoir une seule page avec tous les enregistrements, j'ai plusieurs feuilles...

    EDIT : j'ai résolu mes pbs.

    Le rowcount ne s'execute pas sur un fichier txt, allez savoir pourquoi..
    D'autre part, il faut demander à avoir une seule feuille pour ne pas se retrouver avec plusieurs feuilles (firstrecord = lastrecord)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] impression des tableaux sur une seule page par macro
    Par free_dom dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/06/2011, 11h21
  2. affichage des données sur une seule page
    Par webdesign77 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/03/2009, 23h23
  3. Définir des marges différentes sur une seule page
    Par GatH7614 dans le forum Mise en forme
    Réponses: 1
    Dernier message: 30/06/2008, 16h17
  4. imprimer sur une seule page
    Par cgodefrw dans le forum Access
    Réponses: 5
    Dernier message: 12/04/2006, 16h13
  5. 2 types de lien sur une seule page
    Par MiJack dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 06/10/2004, 09h02

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