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 :

Afficher un texte selon choix d'une liste déroulante


Sujet :

VBA Word

  1. #1
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut Afficher un texte selon choix d'une liste déroulante
    Bonjour,

    J'aimerais afficher un texte spécifique selon le choix d'une liste déroulante

    J'ai chercher pendant des heures sur Google, et à chaque fois je tombe sur des réponses plus complexes que ce que je souhaite faire (lien avec fichier Excel, etc...)


    Moi je veux juste faire ça :


    [ici se trouve la liste déroulante]


    [ici le texte qui va s'afficher en fonction du choix]



    Merci par avance !!

  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,

    Tu as deux options, soit injecter du texte dans un contrôle de formulaire, soit sur un signet.

    Il faut un code qui sera exécuté à la sortie de la liste déroulante.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ListeDeChoix()
    Select Case ActiveDocument.FormFields("MaListe").Result
    Case "Premier Choix"
    ActiveDocument.Bookmarks("S1").Range.Text = "Le texte de mon premier choix"
    Case "Second choix"
    .....
     
    End Select
    End Sub
    http://heureuxoli.developpez.com/off...d/formulaires/
    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 habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut
    Bonjour,

    Ok

    Alors j'ai choisis la méthode du signet

    Donc j'ai insérer un signet juste en dessous de ma liste déroulante, que j'ai nommé "S1"

    Puis j'ai renommé ma liste déroulante en "MaListe"

    Ensuite j'ai modifié les propriétés pour qu'elle exécute ce code à la sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ListeDeChoix()
    Select Case ActiveDocument.FormFields("MaListe").Result
    Case "1111"
    ActiveDocument.Bookmarks("S1").Delete
    ActiveDocument.Bookmarks("S1").Range.Text = "111111111111111111"
    Case "2222"
    ActiveDocument.Bookmarks("S1").Delete
    ActiveDocument.Bookmarks("S1").Range.Text = "222222222222222222"
    End Select
    End Sub
    Mais ça ne fonctionne pas

  4. #4
    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,

    Pourquoi supprimes-tu le signet ?
    Si le signet est détruit, il ne peut recevoir de donnée.

    Pour que ça fonctionne, il faut que la section contenant les contrôles de formulaire soit protégée et que la zone contenant le signet ne le soit pas.

    Il faut sortir de la liste, le simple fait de choisir une élément ne suffit pas, il faut mettre un contrôle supplémentaire pour que ce soit considéré comme sortie.
    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 !

  5. #5
    Candidat au Club
    Homme Profil pro
    littéraire
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : littéraire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous et meilleurs voeux,

    Je vais droit à l'essentiel, merci d'avance pour votre aide et pour la réponse la plus straight to the point.

    Je travaille sous Word 2010 avec formulaires hérités.

    But : afficher automatiquement une phrase à l'emplacement d'un signet dans un document word suite au choix sélectionné dans une liste déroulante située en amont du signet.

    Problème : la macro s'exécute pas à pas MAIS pas en sélectionnant un choix dans la liste déroulante manuellement.

    Détail : Ma liste déroulante est réalisée telle qu'à sa sortie la macro, affichant une phrase au signet désigné, s'exécute.

    Code : ld5 réfère ma liste déroulante et test1 est le signet où afficher la phrase "Le texte de mon premier choix", "Le texte de mon deuxième choix" ...

    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
    Sub ListeDeChoix()
     
    If Not ActiveDocument.ProtectionType = wdNoProtection Then
        ActiveDocument.Unprotect "test"
    End If
     
    Select Case ActiveDocument.FormFields("ld5").Result
    Case "fructueuse"
    ActiveDocument.Bookmarks("test1").Range.Text = "Le texte de mon premier choix"
    Case "infructueuse concluante"
    ActiveDocument.Bookmarks("test1").Range.Text = "Le texte de mon deuxième choix"
    Case "infructueuse non concluante"
    ActiveDocument.Bookmarks("test1").Range.Text = "Le texte de mon troisième choix"
    End Select
    ActiveDocument.Protect wdAllowOnlyFormFields
    End Sub
    Le code est construit de telle manière qu'il libère la protection sur le formulaire au moment d'afficher la phrase à l'emplacement du signet. La protection est rétablie à la suite.

    Cette portion de code est située dans Project de l'interface VBA, ensuite dans Microsoft Word Objets et donc dans "ThisDocument".

    Nb : avant cette macro existe une autre macro qui est sans effet sur la macro dont il est question ici.

    Bien à vous.

    T.

  6. #6
    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,

    J'ai une mauvaise nouvelle.

    Ton code fonctionne chez moi.
    Par contre, pourquoi passer par un signet dans un formulaire ?
    Tu pourrais tout aussi bien utiliser un champ texte et le remplir.
    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
    Candidat au Club
    Homme Profil pro
    littéraire
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : littéraire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Disons que la nouvelle est à moitié bonne.

    J'ai également essayé avec le champ texte, sans succès pour l'instant. La source d'erreur est certainement commune.

    Peux-tu, en ce 30 décembre...(désolé d'avance), jeter un rapide coup d’œil à fichier attaché. Il fonctionne en débogage mais pas via la formulaire lui-même.

    je te remercie d'avance.

    Bien à toi.

    test.zip

  8. #8
    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,

    Dans l'exemple du document, ça ne peut pas marcher, tu ne sors pas du champ de formulaire, la macro n'est pas exécutée.
    Tu as besoin d'au moins deux contrôles.
    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 !

  9. #9
    Candidat au Club
    Homme Profil pro
    littéraire
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : littéraire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    ok,

    ma solution : créer deux sections, la première contenant le formulaire qui est donc protégé et la second non protégée contenant le signet.

    Résultat : choix dans la liste déroulante fait apparaître le texte voulu au niveau du signet.

    Problème : la liste déroulante se remet d'office au choix par défaut (le 1ier dans le liste). Si je sélectionne à nouveau le même choix que précédemment, le texte voulu apparaît à la suite du précédent (j'ai donc par ex. deux fois le même texte qui se suit).

    Question : comment conserver le choix sélectionné dans la liste déroulante et actualiser le texte pour un autre choix dans cette même liste?

    Remarques : j'ai également essayé avec le champ texte tout en conservant les deux sections. Ne fonctionne qu'en débogage à nouveau. La question se pose également pour le liste déroulante et l'actualisation du champ texte.

    Le code ci-dessous reprend le test avec le champ text.

    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
    Sub ListeDeChoix()
     
    If Not ActiveDocument.ProtectionType = wdNoProtection Then
        ActiveDocument.Unprotect "test"
    End If
     
    Select Case ActiveDocument.FormFields("ld5").Result
    Case "fructueuse"
    'ActiveDocument.Bookmarks("test1").Range.Text = "Le texte de mon premier choix"
    ActiveDocument.FormFields("test1").Result = "Le texte de mon premier choix"
    Case "infructueuse concluante"
    ActiveDocument.Bookmarks("test1").Range.Text = "Le texte de mon deuxième choix"
    Case "infructueuse non concluante"
    ActiveDocument.Bookmarks("test1").Range.Text = "Le texte de mon troisième choix"
    End Select
    ActiveDocument.Protect wdAllowOnlyFormFields
    End Sub
    Merci d'avance pour toute autre piste.

    T.

  10. #10
    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,

    Pour la section supplémentaire, c'était plus facile, mais n'était pas demandé ou abordé dans la question de départ.
    En mettant une section en plus, tu peux quitter le contrôle pour passer à la section du document qui est éditable.

    Pour le texte qui s'ajoute, tu ne dis pas si la liste sera utilisée plusieurs fois. Dans ton cas, le signet est un point d'insertion, ce qui veut dire que le texte est ajouté juste derrière, mais juste avant celui qui s'y trouve déjà.

    La solution de mettre le texte dans le signet n'est pas bonne, le signet est détruit lorsqu'on y met le texte.

    Il te reste la possibilité d'utiliser autre chose qu'un signet, une cellule de tableau, un champ de formulaire, un contrôle ActiveX, un content control, ....
    Lorsque tu insères le texte, il prend la place du précédent.
    Perso, je trouve plus facile une cellule de tableau, on peut ne pas afficher les contour et ça passe inaperçu.
    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 !

  11. #11
    Candidat au Club
    Homme Profil pro
    littéraire
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : littéraire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Re, merci pour les conseils.

    La liste déroulante n'est destinée qu'à un choix unique. J'imagine cependant le cas où l'opérateur se trompe et doit refaire un nouveau choix.

    Voici la solution sans signet comme indiqué (sous entendu point d'insertion) mais avec un champ de formulaire hérité (caractérisé malgré tout par un signet..'test1')

    La solution semble élégante mais il doit y avoir mieux.

    La liste déroulante n'est plus remise à 'zéro'. En outre, le partage en section protégée ou non n'est plus nécessaire au même titre que les commandes mises désormais en commentaire.

    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
    Sub ListeDeChoix()
     
    'If Not ActiveDocument.ProtectionType = wdNoProtection Then
    '    ActiveDocument.Unprotect "test"
    'End If
     
    Select Case ActiveDocument.FormFields("ld5").Result
    Case "fructueuse"
    ActiveDocument.FormFields("test1").Result = "succes1"
    Case "infructueuse concluante"
    ActiveDocument.FormFields("test1").Result = "succes2"
    Case "infructueuse non concluante"
    ActiveDocument.FormFields("test1").Result = "succes3"
    End Select
     
    'ActiveDocument.Protect wdAllowOnlyFormFields
    End Sub

  12. #12
    Candidat au Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut même problème
    Bonjour, merci d'avance pour vos réponses.

    Je dois faire un formulaire, ou lorsque je choisis une case dans un bandeau, un texte apparaît en-dessous (un texte spécifique à chaque case), mon problème est que je ne sais pas me servir des macros, et encore moins insérer les zones de codage ... Si vous pouviez m'expliquer la démarche en détails, vous me sauveriez la vie !

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/07/2015, 11h36
  2. [WD-2010] Afficher un texte en fonction d'une liste déroulante
    Par fmailys dans le forum VBA Word
    Réponses: 3
    Dernier message: 07/09/2014, 13h55
  3. Réponses: 3
    Dernier message: 27/04/2013, 01h40
  4. affichage selon le choix d'une liste déroulante
    Par cell dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/07/2006, 10h16
  5. [FORMULAIRE] affichage selon le choix dans une liste déroulante.
    Par gailup dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/06/2006, 14h58

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