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

VBA Word Discussion :

AJouter un IF{} par code ? [WD-2000]


Sujet :

VBA Word

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 417
    Par défaut AJouter un IF{} par code ?
    Bonjour à tous et merci de votre aide et de votre temps.

    J'ai 4 documents word de publi-postage qui contienne à eux tous environ 500 champs de fusion.

    Il faut que je les modifie pour ajouter un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {IF{Mergefield EstVariable} = "-1" {Ici le code existant} "Ici texte pour quand faux"}
    Quelqu'un a-t-il y moyen de faire cela par code ?.

    Note : Une explication détaillée serait appréciée car ma spécialité c'est Acces et que je débute en Word.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    C'est quoi Access ?

    Une piste, c'est peu^t-être pas la meilleure, mais c'est tout ce que j'ai pour l'instant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub AjouterChampDsChamp()
    Dim myFld As Field
    Set myFld = Selection.Fields.Add(Range:=Selection.Range, Type:=wdFieldEmpty, Text:="€")
    myFld.ShowCodes = True
     
    With Selection.Find
        .Text = "€"
        .Execute
    End With
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldDate
     
     
    End Sub
    Le principe est simple, on ajoute un champ avec un texte par exemple €.
    On demande l'affichage du code du champ.
    De cette manière, on peut faire une recherche sur notre texte contenu dans le champ avec la méthode Find de l'objet Selection.
    Si on trouve le caractère, on peut à nouveau ajouter un champ sur la Selection qui se trouve dans le premier champ.

    Essaie le code, il fonction seul et le résultat donne deux champs imbriqués.

    Reviens si ça te convient.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre Expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Par défaut
    Bonjour,

    est-ce qu'il y a quelque chose qui nous donne la fin de la partie code existant?
    Parce qu'il y a peut être moyen en jouant sur les InsertBefore et InsertAfter
    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
     
    Sub test()
    Dim a As Field
    Dim chaine As String
    For Each a In Fields
    chaine = "=" & Chr(34) & "-1" & Chr(34)
    a.ShowCodes = True
    a.Select
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
        a.Select
    Selection.InsertBefore ("IF")
    Selection.InsertAfter (chaine)
    Next
    End Sub
    Ce bout de code insère avant le champ IF dans une zone de champ
    Il insère également après ="-1"

    Il reste à l'adapter en étendant la sélection au texte de départ (code existant)
    avant de faire l'insertion d'un nouveau code de champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
    Aller à la fin de cette sélection et insérer après le code si faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaine 2= chr(34) & " " & chr(34) & "code si faux" & chr(34)
    Selection.InsertAfter (chaine2)
    Personnellement j'utiliserai le surlignage par exemple de ce texte (ou saut de paragraphe, un truc du genre qui puisse être recherché).
    Du genre chercher du code de champ et étendre jusqu'au premier caractère non surligné.

  4. #4
    Membre Expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Par défaut
    Ceci étant pour ceux que tu veux faire, cela reste relativement simple tant que les champs ne sont pas imbriqués les uns dans les autres

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 417
    Par défaut
    Merci Heureux-oli avec ton code je n'obtiens pas 2 champs imbriqués mais 2 champs côte à côte.

    Ce que je souhaite faire c'est entourer le champ existant par une structure du type if then else.

    Voilà ce que j'obtient avec un de mes IF{} existant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF chr(19) MERGEFIELD "IS_TRANSFER" chr(21)="-1" chr(19) MERGEFIELD "P1_Amount" \# "#,##0.00"chr(21) 
     
    MERGEFIELD "IS_TRANSFER"
     
    MERGEFIELD "P1_Amount" \# "#,##0.00"
    Voici le code dont je me suis servi pour afficher cela. Il me semble que c'est toi qui me l'avais donné :-).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Test()
        Dim f As Field
        For Each f In ActiveDocument.Fields
            Debug.Print f.Code
            Debug.Print
        Next f
    End Sub
    Chr(19) et chr(21) sont là pour matérialiser des caractères spéciaux utilisés comme délimiteurs.

    Je pense que ton code est une bonne piste mais je ne vois pas comment l'exploiter.

    Faut-il créer un champ IF{} puis y ajouter le "then" et le "else".

    Si je sélectionne mon champ existant et que je fais [Ctrl}[F9] j'obtiens une inclusion du champ existant dans le nouveau champ.

    A+

    PS : Je pense que tu blaguais mais dans le doute Access c'est Microsoft Access une BD, petite cousine de MS-SQL Server.

    A++
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    J'ai revu mon code et effectivement, il donne deux champs côte à côte si on utilise la première ligne.

    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
     
    Sub AjouterChampDsChamp()
    Dim myFld As Field
    Set myFld = Selection.Fields.Add(Range:=Selection.Range, Type:=wdFieldEmpty, Text:="€")
    myFld.ShowCodes = True
    Selection.HomeKey unit:=wdStory
     
    With Selection.Find
        .Text = "€"
        .Forward = True
        .Execute
    End With
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldDate
     
    End Sub
    Maintenant, on devrait pourvoir mettre la selection sur les champs les uns après les autres.
    Et éventuellement rechercher le code du champ si on le connaît.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre Expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Par défaut
    Bonjour,

    Pour imbriquer les deux champs, il faut d'abord sélectionner le premier puis
    faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myFld = Selection.Fields.Add(Range:=Selection.Range, Type:=wdFieldEmpty, Text:="€")

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 417
    Par défaut
    Merci à vous, je teste cela demain et je vous reviens.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Ajouter des TextBox par code sur un Form
    Par ClubberGuy dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 05/05/2011, 16h47
  2. ajouter une colonne par code SQL
    Par zalalus dans le forum Développement
    Réponses: 5
    Dernier message: 16/07/2010, 18h32
  3. Ajouter des éléments par Code c# sans être autorisé
    Par hassine dans le forum SharePoint
    Réponses: 17
    Dernier message: 12/08/2009, 14h03
  4. Ajouter une ressource par code
    Par SyLvErStOrM dans le forum C#
    Réponses: 8
    Dernier message: 13/03/2008, 11h48
  5. [VB 2005][DatagridView] Ajouter une ligne par code
    Par RaelRiaK dans le forum VB.NET
    Réponses: 3
    Dernier message: 23/01/2007, 23h54

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