0% ont trouvé ce document utile (0 vote)
266 vues43 pages

Introduction à Visual Basic et Macros

Transféré par

lulukilo2
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
266 vues43 pages

Introduction à Visual Basic et Macros

Transféré par

lulukilo2
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Présentation de Visual Basic

Visual Basic est un outil développé par Microsoft pour développer facilement des applications
fonctionnant sous Microsoft Windows ©.

Visual Basic est, comme son nom l'indique, un outil visuel permettant de créer sans notion de
programmation l'interface graphique (GUI - Graphical User Interface) en disposant à l'aide de la souris
des éléments graphiques (boutons, images, champs de texte, menus déroulants,...).

L'intérêt de ce langage est de pouvoir associer aux éléments de l'interface des portions de code
associées à des événements (clic de souris, appui sur une touche, ...). Pour cela, Visual Basic utilise un
petit langage de programmation dérivé du BASIC (signifiant Beginners All-Purpose Symbolic
Instruction Code, soit code d'instructions symboliques multi-usage pour les débutants). Le langage de
script utilisé par Visual Basic est nommé à juste titre VBScript, il s'agit ainsi d'un sous-ensemble de
Visual Basic. De plus, ce langage est utilisé pour de nombreuses autres applications Microsoft© que
Visual Basic :

 Microsoft Access
 Microsoft Active Server Pages
 Microsoft Excel
 Microsoft Internet Explorer
 Microsoft Word

Ainsi, pour créer un utilitaire, il suffit de créer son interface graphique à l'aide de la bibliothèque
d'élément en les assemblant tels un puzzle, puis de programmer à l'aide de VBScript les événements
associés aux éléments de l'interface.

Possibilités de Visual Basic


De par le nombre de composants fournis avec Visual Basic, les possibilités en terme d'interface
graphique sont très grandes. D'autre part, les contrôles ActiveX, des composants actifs utilisables dans
vos applications, permettent d'avoir accès à des fonctions avancées :

 accès à des bases de données


 accès à des fonctionnalités réseau
 accès à des fonctions d'entrée-sortie
 ...

Apprenez la programmation avec Visual Basic et Word


Ce chapitre, permettant d'apprendre la programmation, est fondé sur Visual Basic. En fait que vous
utilisiez Viaual Basic pur et dur, Visual Basic pour Word, Visual Basic pour Excel, Access, ou

1
même une autre version de Visual Basic importe peu, en ce sens que les notions basiques de
programmation que je vais vous montrer n'ont rien à voir avec l'utilisation de Word, EXcel ou
Access. Il s'agit de notions d'algorithmie, qui est l'art de la logique des programmes qu'ils soient. Il
existe des langages de programmation très différents, comme justement Visual Basic (VBA), Java,
C++, Cobol, Pascal, etc., et quel que soit le langage utilisé, il est indispensable de connaître les
bases de la logique de programmation. En d'autres mots, c'est comme si vous vouliez être physicien,
comptable ou ingénieur : Il vous faudra passer par la logique de base des mathématiques, qui n'a
rien a voir avec ensuite votre spécialisation, mais qui est une étape incontournable.

Ceci dit, je me suis quand même appuyé sur Word. Pourquoi ? simplement, parce que dans Office,
c'est le programme le plus simple (Plus simple qu'Excel notamment), et que dans certains exemples,
j'utilise simplement l'instruction TypeText (Qui n'existe que dans Word), et qui permet d'afficher
certaines choses dans un document.

Apprenez a faire votre première Macro - avec l'enregistreur de macro bien pratique
Attacher une macro à une icône d'une barre d'outils - Afin de pouvoir appeler votre macro d'un simple
clic plutôt que d'aller dans Outils/Macros/Macros
Qu'est-ce qu'un programme et à quoi sert-il ?
Les variables et les constantes
Les tableaux
Utilisation de la fonction InputBox et du & (Et commercial)
Les boucles DO, LOOP, WHILE et UNTIL

Voici les différents programmes proposés


Affichage d'un certain nombre de fois "Bonjour" à l'écran (Do While, Until, Loop, TypeText,
TypeParagraph)
Transformation d'un nombre de jours en secondes
Changer de l'argent en monnaie différente
Jeu : Trop grand, trop petit (If Then, Select Case, RND, Do Until, Loop)
Traitement de chaînes de caractères (Left, Right, Mid, Len, Chr)
Comptage du nombre de voyelles d'une phrase
Réécriture d'une phrase à l'envers
Détermination des diviseurs d'un nombre
Utilisation des Sub et des Function

Cliquez ici pour un Petit exercice (avec la solution)

Voici d'autres idées pour apprendre à programmer :

- Saisie correcte d'un numéro AVS


- Jeu : Simon
- Permutation de 2 variables
- Comptage de mots d'une phrase
- Transformation d'un nombre de jours en secondes

2
- Séparation du nom et du prénom
- Rendre la monnaie sur une somme donnée
- Comptage du nombre de lettres d'une phrase, statistique sur les lettres
- Statistiques sur un jet de dés + Pourcentages
- Validation d'une date
- Recherche d'une chaîne de texte dans une phrase
- Affichage d'une pyramide à l'écran
- Utilisation de type pour établir une facture
- Entrer un calcul en lettres "un plus quatre"
- Fonctions : Cryptage et décryptage d'un texte
- Détermination d'un nombre premier
- Tri de chiffres et de noms
- Carré magique
- Jeu des chiffres et des lettres

Votre toute première macro, avec Word 2000


Vous avez souvent endendu parler de macros, mais vous ne savez pas du tout
comment en construire une. Voici la marche à suivre pour votre toute première
macro.

Une macro, en quelque sorte va vous permettre d'automatiser des actions répétitives. Ca va de la
simple petite macro qui sélectionne tout le texte et le met en gras automatiquement, jusqu'à la macro
très complexe qui permet de choisir un client dans une base de données Access, de l'importer dans
Word, dans des zones prédéfinies de formulaires complexes.

Quel que soit votre niveau, vous pouvez construire et utiliser des macros. Mais il y a des limites : Si
vous êtes vraiment débutant en Word, les subtilités des macros vous échapperont certainement - Et
même si vous êtes un utilisateur confirmé, voire HelpDesk, il est possible que certaines macros soient
tellement complexes à mettre en oeuvre que vous aurez besoin de l'aide d'un programmeur
professionnel.

En effet, il y a une marge ENORME entre une petite macro de quelques lignes qui fait de menus
détails, tels que justement la mise d'un texte en gras, avec la programmation de modules complexes,
composés de multiples procédures et fonctions complexes, faisant appel à des notions pointues de
programmation.

Mettons donc grâce à ce chapitre le premier orteil dans l'océan Visual Basic pour Application !

Pour suivre pas à pas ce mode d'emploi, je vous conseille fortement d'imprimer cette
page pour l'avoir à côté de votre PC pendant que vous essayez de réaliser cette macro.

Premier : Créer une macro en l'enregistrant

3
Pour cet exemple, je vous propose d'écrire une petite macro toute minable qui se contente d'écrire
automatiquement CA MARCHE dans votre document.

1. Allez dans un nouveau document


2. Faites Outils/Macros/Nouvelle Macro
3. Ecrivez dans la zone "Nom de la macro" : MaPremiereMacro
4. Choisissez "Tous les documents ([Link])" dans la zone "Enregistrer la macro dans"

Ne mettez PAS d'ESPACE entre les mots, sinon, CA NE MARCHE


PAS
5. Cliquez sur OK
Maintenant, vous êtes en train d'enregistrer votre macro. C'est à
dire que vous êtes comme dans un studio d'enregistrement. Dans un studio
d'enregistrement, il ne faut PAS LE MOINDRE BRUIT, et bien, lors de l'enregistrement
d'une macro, IL NE FAUT PAS FAIRE LA MOINDRE CHOSE que vous ne voulez pas
enregistrer
6. Ecrivez Ca marche !
7. Faites Outils/Macros/Arrêter l'enregistrement.

OUF ! Vous pouvez respirer. L'enregistrement de la macro est terminé. Il ne reste plus qu'a voir si
cette macro fonctionne !

1. Effacez votre texte, ou demandez un nouveau document


2. Faites Outils/Macros/Macros
3. Cliquez sur MaPremiereMacro
4. Cliquez sur "Exécuter"

ET VOILA... SI tout s'est bien passé, vous devriez voir apparaître à l'écran Ca marche ! Ce n'est
pas plus compliqué que ça. Bravo !

Quand on débute en macros, on OUBLIE TOUT LE TEMPS cette


dernière opération... Et quand on l'oublie, et bien on continue d'enregistrer encore et encore...
et... Rien ne marche et dans le pire des cas, on finit par faire planter complètement Word, voire
le PC complet...

Deuxième : Créer une macro en l'écrivant


Cette fois, nous allons entrer de plain pied dans l'environnement de programmation VBA. Nous allons
afficher une petite boîte de dialogue comme ceci :

4
L'instruction pour créer une boîte de dialogue comme celle-ci est MsgBox "Ca Marche".

1. Quittez Word, ne sauvegardez rien, et revenez dans Word (Simplement pour être sûr que nous
avons bien les mêmes écrans)
2. Faites Outils/Macros/Visual Basic Editor
3. Dans la partie de gauche, vous devriez voir ceci :

Si ce n'est pas le cas, faites Affichage/Explorateur de projets


4. Cliquez avec le bouton droit sur Project (Document1), et choisissez Insertion/Module.
Vous avez maintenant sur toute la partie de droite un éditeur de texte (une page blanche dans
lquelle vous pouvez écrire). Word à également créé dans la partie de gauche Modules et
Module1
5. Ecrivez dans cette partie de droite:
Sub AfficheMessage
6. Appuyez sur ENTER. Normalement, Word a complété votre texte comme ceci :
Sub AfficheMessage()

End Sub
7. Complétez le code en écrivant vous même MsgBox "Ca Marche", comme ceci :
Sub AfficheMessage()
MsgBox "Ca Marche"
End Sub
8. La macro est maintenant écrite. Cliquez quelque part entre Sub AfficheMessage et End Sub, et
appuyez sur la touche F5. Le message devrait apparaître, comme ceci :

Et voilà... vous avez écrit vous même votre première macro, et exécuté ! Félicitations ! Vous avez
donc appris plusieurs choses :

5
1. MsgBox permet d'afficher des messages
2. Le texte affiché avec MsgBox est écrit entre guillemets
3. Les macros commencent par Sub QuelqueChose() et se terminent par End Sub
4. On peut exécuter les macros directement depuis l'environnement VBA avec la touche F5

Mais on peut bien sûr exécuter cette macro depuis Word... Marche à suivre :

1. Quittez l'environnement Visual Basic (Fichier/Fermer et retourner à Microsoft Word)


2. Outils/Macros/Macros, et cliquez 2 fois sur AfficheMessage (Ou cliquez une seule fois dessus,
et Exécuter)

Et voilà... Ce n'est pas plus compliqué que cela !

Troisième : Modifier à la main une macro


enregistrée
Nous allons faire une macro toute simple avec l'enregistreur de macros, et ensuite la corriger à la main.
Par exemple, notre macro va écrire à l'intérieur de Word :

Un
Deux

1. Quittez Word, ne sauvegardez rien, et revenez dans Word (Simplement pour être sûr que nous
avons bien les mêmes écrans)
2. Faites Outils/Macros/Nouvelle Macro
3. Nom de la macro : MacroTest
4. Enregistrer la macro dans : Document1
5. Cliquez sur OK
: Vous êtes en train d'enregistrer !
6. Ecrivez simplement :
Un
Deux
7. Outils/Macros/Arrêter l'enregistrement
8. Faites Outils/Macros/Visual basic Editor
9. Dans la partie de gauche, vers le haut (dans l'explorateur de projets), cliquez sur le petit + à
côté de Modules
10. Ca fait apparaître NewMacros. Cliquez 2 fois dessus : Ca fait apparaître votre macro
enregistrée, comme ceci :
Sub MacroTest()
'
' MacroTest Macro
' Macro enregistrée le 05.01.2001 par Michel
'

6
[Link] Text:="Un"
[Link]
[Link] Text:="Deux"
End Sub
11. Remplacez
[Link] Text:="Un"
par
[Link] Text:="Le radeau de la méduse"
12. Faites Fichier/Fermer et retourner à Microsoft Word
13. Descendez un peu plus bas que votre Deux (en appuyant sur Enter 2 ou 3 fois)
14. Faites Outils/Macros/Macros, et exécutez MacroTest

Et voilà ! Si tout s'est bien passsé, votre écran devrait ressembler à ceci :

Un
Deux

Le radeau de la méduse
Deux

Vous avez réussi à corriger à la main une macro préenregistrée ! Vous avez appris de nouvelles choses
:

1. C'est une manière très sympathique d'apprendre petit à petit la syntaxe de visual basic
2. [Link] Text:="Truc machin" permet d'écrire du texte dans Word
3. [Link] fait comme si on appuyait sur ENTER
4. Il y a certaines lignes en vert, qui commencent par une apostrophe ('). Ce sont des lignes de
commentaires. C'est à dire que ces lignes sont totalement ignorées par Visual Basic, et vou
permettent de commenter votre code.

Attacher sa macro à une icône

Bien. Maintenant que vous avez créé votre première macro, il s'agit de l'intégrer à votre
environnement Word. Parce que, entre nous, ce n'est pas bien pratique de devoir chaque fois aller
dans Outils/Macros/Macros pour éxécuter sa macro... Ce serait tellement plus simple de simplement
cliquer sur une icône et que la macro s'exécute automatiquement...

Attention les vélos, parce que ce n'est pas évident à expliquer, ni à comprendre, ni à réaliser.
Essayons :

Pour commencer, nous allons créer une barre d'outils. VOTRE barre d'outils, qui va contenir toutes les
macros que vous aurez le plaisir de créer. Ainsi, quand vous irez dans Affichage/Barres d'outils, vous

7
aurez la possibilité d'afficher ou non, non seulement les barres d'outils normales telles que Mise en
forme ou standard, mais également votre barre d'outils que nous allons nommer .

Marche à suivre :
1. Allez dans Affichage/Barres d'outils/Personnaliser
2. Cliquez sur "Nouvelle..."
3. Nom de la barre d'outils : Mes Macros. Utilisable par : "[Link]", et OK

A ce stade, vous devriez voir sur votre écran apparaître un petit carré gris tout riquiqui, avec juste une
petite croix pour le fermer. C'est votre barre d'outils. Elle est toute petite car elle est vide.

4. Vous êtes toujours dans la boîte de dialogue "Affichage/Barres d'outils/Personnaliser". Cliquez sur
l'onglet "Commandes"
5. Cherchez dans la liste de gauche "Macros". Cliquez dessus
6. Dans la partie de droite, vous voyez normalement votre macro
[Link]. Cliquez dessus
7. Laissez appuyé le doigt sur la souris, sur MaPremiereMacro. Un petit + apparaît. Faites glisser cette
macro jusqu'a au milieu de votre nouvelle toute petite barre d'outils Mes Macros.
8. Vous devriez maintenant avoir sur votre barre d'outils personnalisée un grand bouton avec marqué
dessus "[Link]"

Voilà. C'est terminé. Cliquez sur "fermer", et maintenant, vous n'avez plus qu'a cliquer sur ce bouton
pour exécuter la macro...

Pas très joli comme bouton...


C'est vrai que "[Link]" n'est pas très joli comme bouton. Ce serait
plus convivial d'avoir marqué sur ce bouton "Ca marche"...

1. Affichage/Barres d'outils/Personnaliser
2. Ne vous occupez pas ce cette boîte de dialogue. Ne la regardez même pas...
3. Allez sur votre nouveau bouton, et cliquez dessus avec le bouton DROIT de votre souris
4. Un menu contextuel apparaît. Cliquez dans la zone "Nom:", et écrivez Ca marche

Et voilà...

ASTUCE Votre barre d'outils flotte au milieu de votre document Word... Pas terrible. Mettez la
pointe de la flèche de votre souris sur la barre bleue de titre de votre barre d'outils (ou c'est écrit Mes
Macros), et double-cliquez. Voilà. Elle est maintenant intégrée parmi les autres barres d'outils

Exercice

8
Créez de A à Z une nouvelle macro qui s'appelle "LettrePereNoel", et qui se contente s'écrire
automatquement "N'oublie pas mon petit soulier". Une fois cette macro créée, ET testée, vous devez
l'intégrer dans votre barre d'outils "Mes Macros", comme bouton supplémentaire, et qu'il soit écrit
sur ce bouton "Ma lettre au Père-Noël", plutôt que [Link]

Qu'est-ce qu'une variable et à quoi sert-elle ?


Lorsqu'on construit un programme, il est nécessaire de stocker certaines informations en mémoire.
Evidemment les instructions que vous écrivez se trouvent elles-mêmes une place sans que vous ayez à
vous en soucier. Par contre, vous avez l'obligation d'utiliser des VARIABLES. Par exemple, quand
vous entrez ACCEPTE Nombre, Nombre est un emplacement en mémoire que vous définissez vous-
même. C'est à dire que vous devez DECLARER LA VARIABLE.

Prenons un exemple imagé : Imaginez quelqu'un qui désire garer sa voiture dans un garage qu'il désire
louer. Pour commencer, il doit louer le garage, c'est à dire qu'il doit choisir la taille du garage et
l'emplacement de ce garage : ce n'est que quand le garage lui appartiendra qu'il pourra y garer sa
voiture.

En programmation, le fait de choisir un nom et une taille à la variable et de l'écrire suffit. On dit que
l'on DECLARE UNE VARIABLE.

Comme dans l'exemple de la location du garage, on ne fait que RESERVER la place que l'on désire
éventuellement occuper. Vous pouvez très bien louer un garage et ne jamais y mettre les pieds.

En programmation aussi, vous pouvez DECLARER UNE VARIABLE que vous n'utiliserez jamais...
Quand vous louez un garage, et que vous désirez vraiment y mettre votre voiture, vous allez vous
rendre compte de l'état dans lequel il est : En effet, peut-être que le locataire précédent y à laissé plein
de choses (des vieux pots de peinture, des chiffons, peut-être même une vieille bagnole qu'il vous
faudra évacuer). Vous commencez donc par vider le garage avant de mettre votre voiture. En
programmation, c'est exactement pareil : Le fait de DECLARER UNE VARIABLE (de réserver la
place) ne vous garantit pas du tout que cette place mémoire n'était pas occupée avant par d'autres
données, aussi, vous devez donc, au début du programme, vider cet emplacement (y mettre 0 par
exemple).

Cette opération est dite SEQUENCE D'INITIALISATION. C'est à dire que vous INITIALISEZ les
différentes variables à 0 (ou un autre chiffre qui devrait y être) afin d'être sûr des contenus de vos
variables dès le début du programme.

Les variables peuvent être de différents TYPES. C'est à dire qu'un TYPE de variable est une sorte de
variable. Pour reprendre l'exemple de la voiture dans le garage, la place doit varier en fonction de la
taille de la voiture. En programmation, vous pouvez stocker différentes choses dans les variables, dont
4 principales : les VALEURS ENTERES (INTEGER en Visial Basic), les VALEURS REELLES
(SINGLE en Visual Basic), et les CHAINES DE CARACTERES (STRING en Visual Basic).

9
Ainsi donc, suivant que vous ayez besoin d'une variable avec des décimales (par exemple pour stocker
le chiffre Pi : 3.14.159...), vous devrez prévoir (DECLARER) une variable de TYPE SINGLE. Par
contre, si vous avez besoin d'une variable qui ne contiendra que des nombres entiers (Par exemple un
compteur), vous devrez DECLARER UNE VARIABLE DE TYPE ENTIER (INTEGER), et si vous
avez besoin d'une variable qui contiendra une chaîne de caractères ("Texte", "Marcel", "Pas de
valeur"), vous aurez besoin de déclarer une VARIABLE DE TYPE CHAINE DE CARACTERE
(STRING)

