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 :

Liste des champs de publipostage


Sujet :

Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Liste des champs de publipostage
    Bonjour,
    J'aimerais savoir s'il est possible par programme de lister et récupérer la liste des champs de publipostage.
    En effet comme mes clients font leurs documents suivant le besoin, il faudrait que je prépare le fichier de données avec les champs utiles et non pas (plus) les 4000 champs qu'ils peuvent avoir accès.
    Merci d'avance,
    Vianney

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Je m'auto-réponds ... j'ai un peu avancé

    Je récupère le nombre de champs : nombre_fileds est un entier=word>>activedocument>>mailmerge>>fields>>count()

    Maintenant j'essaye de récupérer le nom des champs, mais cela ne fonctionne pas :
    nom_field est une chaîne=word>>activedocument>>mailmerge>>fields(boucle_signet)>>code
    ou
    nom_field est une chaîne=word>>activedocument>>mailmerge>>item(boucle_signet)

    Merci d'avance pour vos lumières

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je m'auto-réponds pour donner la solution

    word>>activedocument>>mailmerge>>fields>>count() ==> donner le nombre
    word>>activedocument>>mailmerge>>fields(boucle_field)>>code>>text ==> on boucle pour avoir le nom. ATTENTION : il y a devant le "mergefield"

    Désolé pour le dérangement,

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut mailmerge>>fields>>count
    Bonjour,
    Je réactive ma demande de 2017 (déjà).

    Le système fonctionne bien mais pour certains champs ce n'est pas possible.
    En effet quand les champs sont dans des zones de textes (et pas tous) la récupération ne fonctionne pas.

    Si quelqu'un avait une petite idée ..
    Merci d'avance
    Vianney

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par vianney972 Voir le message
    Bonjour,

    Quel est votre code et avez-vous un exemple qui ne marche pas ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Par exemple un champ dans l'entête/pied de page ainsi qu'un champ dans une zone texte (insertion/zone de texte/zone de texte simple).

    Le code est :
    Code Windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    				nombre_fields est un entier=word>>activedocument>>mailmerge>>fields>>count()
    				POUR boucle_field=1 _À_ nombre_fields
    					nom_field est une chaîne=SansEspace(Remplace(word>>activedocument>>mailmerge>>fields(boucle_field)>>code>>text,"MERGEFIELD",""))
    					nom_field=Remplace(nom_field,"""","")
    					nom_field=SansEspace(Remplace(nom_field,"\* MERGEFORMAT",""))
    					nom_field=SansEspace(ExtraitChaîne(nom_field,1," "))
    					trace(nom_field)
    				FIN

    Merci d'avance,

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par vianney972 Voir le message
    Bonjour,

    Si certains champs sont dans les en-têtes ou les pieds de page, il faut d'abord accéder à ces parties.
    Sinon, avez-vous un fichier exemple contenant ce que vous n'arrivez pas à identifier ?
    Merci d'expliquer ce sur quoi vous butez.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Ci joint un fichier posant problème.
    Merci

    Vianney
    Fichiers attachés Fichiers attachés

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par vianney972 Voir le message
    Pour lire le contenu de la matrice : Alt-G pour accéder à la fenêtre exécution, ou utiliser les Msgbox en place.

    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
     
    Option Explicit
     
     
    Sub DenombrerLesChamps()
     
    Dim I As Integer, J As Integer, IndexMatrice As Integer
    Dim MatriceChamps() As Variant
     
        With ActiveDocument
     
             IndexMatrice = 0
             For I = 1 To .Shapes.Count
                    With .Shapes(I)
                         If .TextFrame.HasText = True Then
                            With .TextFrame.TextRange
                               If .Fields.Count > 0 Then
                                  For J = 1 To .Fields.Count
                                       .Fields(J).Select
                                       ReDim Preserve MatriceChamps(1, IndexMatrice)
                                       MatriceChamps(0, IndexMatrice) = Selection.Range.Text
                                       MatriceChamps(1, IndexMatrice) = ActiveDocument.Shapes(I).Name
                                       IndexMatrice = IndexMatrice + 1
                                       'MsgBox Selection.Range.Text
                                  Next J
                               End If
                            End With
                         End If
                    End With
             Next I
     
             With .Sections(1).Footers(1)
                     If .Exists = True Then
                         If .Range.Fields.Count > 0 Then
                            For I = 1 To .Range.Fields.Count
                                .Range.Fields(I).Select
                                ReDim Preserve MatriceChamps(1, IndexMatrice)
                                MatriceChamps(0, IndexMatrice) = Selection.Range.Text
                                MatriceChamps(1, IndexMatrice) = "Pied de page section 1"
                                IndexMatrice = IndexMatrice + 1
                                'MsgBox Selection.Range.Text
                            Next I
                         End If
                    End If
            End With
        End With
     
     
        If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
            ActiveWindow.Panes(2).Close
        End If
        If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then
            ActiveWindow.ActivePane.View.Type = wdPrintView
        End If
     
        ' Restitution :  Alt-G pour accéder à la fenêtre exécution
        '---------------------------------------------------------
        For IndexMatrice = LBound(MatriceChamps, 2) To UBound(MatriceChamps, 2)
            Debug.Print "Nom du champ : " & MatriceChamps(0, IndexMatrice) & ", emplacement : " & MatriceChamps(1, IndexMatrice)
        Next IndexMatrice
     
     
    End Sub

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je vais étudier ... et transcrire en windev ce code.
    Merci beaucoup,

    Vianney

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    MERCI Eric ... cela fonctionne au top.

    Voici le code pour les windeviens ...

    Code WinDev : 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
    				nombre_shapes est un entier=word>>activedocument>>shapes>>count()
    				POUR boucle_shapes=1 _À_ nombre_shapes => dans les champs texte
    					nombre_fields_shapes est un entier=word>>activedocument>>shapes(boucle_shapes)>>textframe>>textrange>>fields>>count()
    					POUR boucle_fields_shapes=1 _À_ nombre_fields_shapes
    						nom_field_shapes est une chaîne=SansEspace(Remplace(word>>activedocument>>shapes(boucle_shapes)>>textframe>>textrange>>fields(boucle_fields_shapes)>>code>>text,"MERGEFIELD",""))
    						sql_requete_recherchezone_fusion_total="select * from zone_fusion_total where "+recherche_preparation("nom_zone_fusion",ExtraitChaîne(nom_field_shapes,1," "),"","")
    						HExécuteRequêteSQL(sql_source_recherche_zone_fusion_total,la_connexion,hRequêteSansCorrection,sql_requete_recherchezone_fusion_total)
    						HLitPremier(sql_source_recherche_zone_fusion_total)
    						SI ChaîneFormate(ExtraitChaîne(nom_field_shapes,1," "),ccMinuscule)=ChaîneFormate(sql_source_recherche_zone_fusion_total.nom_zone_fusion,ccMinuscule) ALORS => on vérifie que le champ est accepté
    							SI analyse_table_champ(nom_field_shapes)=Faux ALORS TableAjouteLigne(table_zone_pdf,nom_field_shapes,"") => on vérifie que le champ n'est pas encore présent
    						FIN
    					FIN
    				FIN
    				nombre_section est un entier=word>>activedocument>>sections(1)>>footers(1)>>range>>fields>>count()
    				POUR boucle_section_fields=1 _À_ nombre_section => dans l'entête/pied de page
    					nom_field_sections est une chaîne=SansEspace(Remplace(word>>activedocument>>sections(1)>>footers(1)>>range>>fields(boucle_section_fields)>>code>>text,"MERGEFIELD",""))
    					sql_requete_recherchezone_fusion_total="select * from zone_fusion_total where "+recherche_preparation("nom_zone_fusion",ExtraitChaîne(nom_field_sections,1," "),"","")
    					HExécuteRequêteSQL(sql_source_recherche_zone_fusion_total,la_connexion,hRequêteSansCorrection,sql_requete_recherchezone_fusion_total)
    					HLitPremier(sql_source_recherche_zone_fusion_total)
    					SI ChaîneFormate(ExtraitChaîne(nom_field_sections,1," "),ccMinuscule)=ChaîneFormate(sql_source_recherche_zone_fusion_total.nom_zone_fusion,ccMinuscule) ALORS
    						SI analyse_table_champ(nom_field_sections)=Faux ALORS TableAjouteLigne(table_zone_pdf,nom_field_sections,"")
    					FIN
    				FIN
    				nombre_fields est un entier=word>>activedocument>>mailmerge>>fields>>count()
    				POUR boucle_field=1 _À_ nombre_fields => dans le reste du document
    					nom_field est une chaîne=SansEspace(Remplace(word>>activedocument>>mailmerge>>fields(boucle_field)>>code>>text,"MERGEFIELD",""))
    					SI recherche_parametres_generaux("dossier_fusion_trace","N","","FUSION")="O" ALORS Trace(word>>activedocument>>mailmerge>>fields(boucle_field)>>code>>text)
    					nom_field=Remplace(nom_field,"""","")
    					nom_field=SansEspace(Remplace(nom_field,"\* MERGEFORMAT",""))
    					nom_field=SansEspace(ExtraitChaîne(nom_field,1," "))
    					sql_requete_recherchezone_fusion_total="select * from zone_fusion_total where "+recherche_preparation("nom_zone_fusion",ExtraitChaîne(nom_field,1," "),"","")
    					HExécuteRequêteSQL(sql_source_recherche_zone_fusion_total,la_connexion,hRequêteSansCorrection,sql_requete_recherchezone_fusion_total)
    					HLitPremier(sql_source_recherche_zone_fusion_total)
    					SI ChaîneFormate(ExtraitChaîne(nom_field,1," "),ccMinuscule)=ChaîneFormate(sql_source_recherche_zone_fusion_total.nom_zone_fusion,ccMinuscule) ALORS
    						SI analyse_table_champ(nom_field)=Faux ALORS TableAjouteLigne(table_zone_pdf,nom_field,"")
    					FIN
    				FIN

    Encore merci, et bonne fin de week end
    Vianney

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonsoir 'pour moi), bonjour (mardi matin),

    Et zut, je pensais que tout étais résolu mais un collaborateur a testé un autre fichier ... et plantage.
    Je planche mais je ne vois pas.
    Et oui, si dans un champ il y a une image cela ne fonctionne plus, voir le fichier joint ...

    Suis je pas au top, koko va au rhum en ce jour du chti'punch day ?

    Merci d'avance,
    Fichiers attachés Fichiers attachés

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par vianney972 Voir le message
    A tester.
    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
     
    Sub DenombrerLesImages()
     
    Dim I As Integer, J As Integer, IndexMatrice As Integer
    Dim MatriceChamps() As Variant
    Dim MonImage As PictureFormat
     
        With ActiveDocument
     
             IndexMatrice = 0
             For I = 1 To .Shapes.Count
                 With .Shapes(I)
                      If .Type = 13 Then
                         ReDim Preserve MatriceChamps(1, IndexMatrice)
                         MatriceChamps(0, IndexMatrice) = .Name
                         MatriceChamps(1, IndexMatrice) = ActiveDocument.Shapes(I).Name
                         IndexMatrice = IndexMatrice + 1
                         MsgBox .Name
                      End If
                End With
            Next I
        End With
     
     
        ' Restitution :  Alt-G pour accéder à la fenêtre exécution
        '---------------------------------------------------------
        If IndexMatrice > 0 Then
           For IndexMatrice = LBound(MatriceChamps, 2) To UBound(MatriceChamps, 2)
               Debug.Print "Nom du champ : " & MatriceChamps(0, IndexMatrice) & ", emplacement : " & MatriceChamps(1, IndexMatrice)
           Next IndexMatrice
        End If
     
    End Sub

    D'autres types peuvent exister. Dans ce cas tester les différentes occurrences du type https://docs.microsoft.com/fr-fr/off...e.msoshapetype

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    Merci Eric, cela fonctionne à merveille.
    Encore merci pour cette aide
    Vianney

Discussions similaires

  1. comment obtenir la liste des champs d'une table
    Par richard038 dans le forum SQL
    Réponses: 4
    Dernier message: 13/02/2009, 18h28
  2. Récupérer la liste des champs d'une table
    Par mister3957 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 17/04/2007, 14h56
  3. Liste des champs d'un TClientdataset
    Par richard038 dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2006, 11h12
  4. Liste des champs d'une requête
    Par Virgile59 dans le forum Access
    Réponses: 4
    Dernier message: 07/02/2006, 11h46
  5. Liste des champs modifiés avant post
    Par SebCBien dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/02/2004, 10h10

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