Leçon 2 – Interagir avec l’utilisateur : Inputbox()

Il est temps pour nous d’entrer à présent dans le vif du sujet à travers un exemple concret que nous nous attacherons à améliorer au fil des leçons. Nous allons, dans un premier temps, apprendre à interagir avec l’utilisateur, à l’aide de l’instruction inputbox().

Pour illustrer cette instruction, nous allons renseigner un document type (en l’occurrence une promesse d’embauche), à l’aide de boîtes de dialogue affichant des questions. Les réponses seront insérées dans le document Word à des emplacements marqués par des signets.

Voici les informations à récolter :

  1. genre du destinataire (signets Word : genre et genre2 : genre apparaît à trois reprises dans notre document)
  2. prénom et nom du destinataire (signet : nom)
  3. sa rue (signet : rue)
  4. son code postal et sa ville (signet : ville)
  5. le type de contrat (CDD, CDI) (signet : typecontrat)
  6. sa qualité (sa fonction) (signet : qualite)
  7. son fixe (sa rémunération brute) (signet ; fixe)
  8. son lieu de travail (signet : lieutravail)

Nous allons interroger l’utilisateur 8 fois. Lors d’un prochain exercice nous verrons qu’il est possible de récolter l’ensemble des informations par le biais d’une seule interface entièrement personnalisée mais l’objectif ici est de manipuler la syntaxe Inputbox() que vous devez savoir maîtriser.

La syntaxe Inputbox()

La syntaxe complète est InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Les éléments entre [] sont facultatifs. On en déduit donc que la syntaxe minimale est donc Inputbox(prompt).

Mais pour cet exercice, nous utiliserons 3 arguments :

  • prompt : c’est en fait la question posée à l’utilisateur. Par exemple « Destinataire : Madame, Monsieur, Messieurs… ». Cet argument est OBLIGATOIRE.
  • title : titre de la boîte de dialogue qui s’affiche. Ce pourrait être « Destinataire » pour la question ci-dessus.
  • default est permet de suggérer à l’utilisateur une réponse par défaut. Ex : pour la première question, ce pourrait être « Monsieur ». Cela permet à l’utilisateur de gagner un peu de temps…

Pour les trois derniers paramètres sont peu utilisés et j’avoue ne les avoir jamais utilisé en plus de 10 ans de programmation. C’est dire si vous pouvez vous en passer…

Récupérer les réponses : définir des variables

Ouvrez le document « Promesse.doc » et pressez les touches Alt F11 pour afficher le module de macro.

Nous allons attacher notre macro, non pas à normal.dot mais à Promesse.doc puisque cette macro requiert obligatoirement ce document pour fonctionner.

projet

Positionnez-vous sur le projet PromesseThisDocument et faites un double-clic.

Nommez votre macro « promesse » (faisons simple !) : dans la grande fenêtre de droite, tapez sub promesse et appuyez sur entrée. Le logiciel complète l’instruction avec () et end sub.

Entre ces deux lignes, saisissez la première boîte de dialogue : InputBox(« Destinataire : Madame, Monsieur, Messieurs… », »Destinataire », »Monsieur »)

Nous posons à l’utilisateur une question. C’est donc que nous attendons (en toute logique), une réponse. Nous allons donc affecter une variable à cette réponse. Nous allons la nommer Genre$. Le symbole $ à la fin de la variable indique que le résultat attendu est une chaîne de texte. Attention également à respecter la graphie Majuscules/minuscules.

Pour associer réponse et question, il suffit de saisir :

Genre$=InputBox(« Veuillez saisir le genre du destinataire (Madame, Monsieur) », »Destinataire », »Monsieur »)

 

La structure est donc : variable=inputbox(prompt)

Pour tester votre macro, appuyez sur lecture. Une boîte de dialogue s’affiche à l’écran. Saisissez votre réponse et validez. Il ne se passe rien, tout simplement parce nous n’avons pas encore dit au logiciel quoi faire de la variable !

Insérer la réponse dans un document Word : les signets

Il ne nous reste plus à présent qu’à signifier à Word, étape par étape, les actions à accomplir :

action à accomplir instruction VBA
aller à l’emplacement du signet selection.goto ,,, »signet »
insérer la variable  (réponse) selection.insertafter réponse

et cela pour chacune des 8 questions à poser.

Atteindre un signet : l’instruction .Goto([What], [Which], [Count], [Name])

L’instruction .goto utilise plusieurs arguments optionnels (=ils sont entre crochets).
Voyons à quoi correspondent chacun de ces arguments.

What : indique le type d’élément à atteindre. Il peut s’agir :

  • d’un signet : wdGotoBookmark
  • d’une page : wdGotoPage
  • d’un tableau situé dans la page Word : wdGotoTable
  • d’un objet : wdGotoObject
  • … (pour la liste complète, je vous invite à vous référer à l’aide (mot-clé : Goto)).

Nous souhaitons atteindre un signet. C’est l’argument wdGotoBookmark qui nous intéresse. Cependant, son utilisation est facultative puisque entre crochets et comme il est long et compliqué à écrire, nous allons nous en passer ! Mais si vous êtes puriste, ne vous privez pas de le rajouter.
Nous allons également zapper sur les arguments facultatifs Which et Count.