La variable n'est pas déclarée : On peut y mettre tout ce qu'on veut

Sub VariableNonDefinie()
A = 44
MsgBox A
A = "Chat"
MsgBox A
End Sub

Avec Option Explicit, on DOIT déclarer les variables (ici, une erreur est générée)

Option Explicit
Sub VariableNonDefinie()
A = 44
MsgBox A
A = "Chat"
MsgBox A
End Sub

Variable déclarée, typée en integer

Sub VariableV3()
Dim A As Integer
A = 44
MsgBox A
' A = "Chat" génère une erreur
End Sub

Variable déclarée, typée en string

10
Sub VariableV4()
Dim A As Integer
A = "le gros lion"
MsgBox A
' A = 46 génère une erreur
A = "46" ' est correct
MsgBox A
End Sub

Définition d'une constante

On définit une constante généralement parce qu'il est plus convivial de nommer par un nom que par un
chiffre. Par exemple, on peut définir les constantes suivantes :

Const Pi = 3.1415926535
Const MonAnimalPrefere = "Le chat"
Const Rouge = 255 ' En VB, 255 est souvent le code couleur du rouge
Const MaCouleurPreferee = Rouge ' Donc MaCouleurPreferee = 255

Sub Constante()
Const Himalaya = 8848
Himalaya = 44 ' Génère une erreur d'exécution
End Sub