Par contre, nous allons renseigner l’argument Name qui va contenir le nom du signet à atteindre. Le premier signet est genre (cf. tout en haut du didacticiel). Le nom du signet doit être saisi entre «  ».

Pour atteindre le signet genre, nous tapons donc Selection.GoTo , , , « genre ». De la même façon, pour atteindre le signet ville, nous utiliserons la syntaxe Selection.Goto ,,, « ville » et ainsi de suite.

Remarque : vous aurez noté la présence de ,,, dans la syntaxe ci-dessus. Lorsqu’un argument optionnel est omis, on doit néanmoins matérialiser son emplacement par une virgule, sauf en fin d’instruction. Si nous avions écrit Selection.GoTo, « genre » VBA aurait associé « genre » au champ What et renvoyé un message d’erreur (« genre » ne fait pas partie de la liste des réponses autorisées pour le champ What).

Notre syntaxe se présente donc pour l’instant comme ceci :

sub promesse()
Genre$=InputBox(« Destinataire : Madame, Monsieur, Messieurs… », »Destinataire », »Monsieur »)
Selection.GoTo , , , « genre »
end sub

Lancer la macro  lecture. Il y a un léger progrès : le curseur se déplace à l’emplacement du premier signet. Il nous reste maintenant à insérer la réponse de l’utilisateur dans le texte.

Insérer du texte : l’instruction selection.Insertafter

C’est la plus simple des instructions de cette leçon : il suffit de taper : Selection.InsertAfter nom_de_la_variable.

Ex : pour insérer la variable Destinataire$, il faut donc taper :

Selection.InsertAfter Genre$

Voici donc le code tel qu’il se présentera jusqu’à la variable 4 de notre mini cahier des charges. A vous de tenter de compléter la suite…

Sub promesse()
Genre$ = InputBox(« Genre=InputBox(« Destinataire : Madame, Monsieur, Messieurs… », »Destinataire », »Monsieur »)
Selection.GoTo , , , « genre »
Selection.InsertAfter Genre$ &  »  » —> Remarque : &  »  » permet d’insérer un espace entre le titre et le nom du destinataire, faute de quoi l’ensemble serait accolé.
Selection.GoTo , , , « genre2 »
Selection.InsertAfter Genre$
Nom$ = InputBox(« Prénom et NOM du destinataire »)
Selection.GoTo , , , « nom »
election.InsertAfter Nom$
Rue$ = InputBox(« Adresse du destinataire »)
Selection.GoTo , , , « Rue »
Selection.InsertAfter Rue$
Ville$ = InputBox(« Code postal et VILLE »)
Selection.GoTo , , , « ville »
Selection.InsertAfter Ville$
End Sub

Vous calez ? Voici la solution pour la fin du code

TypeContrat$ = InputBox(« Type de contrat », , « Contrat à durée indéterminée »)
Selection.GoTo , , , « typecontrat »
Selection.InsertAfter TypeContrat$
Qualite$ = InputBox(« Fonction occupée »)
Selection.GoTo , , , « qualite »
Selection.InsertAfter Qualite$
Fixe$ = InputBox(« Montant de la rémunération brute mensuelle »)
Selection.GoTo , , , « fixe »
Selection.InsertAfter Fixe$
LieuTravail$ = InputBox(« Lieu de travail », , « Paris »)
Selection.GoTo , , , « lieutravail »
Selection.InsertAfter LieuTravail$
End Sub

Quelques remarques :
Le programme pose une question à l’utilisateur, déplace le curseur dans le texte et insère la réponse. Puis il recommence pour chacune des 7 autres questions.
Nous aurions tout aussi bien pu grouper toutes les questions en début de programme puis procéder ensuite à l’insertion de l’ensemble des variables. Le résultat eut été identique.

Il ne vous reste plus qu’à sauvegarder notre code, à refermer l’éditeur VBA et à affecter une icône à notre macro pour pouvoir y accéder aisément (veillez à bien attacher cette icône au document Promesse et non à normal.dot)

Au cours de cette leçon, nous avons appris

  • à interroger l’utilisateur (InputBox)
  • à affecter les réponses à une variable
  • à se déplacer dans le document Word à l’aide des signets et de l’instruction Selection.Goto
  • à insérer du texte dans un document Word à l’aide de l’instruction Selection.InsertAfter

Vous êtes donc en mesure à présent :

  • d’adapter cette macro à d’autres documents : contrats, modèle de lettre, entête de télécopie (n’oubliez pas de définir vos signets Word dans votre document !).

Mine de rien, nous avons donc parcouru un grand chemin lors de cette deuxième leçon.

Lors d’une prochaine leçon, nous verrons comment simplifier encore un peu ce code. Et, pourquoi pas, comment créer nos propres boîtes de saisie !

 

Télécharger fichier exemple

 

Nadège GUILBERT

Conceptrice, animatrice du site www.top-assistante.com

Les commentaires sont fermés.

  • Top-Assistante est une marque déposée à l'INPI. Aucune reproduction sans le consentement écrit de l'auteur