Les tableaux
Lorsque vous avez besoin d'un emplacement pour mettre une seule voiture, il n'y à pas de problème :
Vous louez un seul garage. Quand vous avez besoin d'une seule variable, pas de problème non plus.
Mais si tout à coup vous avez 10 ou 50 voitures à caser, chacune dans un garage, vous pouvez
recherchez 10 ou 50 garages différents, mais ce sera long et difficile. Vous allez plutôt essayer de
louer un parking composé de garages les uns à côté des autres.

Le parking aura un nom, et chaque garage le composant sera numéroté. En programmation, c'est pareil
: Si vous avez besoin de plusieurs variables les unes à côté des autres (par exemple, la température du
1.1.2000, du 2.1.2000, du 3.1.2000, etc. jusqu'au 31 janvier), vous pourriez donc déclarer 31 variables
qui s'appelleront par exemple 1Janvier, 2Janvier, 3Janvier, etc. jusqu'à 31Janvier... N'est-ce pas
lourd ?

En fait, on pourrait simplement faire comme le parking : C'est à dire déclarer une variable qui
s'appellerait Janvier, et qui serait suivie d'un numéro pour savoir de quel jour il s'agit, comme ceci :
Janvier[1], Janvier[2], etc. jusqu'à Janvier[31]. Cette variable Janvier s'appelle un TABLEAU. Il faut
donc, dans ce cas, DECLARER un TABLEAU.

11
Exemple basique

Sub Tableau()
Dim Armoire(3)
Armoire(1) = "Assiette"
Armoire(2) = "Verre"
Armoire(3) = "Serviette"
MsgBox Armoire(1)
MsgBox Armoire(2)
MsgBox Armoire(3)
End Sub

Exemple de tableau typé

Sub tableauV2()
Dim Tableau(1 To 10) As Integer
' Tableau(3) = "test" Génère une erreur
Tableau(4) = 775
End Sub

Il est possible de déclarer un tableau à un nombre d'éléments non défini, et ensuite,


dynamiquement, lui donner des dimensions concrètes grâce à ReDim

Sub TableauV3()
Dim Tableau()
NombreCase = Val(InputBox("Combien d'éléments voulez-vous ?"))
ReDim Tableau(15)
End Sub

Remplissage d'un tableau de taille personnalisée avec toujours 33 dans chaque élément

Sub TableauV4()
Dim Etagere() As Integer
Dim NombreCase As Integer
NombreCase = Val(InputBox("Combien d'éléments voulez-vous ?"))
ReDim Etagere(NombreCase)
For compteur = 1 To NombreCase
NombreCase (compteur = 33)
Next
End Sub

12
Remplissage d'un tableau de taille personnalisée avec l'aide de l'utilisateur

Sub TableauV5()
Dim Etagere() As Integer
Dim NombreCase As Integer
NombreCase = Val(InputBox("Combien d'éléments voulez-vous ?"))
ReDim Etagere(NombreCase)
For compteur = 1 To NombreCase
NombreCase = InputBox("Entrez le nombre N°" & compteur & " : ")
Next
End Sub

Même chose, avec ensuite affichage des choix de l'utilisateur

Sub TableauV6()
Dim Etagere() As Integer
Dim NombreCase As Integer
NombreCase = Val(InputBox("Combien d'éléments voulez-vous ?"))
ReDim Etagere(NombreCase)
For compteur = 1 To NombreCase
Etagere(compteur) = InputBox("Entrez le nombre N°" & compteur &
" : ")
Next
For compteur = 1 To NombreCase
[Link] Etagere(compteur)
[Link]
Next
End Sub

Maintenant, en plus il donne le plus grand des chiffres

Sub TableauV7()
Dim Etagere() As Integer
Dim NombreCase As Integer
NombreCase = Val(InputBox("Combien d'éléments voulez-vous ?"))
ReDim Etagere(NombreCase)
For compteur = 1 To NombreCase
Etagere(compteur) = InputBox("Entrez le nombre N°" & compteur &
" : ")
Next
For compteur = 1 To NombreCase

13
[Link] Etagere(compteur)
[Link]
Next
Dim LePlusGrand As Integer
LePlusGrand = 0
For compteur = 1 To NombreCase
If Etagere(compteur) > LePlusGrand Then
LePlusGrand = Etagere(compteur)
End If
Next
[Link] "Le plus grand est " & LePlusGrand
End Sub

Exercice : Trouver également le plus petit et la moyenne de tous les nombres

Utilisation de InputBox et de &


La fonction InputBox, en Visual Basic, permet d'afficher un message à l'écran, et, en
dessous, une zone de texte qui permet à l'utilisateur d'entrer du texte ou du chiffre. Ce
que l'utilisateur entre sera stocké dans une variable.

Utilisation simple de InputBox

Sub TestInputBox()
Dim Reponse As String
Reponse = InputBox("Entrez votre prénom")
MsgBox Reponse
End Sub

Dans ce cas, on constate que comme il s'agit d'un String, Le + colle ensemble le prenom deux fois
(4545)

Sub Collage()
Dim Reponse As String
Reponse = InputBox("Entrez votre prénom")
Reponse = Reponse + Reponse
MsgBox Reponse
End Sub

Dans ce cas, comme c'est un integer, il donne 90 (45 + 45)

14
Sub Collage2()
Dim Reponse As Integer
Reponse = InputBox("Entrez votre prénom")
Reponse = Reponse + Reponse
MsgBox Reponse
End Sub

Ici, le & colle dans TOUS LES CAS : 4545 (qu'il s'agisse d'un Integer ou String)

Sub Collage3()
Dim Reponse As Integer
Reponse = InputBox("Entrez votre prénom")
Reponse = Reponse & Reponse
MsgBox Reponse
End Sub

Mélange de chaînes littérales (avec guillemets), et Strings (Variables sans guillemets)

Sub Collage4()
Dim Reponse As String
Reponse = InputBox("Entrez votre prénom")
Reponse = "Tu t'appelles" & Reponse & "Tu es le meilleur"
MsgBox Reponse
End Sub

Les boucles DO, LOOP, WHILE et UNTIL


Dans un programme, il est souvent nécessaire de répéter une ou plusieurs actions
jusqu'à ce que quelque chose se passe, ou tant que quelque chose ne s'est pas passé.
Nous alons voir ici comment ça se passe. Voici un petit lexique Anglais/Français :

Loop = Boucle (Faire une boucle, recommencer la boucle)


Do = Faire (Effectuer, faire les actions qui suivent)
While = Tant que (Tant que X = 1, ou Tant que le mot de passe est erroné)
Until = Jusqu'à ce que (Jusqu'à ce que X = 10, ou Jusqu'à ce que le mot de passe soit
correct)

15
Premier programme : Simple utilisation de InputBox, sans autre

Sub TestLoop()
Dim Reponse As Integer
Reponse = InputBox("Entrez un chiffre")
End Sub

Ce programme demande un chiffre encore et encore tant que l'utilisateur s'évertue a entrer un autre
chiffre que 5

Sub TestLoop2()
Dim Reponse As Integer
Do
Reponse = InputBox("Entrez un chiffre")
Loop While Reponse <> 5
End Sub

Ce programme fait exactement l'inverse : Il Continue tant que l'utilisateur entre 5

Sub TestLoop3()
Dim Reponse As Integer
Do
Reponse = InputBox("Entrez un chiffre")
Loop While Reponse = 5
End Sub

On ajoute ici du code avant la boucle, et après, simplement pour montrer comment généralement un
programme se déroule : Une partie d'introduction, la boucle elle-même et ensuite, la conclusion.

Sub TestLoop4()
Dim Reponse As Integer
MsgBox "Début" ' Une seule fois avant la boucle

Do
Reponse = InputBox("Entrez un chiffre")
Loop While Reponse = 5

MsgBox "Fin" ' Une seule fois après la boucle


End Sub

16
Avec Do While, le programme n'entre pas nécessairement dans la boucle. Si on entre le bon mot de
passe immédiatement, le programme s'arrête. Dans l'exemple d'avant on faisait DO quelque chose
WHILE une condition, donc on faisait au moins une fois cette chose, tandis qu'ici, c'est DO WHILE
une condition, on fait quelque chose. Le programme regarde IMMEDIATEMENT si la condition est
satisfaite

Sub TestLoop5()
Dim Reponse As String
Reponse = InputBox("Entrez le mot de passe")

Do While Reponse <> "youpi"


Reponse = InputBox("Mauvaise réponse. Essayez encore")
Loop
End Sub

Ici, par contre, avec le while a la fin de la boucle, le' programme fait AU MOINS une fois "Mauvaise
réponse",' meme si l'utilisateur répond tout de suite bien

Sub TestLoop6()
Dim Reponse As String
Reponse = InputBox("Entrez le mot de passe")
Do
Reponse = InputBox("Mauvaise réponse. Essayez encore")
Loop While Reponse <> "youpi"
End Sub

Ici, le principe est le même, mais on utilise UNTIL (Jusqu'a ce que). En fait, on peut passe toute sa vie
de programme en utilisant exclusivement WHILE sans jamais utiliser UNTIL. Il suffit de changer la
tournure de phrase. WHILE Reponse = "youpi" veut dire exactement la même chose que UNTIL
Reponse <> "youpi", Mais dans certains cas, c'est plus pratique d'utiliser WHILE, et dans d'autres cas
UNTIL, mais c'est très subjectif.

Sub TestLoop7()
Dim Reponse As String
Reponse = InputBox("Entrez le mot de passe")
Do Until Reponse = "youpi"
Reponse = InputBox("Mauvaise réponse. Essayez encore")
Loop
End Sub

17
Application complète de boucles pour l'obtention d'un mot de passe. On fait une première demande de
mot de passe : "Entrez le mot de passe". Et seulement si l'utilisateur se plante au premier
essai, on lui signale qu'il s'est trompé ("Mauvaise réponse. Essayez encore"), et ce
message, il va le voir jusqu'à ce qu'il arrête de se tromper (1 fois, 5 fois ou mille fois s'il est vraiment
très maladroit, ou s'il a la maladie de parkinson.). A la fin, quand il a enfin tapé le bon mot de passe, le
programme lui dit en combien d'essais il a trouvé.

Sub MotPasse()
' Déclaration des variables
Dim Reponse As String ' Contient l'essai de mot de passe
Dim NombreEssai As Integer ' Compte les essais

' Premiere demande :


Reponse = InputBox("Entrez le mot de passe")
' De tout façon, on doit faire au moins 1 essai
NombreEssai = 1

' Faire la boucle JUSQU'A CE QUE L'utilisateur entre youpi


Do Until Reponse = "youpi"
Reponse = InputBox("Mauvaise réponse. Essayez encore")
' On augmente le nombre d'essais :
NombreEssai = NombreEssai + 1
Loop ' Fin de la boucle

' Message de bienvenue final. Si c'est trouvé en un essai,


' écrire au singulier, et écrire au pluriel
' si c'est en plusieurs essais :
If NombreEssai = 1 Then
MsgBox "Mot de passe trouvé au premier Essai"
Else
MsgBox "Mot de passe trouvé en " & NombreEssai & " Essais"
End If
End Sub

Afficher "Bonjour" à l'écran

Pseudo-code
Affichage de bonjour à l'écran 10 fois.

18
POUR Ctr = 1 Jusqu'à 10
AFFICHE "Bonjour"
SUIVANT Ctr

Tant que l'utilisateur tape oui

AFFICHE "Voulez-vous afficher Bonjour à l'écran ?"


ACCEPTE Reponse
TANT QUE Reponse = "Oui"
AFFICHE Bonjour
AFFICHE "On continue ? "
ACCEPTE Reponse
FIN TANT QUE

Jusqu'à ce que l'utilisateur tape non

REPETE
AFFICHE "Bonjour"
AFFICHE "Voulez-vous continuer ?"
ACCEPTE Reponse
JUSQU'A CE QUE Reponse = "non"

Visual Basic
Version simple : affichage une seule fois de bonjour

Sub AfficherBonjour()
[Link] "Bonjour"
End Sub

Version avec 5 fois bonjour côte à côte

Sub AfficherBonjour5FoisV1()
[Link] "Bonjour"
[Link] "Bonjour"
[Link] "Bonjour"
[Link] "Bonjour"
[Link] "Bonjour"
End Sub

Même version mais avec un For .. To .. Next

19
Sub AfficherBonjour5FoisV2()
For Ctr = 1 To 5
[Link] "Bonjour"
Next
End Sub

Version longue avec un saut de paragraphe entre chaque Bonjour

[Link] permet d'écrire du texte à l'écran

Sub AfficherBonjour5FoisV3()
[Link] "Bonjour"
[Link]
[Link] "Bonjour"
[Link]
[Link] "Bonjour"
[Link]
[Link] "Bonjour"
[Link]
[Link] "Bonjour"
[Link]
End Sub

Le saut de paragraphe et le For .. To .. Next

[Link] : Est équivalent à la touche ENTER

Sub AfficherBonjour5FoisV4()
For Ctr = 1 To 5
[Link] "Bonjour"
[Link]
Next
End Sub

Ce programme affiche au moins une fois bonjour


Le programme répète la boucle tant que l'utilisateur répond Oui
Do ...
...
Loop While

20
Sub AfficherBonjourTantQueOui()
Do
Reponse = InputBox("Voulez-vous afficher Bonjour ?")
[Link] "Bonjour"
[Link]
Loop While Reponse = "oui"
End Sub

Ce programme aussi affiche au moins une fois bonjour


Le programme répète la boucle jusqu'à ce que l'utilisateur réponde Non
Do ...
...
Loop Until

Sub AfficherBonjourJusqueNon()
Do
Reponse = InputBox("Voulez-vous afficher Bonjour ?")
[Link] "Bonjour"
[Link]
Loop Until Reponse = "non"
End Sub

Ce programme n'affichera peut-être pas une seule fois bonjour


Do While ...
...
Loop

Sub AfficherBonjourTantQueOuiV2()
Reponse = InputBox("Voulez-vous afficher Bonjour ?")
Do While Reponse = "oui"
[Link] "Bonjour"
[Link]
Reponse = InputBox("Voulez-vous continuer à afficher Bonjour ?")
Loop
End Sub

Ce programme n'affichera peut-être pas une seule fois bonjour


Do While ...
...
Loop

21
Sub AfficherBonjourJusqueNonV2()
Reponse = InputBox("Voulez-vous afficher Bonjour ?")
Do Until Reponse = "non"
[Link] "Bonjour"
[Link]
Reponse = InputBox("Voulez-vous continuer à afficher Bonjour ?")
Loop
End Sub

Utilisation d'Exit Do

Sub ExitDo()
Do
Reponse = InputBox("Voulez vous écrire Bonjour à l'écran ?")
If Reponse <> "oui" Then
Exit Do
End If
[Link] "Bonjour"
[Link]
Loop
End Sub

Transformation d'un nombre d'années en secondes

Pseudo-code
Le programme réduit à sa plus simple expression

ACCEPTE NombreAnnee
Affiche NombreAnnee * 365 * 24 * 60 * 60

Visual Basic
Cette version génère un dépassement de capacité

Sub NombreSecondeAnnee()
Dim NombreAnnee As Integer
NombreAnnee = InputBox("Combien d'années ?")

22
MsgBox NombreAnnee * 365 * 24 * 60 * 60
End Sub

Cette version fonctionne

Sub NombreSecondeAnneeV2()
Dim NombreAnnee As Integer
Dim NombreSeconde As Currency
NombreAnnee = InputBox("Combien d'années ?")
NombreSeconde = CCur(NombreAnnee) * 365 * 24 * 60 * 60
MsgBox NombreSeconde
End Sub

Version qui exige un nombre entre 1 et 100, et qui donne un résultat plus convivial

Sub NombreSecondeAnneeV3()
Dim NombreAnnee As Integer
Dim NombreSeconde As Currency
NombreAnnee = InputBox("Combien d'années ? (1 - 100)")
Do While NombreAnnee < 1 Or NombreAnnee > 100
NombreAnnee = InputBox("Nombre invalide. Combien d'années ? (1 -
100)")
Loop
NombreSeconde = CCur(NombreAnnee) * 365 * 24 * 60 * 60
MsgBox "Dans " & NombreAnnee & ", il y a " & NombreSeconde
End Sub

Maintenant, on peut également ne rien rentrer comme valeur, ou du texte

Sub NombreSecondeAnneeV4()
Dim NombreAnnee As Integer
Dim NombreSeconde As Currency
NombreAnnee = Val(InputBox("Combien d'années ? (1 - 100)"))
Do While NombreAnnee < 0 Or NombreAnnee > 100
NombreAnnee = Val(InputBox("Nombre invalide. Combien d'années ?
(1 - 100)"))
Loop
If NombreAnnee = 0 Then
MsgBox "Vous n'avez pas entré d'années !"
Else
NombreSeconde = CCur(NombreAnnee) * 365 * 24 * 60 * 60

23
MsgBox "Dans " & NombreAnnee & " ans, il y a " & NombreSeconde &
" secondes."
End If
End Sub

Change de monnaie
Ce programme permet d'entrer une somme en francs suisses, et d'obtenir le résultat en argent
étranger.

Pseudo-code
AFFICHE "Entrez la somme en francs suisses : "
ACCEPTE CHF
AFFICHE "Entrez le nom de la monnaie étrangère : "
ACCEPTE NomArgent
AFFICHE "Pour un franc suisse, combien obtenez vous de " NomArgent "
?"
ACCEPTE TauxChange
Resultat = CHF * TauxChange
AFFICHE "Pour " CHF "francs suisses, vous obtenez " Resultat " "
NomArgent

Visual Basic
Change de 100 CHF en lires, avec un taux de 300

Sub ChangeMonnaie()
MsgBox "Pour 100 CHF, vous aurez " & 100 * 300 & " lires"
End Sub

Change en lires, avec un taux de 300

Sub ChangeMonnaieV2()
Dim CHF As Integer
CHF = Val(InputBox("Combien de francs suisses changez vous ?"))
MsgBox "Pour " & CHF & " francs suisses, vous aurez " & CHF * 300
& " lires"
End Sub

Change en lires, valeur variable

24
Sub ChangeMonnaieV3()
Dim CHF As Integer
CHF = Val(InputBox("Combien de francs suisses changez vous ?"))
ValeurChange = Val(InputBox("Pour 1 CHF, combien obtenez-vous de
lires"))
MsgBox "Pour " & CHF & " francs suisses, vous aurez " & CHF *
ValeurChange & " lires"
End Sub

Change en monnaie variable, valeur variable, change variable

Sub ChangeMonnaieV4()
Dim CHF As Integer
Dim MonnaieEtrangere As String
Dim ValeurChange As Currency

CHF = Val(InputBox("Combien de francs suisses changez vous ?"))


MonnaieEtrangere = InputBox("Quel est le nom de la monnaie
étrangère ?")
ValeurChange = Val(InputBox("Pour 1 CHF, combien obtenez-vous de "
& MonnaieEtrangere & " ?"))

MsgBox "Pour " & CHF & " francs suisses, vous aurez " & CHF *
ValeurChange & " " & MonnaieEtrangere
End Sub

Exercice : Il faudrait que d'un montant en francs suisses, on aie la correspondance en plusieurs autes
monnaies : une ou deux autres, ou même mieux : Un nombre indéterminé de monnaies

Jeu du Plus grand / Plus petit


Il s'agit du jeu bien connu ou l'un de 2 participants pense à un chiffre entre 1 et 1000 et l'autre doit le
deviner par touches successives. Le premier doit répondre pour chaque essai "Trop" grand ou "Trop
petit".

Pseudo-code
NbATrouver = Hasard (1 à 1000)
FlagTrouve = FAUX
TANT QUE FlagTrouve = FAUX
AFFICHE "Entre un nombre : "
ACCEPTE Essai
SI Essai = Nombre ALORS
FlagTrouve = VRAI

25
FIN SI
FIN TANT QUE
AFFICHE "BRAVO. Tu as trouvé"

AMELIORATIONS :

1. Il faudrait pouvoir choisir le nombre maximum au début de la partie


2. Il faut prévoir au début de chaque partie le nombre maximum d'essais dont on dispose, et indiquer le
nombre d'essais restant à chaque essai
3. Il faut indiquer à la fin de chaque partie si on à gagné (on a découvert le nombre en moins de coups
que le maximum), et si oui, indiquer le nombre d'essais effectués
4. Suivant le nombre d'essais effectués, afficher un petit commentaire adapté ("Quel champion", "Pas
mal", Peut faire mieux")
5. Il faut demander à l'utilisateur à la fin de chaque partie s'il veut recommencer

Visual Basic
Génération d'un nombre aléatoire entre 1 et 100 : Utilisation de la fonction RND

Sub NombreAleatoire()
NombreAuHasard = Rnd ' Nombre entre 0 et 1 (0.7894654)
MsgBox NombreAuHasard
NombreAuHasard = NombreAuHasard * 100 ' Nombre entre 0 et 99, avec
des décimales (78.94654)
MsgBox NombreAuHasard
NombreAuHasard = Int(NombreAuHasard) ' Nombre entre 0 et 99 sans
décimales (78)
MsgBox NombreAuHasard
NombreAuHasard = NombreAuHasard + 1 ' Nombre entre 1 et 100 sans
décimales (79)
MsgBox NombreAuHasard

La même chose en une seule ligne

Sub NombreAleatoireV2
NombreAuHasard = Int((100 * Rnd) + 1) ' (79)
End Sub

Utilisation de & (Concaténation)

Sub UtilisationEtCommercial()
Dim Nom As String, Prenom As String, Age As Integer

26
Nom = InputBox("Entrez votre nom")
Prenom = InputBox("Entrez votre Prénom")
Age = InputBox("Entrez votre age")
MsgBox "Vous vous appelez " & Prenom & " " & Nom & ". Vous avez "
& Age & " ans"
End Sub

Utilisation du if

Sub TropGrandTropPetitV1()
NombreATrouver = Int((1000 * Rnd) + 1)
Proposition = InputBox("Faites une propostion")
If Proposition = NombreATrouver Then
MsgBox "Vous avez trouvé le bon nombre"
End If
End Sub

Utilisation du if ... Else

Sub TropGrandTropPetitV2()
Dim NombreATrouver As Integer
NombreATrouver = Int((1000 * Rnd) + 1)
Proposition = InputBox("Faites une propostion (" & NombreATrouver
& ")")
If Proposition > NombreATrouver Then
MsgBox "Nombre trop grand"
Else:
MsgBox "Nombre trop petit"
End If
End Sub

Utilisation de Select Case

Sub SelectCase()
Dim Nombre
Nombre = 8
Select Case Nombre
Case Is <= 5
MsgBox "Entre 1 et 5"
Case 6, 7, 8
MsgBox "Entre 6 et 8"

27
Case 9 To 10
MsgBox "9 ou 10"
Case Else
MsgBox "Plus grand que 10"
End Select
End Sub

Utilisation du Select ... Case dans le jeu du plus grand plus petit

Sub TropGrandTropPetitV3()
Dim NombreATrouver As Integer
NombreATrouver = Int((1000 * Rnd) + 1)
Proposition = InputBox("Faites une propostion (" & NombreATrouver
& ")")
Select Case Proposition
Case Is < NombreATrouver
MsgBox "trop petit"
Case Is > NombreATrouver
MsgBox "trop grand"
Case NombreATrouver
MsgBox "GAGNE !!!"
End Select
End Sub

On recommence jusqu'à ce que le nombre soit trouvé

Sub TropGrandTropPetitV4()
Dim NombreATrouver As Integer, Proposition As Integer
NombreATrouver = Int((1000 * Rnd) + 1)
MsgBox NombreATrouver
Proposition = 0

Do Until Proposition = NombreATrouver


Proposition = InputBox("Faites une propostion (" &
NombreATrouver & ")")
Select Case Proposition
Case Is < NombreATrouver
MsgBox "trop petit"
Case Is > NombreATrouver
MsgBox "trop grand"
Case NombreATrouver
MsgBox "GAGNE !!!"
End Select

28
Loop
End Sub

On compte le nombre d'essais nécessaires :

Sub TropGrandTropPetitV5()
Dim NombreATrouver As Integer, Proposition As Integer,
NombreEssais As Integer
NombreATrouver = Int((1000 * Rnd) + 1)
Proposition = 0
NombreEssais = 0

Do Until Proposition = NombreATrouver


Proposition = InputBox(NombreEssais & " : Faites une propostion
(" & NombreATrouver & ")")
NombreEssais = NombreEssais + 1
Select Case Proposition
Case Is < NombreATrouver
MsgBox "trop petit"
Case Is > NombreATrouver
MsgBox "trop grand"
Case NombreATrouver
MsgBox "GAGNE en " & NombreEssais & " essais !!!"
End Select
Loop
End Sub

On peut rejouer autant de fois qu'on veut :

Sub TropGrandTropPetitV6()
Dim NombreATrouver As Integer, Proposition As Integer,
NombreEssais As Integer, Recommencer As String
Recommencer = "oui"

Do While Recommencer = "oui"


Proposition = 0
NombreEssais = 0
NombreATrouver = Int((1000 * Rnd) + 1)
Do Until Proposition = NombreATrouver
NombreEssais = NombreEssais + 1
Proposition = InputBox(NombreEssais & " : Faites une
propostion (" & NombreATrouver & ")")
Select Case Proposition

29
Case Is < NombreATrouver
MsgBox "trop petit"
Case Is > NombreATrouver
MsgBox "trop grand"
Case NombreATrouver
MsgBox "GAGNE en " & NombreEssais & " essais !!!"
End Select
Loop ' Entrer une autre proposition
Recommencer = InputBox("Voulez-vous recommencer ?")
Loop ' Recommencer le jeu
End Sub

Traitement des chaînes de caractères

Left et Right : Prendre les extrêmes d'une chaîne de caractères


Sub GaucheDroite()
MsgBox Left("abcdef", 3)
MsgBox Right("abcdef", 2)
End Sub

MID extrait des caractères au milieu d'une chaîne


Sub MilieuChaine()
MsgBox Mid("abcde", 3, 2) ' renvoie cd
MsgBox Mid("abcde", 3, 10) ' renvoie cde
MsgBox Mid("abcde", 10, 3) ' renvoie une chaîne nulle
End Sub

InStr: Vérifie l 'occurence d'une chaîne dans une autre.


Sub FonctionInStr()
' Exemple 1 : X contiendra 2
MsgBox InStr("abc", "b")
' Exemple 2 : X contiendra 0
MsgBox InStr("abc", "B")
' Exemple 3 : X contiendra 2
MsgBox InStr("abc", "bc")
' Si dans la section General/Declarations, on écrit Option Compare
Text, on peut comparer avec succès les minuscules et les majuscules.
Si par contre on écrit Option
' Compare Binary (option par défaut), les caractères ASCII sont
purement comparés.
' Mais, on peut avoir Option Compare Binary, et malgré tout,
exceptionnellement demander une comparaison de texte avec :

30
MsgBox InStr(0, "abc", "B", 1)
End Sub

CHR : Renvoie la valeur ASCII d'un caractère


Sub FonctionChr()
MsgBox Chr("a") ' renvoie 97 (code ASCII de a)
End Sub

LEN : Calcule la longueur d'une chaîne


Sub LongueurChaine()
MsgBox Len("abc") ' renvoie 3 (lettres)
End Sub

UCase et LCase Transforment les minuscules en majuscules et


vice versa
Sub MajusculeMinuscule()
MsgBox UCase("textE") ' renvoie TEXTE
MsgBox UCase("téxte") ' renvoie TÉXTE
MsgBox LCase("TExte") ' renvoie texte
End Sub

VAL renvoie l'équivalent numérique d'une chaîne


Sub FonctionVal()
MsgBox Val(" 21x") ' renvoie 21
MsgBox Val("x21") ' renvoie 0
MsgBox Val(21) ' donne une erreur (le paramètre doitêtre une
chaîne de caractères)
End Sub

Comptage du nombre de voyelles d'une phrase


Simple parcourt des lettres d'une phrase

Sub CompteVoyelle()
Dim Phrase As String
Phrase = "Ceci est une phrase"
For Compteur = 1 To Len(Phrase)
MsgBox Mid(Phrase, Compteur, 1)
Next
End Sub

31
Comptage des e

Sub CompteVoyelleV2()
Dim Phrase As String
Dim NombreE As Integer

Phrase = "Ceci est une phrase"


For Compteur = 1 To Len(Phrase)
If Mid(Phrase, Compteur, 1) = "e" Then
NombreE = NombreE + 1
End If
Next
MsgBox NombreE
End Sub

Comptage des voyelles

Sub CompteVoyelleV3()
Dim Phrase As String
Dim NombreVoyelle As Integer

Phrase = "Ceci est une phrase"


NombreVoyelle = 0
For Compteur = 1 To Len(Phrase)
Select Case Mid(Phrase, Compteur, 1)
Case "a", "e", "i", "o", "u", "y"
NombreVoyelle = NombreVoyelle + 1
End Select
Next
MsgBox "Il y a " & NombreVoyelle & " voyelles dans " & Phrase
End Sub

Comptage plus précis de chaque voyelle, avec stockage dans un tableau

Sub CompteVoyelleV4()
Dim Phrase As String
Dim NombreVoyelle As Integer
Dim A, E, I, O, U, Y

Phrase = "Ceci est une phrase"


NombreVoyelle = 0

32
A = 0
E = 0
I = 0
O = 0
U = 0
Y = 0

For Compteur = 1 To Len(Phrase)


Select Case Mid(Phrase, Compteur, 1)
Case "a": a = A + 1
Case "e": E = E + 1
Case "i": I = I + 1
Case "o": O = O + 1
Case "u": U = U + 1
Case "y": Y = Y + 1
NombreVoyelle = NombreVoyelle + 1
End Select
Next

[Link] "Il y a " & A & " A dans " & Phrase
[Link]
[Link] "Il y a " & E & " E dans " & Phrase
[Link]
[Link] "Il y a " & I & " I dans " & Phrase
[Link]
[Link] "Il y a " & O & " O dans " & Phrase
[Link]
[Link] "Il y a " & U & " U dans " & Phrase
[Link]
[Link] "Il y a " & Y & " Y dans " & Phrase
[Link]
End Sub

Améliorations possibles :
- Compter toutes les lettres de l'alphabet
- N'afficher que les lettres présentes
- Montrer la lettre la plus courante
- Laisser le choix de la phrase à l'utilisateur
- Plus difficile : Compter le nombre de mots d'une phrase

Réécriture d'une phrase à l'envers

Pseudo-code

33
AFFICHE "Entre une phrase quelconque : "
ACCEPTE Phrase
POUR Ctr = LONGUEUR (Phrase) JUSQU'A 1
AFFICHE Phrase[Ctr]
SUIVANT Ctr

Visual Basic
Sub PhraseALenvers()
Dim Phrase As String
Dim PhraseEnvers As String
Phrase = "Tu l'as trop écrasé, César, ce port-salut"
For compteur = Len(Phrase) To 1 Step -1
PhraseEnvers = PhraseEnvers & Mid(Phrase, compteur, 1)
Next
MsgBox PhraseEnvers
End Sub

Améliorations :

- Laisser le choix à l'utilisateur de la phrase


- Réécrire la phrase une lettre sur 2

Détermination des diviseurs d'un nombre


L'exercice consiste à trouver tous les diviseurs d'un nombre donné. Par exemple, si je dis 20, il faut
arriver à trouver que ses diviseurs sont 1, 2, 4, 5, 10 et 20. Bon en fait, 1 et 20 évidemment qu'ils sont
diviseurs... N'importe quel nombre est divisible par un et par lui-même. Ce sont surtout 2, 4, 5 et 10
qui sont intéressants. Bon ici, ça va, on peut faire le calcul de tête. Mais s'il s'agit de trouver les
diviseurs de 376, c'est moins facile... Comment allons nous procéder ? Par multiplications successives.
Par exemple, on cherche les diviseurs de 8 : ce sont 1, 2, 4 et 8. Méthodiquement, on fait :

On commence avec les 1 : On continue avec les 2 : Et avec les 3 :

1X1 = 1 1X2 = 2 1X3 = 3


2X1 = 2 2X2 = 4 2X3 = 6
3X1 = 3 3X2 = 6 3X3 = 9
4X1 = 4 4X2 = 8 Ah ! En voilà Un ! 4X3 = 12Ah ! En voilà Un !
5X1 = 5 5X2 = 10 5X3 = 15
6X1 = 6 6X2 = 12 6X3 = 18
7X1 = 7 7X2 = 14 7X3 = 21
8X1 = 8Ah voilà le premier ! 8X2 = 16 8X3 = 24

34
Pas de chance... Il n'y en a aucun. Bon on continue avec les 4. On va trouver 4X2 = 8, puis avec les 5 il
n'y en a aucun, avec les 6 non plus, les 7 non plus, les 8 : Il y en a 1 : 8X1 = 8.

Bon alors comment on met ça en route ? avec une boucle imbriquée, comme ceci

Pseudo-code
AFFICHE "Entre le nombre à analyser"
ACCEPTE Nombre
POUR Ctr = 1 JUSQUA Nombre
POUR Ctr2 = Ctr JUSQUA Nombre
SI Ctr * Ctr2 = Nombre
AFFICHE Ctr " fois " Ctr2 " égale " Nombre
FIN SI
SUIVANT Ctr2
SUIVANT Ctr

Améliorations possibles :

1. Optimiser le programme : Il est inutile de faire commencer le compteur à 1


2. Est-il nécessaire de continuer au delà de la moitié ?
3. L'utilisateur doit pouvoir entrer d'autres nombres à analyser

Visual Basic
Message Box successifs

Sub Diviseur()
Dim QuelNombre As Long
Dim Ctr As Long
Dim Ctr2 As Long
QuelNombre = Val(InputBox("Quel nombre voulez-vous analyser ?"))
For Ctr = 1 To QuelNombre
For Ctr2 = 1 To QuelNombre
If Ctr * Ctr2 = QuelNombre Then
MsgBox Ctr & " est diviseur de " & QuelNombre
End If
Next Ctr2
Next Ctr
End Sub

Stockage dans un tableau de taille fixe

35
Sub DiviseurV2()
Dim QuelNombre As Long
Dim Ctr As Long
Dim Ctr2 As Long
Dim ListeDiviseur(1000)
Dim Flag As Long

Flag = 0
QuelNombre = Val(InputBox("Quel nombre voulez-vous analyser ?"))
For Ctr = 1 To QuelNombre
For Ctr2 = 1 To QuelNombre
If Ctr * Ctr2 = QuelNombre Then
Flag = Flag + 1
ListeDiviseur(Flag) = Ctr
End If
Next Ctr2
Next Ctr

For Ctr = 1 To Flag


[Link] ListeDiviseur(Ctr)
[Link]
Next
End Sub

Stockage dans un tableau de taille variable avec ReDim (pour optimiser la place mémoire)
L'utilisation de Preserve évite d'effacer chaque fois le tableau

Sub DiviseurV3()
Dim QuelNombre As Long
Dim Ctr As Long
Dim Ctr2 As Long
Dim ListeDiviseur()
Dim Flag As Long

Flag = 0
QuelNombre = Val(InputBox("Quel nombre voulez-vous analyser ?"))
For Ctr = 1 To QuelNombre
For Ctr2 = 1 To QuelNombre
If Ctr * Ctr2 = QuelNombre Then
Flag = Flag + 1
ReDim Preserve ListeDiviseur(Flag + 1)
ListeDiviseur(Flag) = Ctr
End If
Next Ctr2
Next Ctr

36
For Ctr = 1 To Flag
[Link] ListeDiviseur(Ctr)
[Link]
Next
End Sub

Si le nombre n'est divisible que par 1 et par lui même (23 par exemple), il est premier.
Nous allons l'indiquer

Sub DiviseurV4()
Dim QuelNombre As Long
Dim Ctr As Long
Dim Ctr2 As Long
Dim ListeDiviseur()
Dim Flag As Long

Flag = 0
QuelNombre = Val(InputBox("Quel nombre voulez-vous analyser ?"))
For Ctr = 1 To QuelNombre
For Ctr2 = 1 To QuelNombre
If Ctr * Ctr2 = QuelNombre Then
Flag = Flag + 1
ReDim Preserve ListeDiviseur(Flag + 1)
ListeDiviseur(Flag) = Ctr
End If
Next Ctr2
Next Ctr

If Flag = 2 Then
[Link] QuelNombre & " est un nombre premier que rien
ne divise."
[Link]
Else
For Ctr = 1 To Flag
[Link] ListeDiviseur(Ctr)
[Link]
Next
End If
End Sub

Optimisation : Utilisation du Modulo (MOD)

37
Jusqu'ici, nous avons utilisé 2 boucles imbriquées pour voir si un nombre multiplié par un autre donne
le résultat recherché. En fait, on gaspille un temps de programmation précieux. Nous avons la
possibilité d'utiliser la fonction MOD (Modulo). MOD permet de trouver le reste d'une division. Par
exemple 15 MOD 2= 1. Parce que 15/2 = 7, mais il reste 1 (7*2 = 14 + ce fameux 1) = 15. Ca à l'air
idiot comme ça, mais dans notre cas, ça va nous rendre de précieux services. Par exemple, si on
cherche les diviseurs de 20 :

20 MOD 2 = 0 (20/2=10, reste 0)


20 MOD 3 = 2 (20/3 = 6, reste 2)
20 MOD 4 = 0 (20/4 = 5, reste 0)
A vous maintenant :
20 MOD 5 = 0 (20/5 = 4, reste ?)
20 MOD 6 = 2 (20/6 = ?, reste ?)
20 MOD 7 = ? (20/7 = ?, reste ?)
20 MOD 8 = ? (?/? =?, reste ?)
20 MOD 9 = ?
20 MOD 10 = ?

ça ne sert à rien d'aller plus loin que la moitié. On se doute bien que 20 n'est pas divisible par
11,12,13,14,15,16,17,18 ni 19. En fait, avec ce MOD, on constate simplement que lorsque le modulo =
0, 20 est divisible par ce nombre (2, 4, 5 et 10). Voici une version largement plus rapide du
programme de recherche des diviseurs :

Sub DiviseurOptimise()
Dim QuelNombre As Long
Dim Ctr As Long
QuelNombre = Val(InputBox("Quel nombre voulez-vous analyser ?"))
' Nous partons de 2, parce que ça ne sert a rien de tester 1,
' et on va jusqu'à la moitié du nombre, car on sait qu'il n'y a
plus aucun diviseur après.
For Ctr = 2 To QuelNombre / 2
If QuelNombre Mod Ctr = 0 Then
MsgBox Ctr & " est diviseur de " & QuelNombre
End If
Next Ctr
End Sub

Sub et Function
Premier appelle Deuxieme

Sub Premier()
MsgBox "Je suis dans Premier"

38
Deuxieme
End Sub

Sub Deuxieme()
MsgBox "Je suis dans Deuxieme"
End Sub

Utilisation d'Exit Sub

Sub Troisieme()
MsgBox "Premiere phrase"
Exit Sub
MsgBox "Deuxième Phrase phrase"
End Sub

Quatrieme Appelle cinquieme, et Exit Sub

Sub Quatrieme()
MsgBox "Phrase 1, Quatrieme"
Cinquieme
MsgBox "Phrase 2, Quatrieme"
End Sub

Sub Cinquieme()
MsgBox "Phrase 1, Cinquieme"
Exit Sub
MsgBox "Phrase 2, Cinquieme"
End Sub

Utilisation d'un paramètre

Sub Sixieme()
Septieme 44
End Sub

Sub Septieme(LeParametre)
MsgBox "Sixieme vient de m'envoyer " & LeParametre
End Sub

39
Utilisation de 2 paramètres

Sub Huitieme()
Neuvieme 32, "Chat"
End Sub

Sub Neuvieme(Nombre As Integer, Animal As String)


MsgBox "Huitieme m'envoie l'animal " & Animal
MsgBox "Huitieme m'envoie le nombre " & Nombre
End Sub

Envoi d'un tableau en paramètre

Sub Proc1()
Dim Armoire(2)
Armoire(1) = "Bidule"
Armoire(2) = "machin"
Proc2 Armoire
MsgBox Armoire(2) ' Coucou et pas machin !
End Sub

Sub Proc2(MonTab())
MsgBox MonTab(1) ' Bidule
MonTab(2) = "Coucou"
End Sub

Appel simple à une fonction

Sub Dixieme()
MsgBox Onzieme
End Sub

Function Onzieme()
Onzieme = 32
End Function

Appel à une fonction avec un paramètre

Sub Douzieme()
MsgBox LeDouble(34)
End Sub

40
Function LeDouble(QuelNombre)
LeDouble = QuelNombre * 2
End Function

Appel d'une fonction avec 2 paramètres

Sub Treizieme()
MsgBox Additionne(4, 6)
End Sub

Function Additionne(Nombre1 As Integer, Nombre2 As Integer)


Additionne = Nombre1 + Nombre2
End Function

Appel à une fonction plus élaborée

Sub Quatorzieme()
MsgBox ChiffreEnLettre(3)
End Sub

Function ChiffreEnLettre(QuelChiffre)
Select Case QuelChiffre
Case 1: ChiffreEnLettre = "Un"
Case 2: ChiffreEnLettre = "Deux"
Case 3: ChiffreEnLettre = "Trois"
Case Else: ChiffreEnLettre = "##ERREUR##"
End Select
End Function

Appel à une fonction nettement plus élaborée, qui renvoie le chiffre en anglais ou en français

Sub Quinzieme()
MsgBox ChiffreEnLettreAnglaisFrancais(3, "Anglais")
MsgBox ChiffreEnLettreAnglaisFrancais(2, "Français")
MsgBox ChiffreEnLettreAnglaisFrancais(66, "Français")
MsgBox ChiffreEnLettreAnglaisFrancais(66, "Anglais")
MsgBox ChiffreEnLettreAnglaisFrancais(2, "Italien")
End Sub

Function ChiffreEnLettreAnglaisFrancais(QuelChiffre, Langue)


Select Case Langue

41
Case "Français":
Select Case QuelChiffre
Case 1: ChiffreEnLettreAnglaisFrancais = "Un"
Case 2: ChiffreEnLettreAnglaisFrancais = "Deux"
Case 3: ChiffreEnLettreAnglaisFrancais = "Trois"
Case 4: ChiffreEnLettreAnglaisFrancais = "Quatre"
Case Else: ChiffreEnLettreAnglaisFrancais = "NOMBRE INCONNU"
End Select
Case "Anglais"
Select Case QuelChiffre
Case 1: ChiffreEnLettreAnglaisFrancais = "One"
Case 2: ChiffreEnLettreAnglaisFrancais = "Two"
Case 3: ChiffreEnLettreAnglaisFrancais = "Three"
Case 4: ChiffreEnLettreAnglaisFrancais = "Four"
Case Else: ChiffreEnLettreAnglaisFrancais = "NUMBER UNKNOWN"
End Select
Case Else
ChiffreEnLettreAnglaisFrancais = "LANGUE INCONNUE"
End Select
ChiffreEnLettreAnglaisFrancais = ChiffreEnLettreAnglaisFrancais
End Function

Aïe aïe aïe...


Qu'est-ce qui s'est passé ?

Vous avez cliqué sur un lien qui était censé vous afficher une page web, et vous tombez ici !!!

C'est ce qu'on appelle une "Erreur 404". Vous allez donc recevoir une amende de 1'000 euros pour
avoir osé générer cette erreur !

Bon, trêve de plaisanterie, il est possible que j'aie renommé ou déplacé une page web, ou que je me
sois trompé dans l'orthographe... C'est à dire que la page demandée n'a pas le nom attendu par le lien
sur lequel vous avez cliqué...

Bref, vous n'en pouvez absolument rien, je vous rassure, vous n'avez rien cassé ;-)

Vous pourriez vous dire que les webmasters devraient être plus soigneux, et contrôler leurs liens !!!
Oui, mais vous n'imaginez pas le travail de fourmi que de tout vérifier tout le temps... Croyez-moi,
c'est vraiment difficile d'éviter les "fausses routes"... Vous en trouverez même chez des grands tels que
Yahoo ou Microsoft...

Allez, soyez sympa, puisque vous avez débusqué une erreur, envoyez-moi un petit e-mail sur
mdefawes@[Link] que je puisse la réparer (Cliquez sur le bouton "Précédent", copiez

42
l'adresse (qui commence par [Link] et envoyez-la moi en me disant sur quoi vous
avez cliqué qui ne marche pas... Ca permettra d'éviter aux dix milliards de visiteurs suivant de
retomber sur le même lien cassé (Ouiiii dix milliards, j'exagère un peu, je sais :-)

43

Vous aimerez peut-être aussi