Professional Documents
Culture Documents
I.S.I.G
BP.841 GOMA
isiggoma@isig.ac.cd
Syllabus dExcel,
Excel-avanc
Par
Ass KIKOBYA Serge
Anne Acadmique
2015 2016
I. Introduction
Grce aux leons proposes ci-dessous, vous allez apprendre utiliser Excel 2007, 2010,
2013 ou 2016 sans beaucoup defforts.
Les leons de ce cours/formation dExcel, Excel avanc sont bien dtailles et bien images
pour permettre aux tudiants qui dbutent sur Excel de pouvoir le suivre facilement. Le site de
microsoft (officce-excel) est votre disposition si vous avez besoin d'aide !
2
Compil par Ass Serge KIKOBYA
Module-1 : Formation sur Excel
I.1. Leons 1
I.1.1. Les bases (bases, texte)
La leon 1 est une leon de base qui vous permettra de dbuter avec Excel, elle sera fort utile
pour les prochaines leons.
Remarque : chaque fois quil est demand de cliquer, il sagira deffectuer un clic gauche si
rien nest prcis.
A chaque dmarrage dExcel, un classeur vierge souvre avec 3 feuilles. Vous pouvez passer
dune feuille lautre en cliquant simplement sur le nom de la feuille (onglets en bas de
page).
Chaque case reprsente une cellule (une cellule a t passe en vert sur l'image). Ce sont
les cellules que vous devrez modifier par la suite afin de crer toutes sortes de choses.
La croix reprsente la souris, elle peut prendre diffrentes formes.
La zone rouge reprsente le nom de la cellule.
La zone bleue reprsente le contenu de la cellule slectionne.
Commenons la leon.
Ouvrez Excel et slectionnez la cellule A1 (en cliquant une fois dessus) :
3
Compil par Ass Serge KIKOBYA
Appuyez ensuite sur Enter.
Puis, relchez :
4
Compil par Ass Serge KIKOBYA
Vous remarquerez que le texte a t copi dans chaque cellule.
Replacez le pointeur en bas droite, cliquez sans relcher et avancez jusqu la colonne C.
5
Compil par Ass Serge KIKOBYA
Remarque : cette action va annuler tout ce qui a t cr jusquici, pour nannuler quune seule
opration, cliquez sur la petite flche bleue ou appuyez sur Ctrl + z .
Puisque la feuille est nouveau vide, slectionnez la cellule A1 et entrez Texte 1 au lieu
du prcdent Texte . Rptez ensuite les mmes oprations quavec Texte .
Vous devriez obtenir quelque chose ressemblant cela :
6
Compil par Ass Serge KIKOBYA
Changer de police de caractres
Maintenant que les cellules sont slectionnes, vous pouvez changer leur police de caractres.
Cliquez l'endroit indiqu et choisissez une police.
7
Compil par Ass Serge KIKOBYA
I.1.2. les bases (mise en forme du texte)
8
Compil par Ass Serge KIKOBYA
Placez ensuite le pointeur sur le trait entre 2 des colonnes slectionnes :
Cliquez sans relcher, allez vers la droite pour largir les colonnes, et vers la gauche pour les
rtrcir. Dans ce cas, allez vers la droite.
9
Compil par Ass Serge KIKOBYA
Texte en italique
Souligner
Conservez la slection et cliquez sur S.
10
Compil par Ass Serge KIKOBYA
Maintenant, supprimons leffet italique .
Entrez 55 en B13 et recopiez la cellule jusquen B18 (de la mme manire quavec
Texte 1 ) :
11
Compil par Ass Serge KIKOBYA
Entrez maintenant 55 en C13 et 56 en C14.
Vous obtenez :
12
Compil par Ass Serge KIKOBYA
Leons-2. Les tableaux
Pour crer un tableau, il existe diffrentes possibilits.
1re mthode
Slectionnez la zone quadriller et cliquez lendroit indiqu par limage.
Vous pouvez galement slectionner d'autres cellules et ajouter un autre style de bordure ...
13
Compil par Ass Serge KIKOBYA
2e mthode
Slectionnez les cellules de votre choix, faites un clic droit et cliquez sur Format de cellule .
14
Compil par Ass Serge KIKOBYA
3e mthode
Cliquez lendroit indiqu par le pointeur ...
15
Compil par Ass Serge KIKOBYA
Cela vous permet de tracer des bordures la main. C'est une solution intressante pour les
tableaux aux formes inhabituelles.
Vous retrouverez les mmes choix si vous tracez vos bordures depuis Format de cellule .
16
Compil par Ass Serge KIKOBYA
Couleur de fond
Nous avons vu la premire leon comment changer la couleur de fond d'une cellule. Si vous
voulez plus de choix (dgrad de couleurs/textures), rendez-vous dans Format de cellule ,
onglet Remplissage .
17
Compil par Ass Serge KIKOBYA
La couleur ne vous plat pas ? Dans ce cas, cliquez sur l'onglet Mise en page puis sur Thmes
pour choisir un nouveau thme pour votre tableau (ou sur Couleur si vous ne voulez
modifier que les couleurs).
18
Compil par Ass Serge KIKOBYA
Vous obtenez par exemple :
Exercice
Si vous avez suivi cette leon, il est recommand de faire lexercice 2. L'objectif est de reproduire
le tableau suivant partir des donnes existantes sur la seconde feuille :
Format de cellule
Slectionnez une ou plusieurs cellules, faites un clic droit sur votre slection et choisissez Format
de cellule .
19
Compil par Ass Serge KIKOBYA
Depuis cette fentre vous pourrez personnaliser l'affichage et la mise en forme de vos cellules.
Longlet Nombre
Pour obtenir un nombre avec des dcimales fixes, choisissez Nombre et dfinissez le nombre
de dcimales :
20
Compil par Ass Serge KIKOBYA
Pour ajouter le symbole montaire, choisissez Montaire ou Comptabilit :
21
Compil par Ass Serge KIKOBYA
Depuis Date :
Vous pouvez galement modifier laffichage des heures, des nombres (pourcentage, fraction,
scientifique), etc. depuis cet onglet.
Longlet Alignement
Vous pouvez modifier lalignement vertical/horizontal du texte, son orientation, activer le renvoi
automatique la ligne si ncessaire (pour le texte qui dpasse de la cellule), etc.
22
Compil par Ass Serge KIKOBYA
Longlet Police
Il permet de personnaliser le texte ...
23
Compil par Ass Serge KIKOBYA
Les onglets Bordures et Remplissage
Ils permettent d'ajouter des bordures ainsi qu'une couleur/un motif en fond de cellule (vu la
leon prcdente).
Les formes
Pour insrer une forme, cliquez sur l'onglet Insertion puis sur Formes et choisissez la forme
qui vous intresse.
La forme est alors insre avec une mise en forme par dfaut.
Vous pouvez modifier rapidement sa mise en forme avec les choix prdfinis.
24
Compil par Ass Serge KIKOBYA
Vous pouvez galement modifier chaque lment sparment (ici, la couleur de fond).
Le contour de la forme :
25
Compil par Ass Serge KIKOBYA
Il est aussi possible de changer de forme en conservant son style actuel.
26
Compil par Ass Serge KIKOBYA
Les manipulations
Pour faire pivoter une forme, cliquez sur le point vert :
Les points jaunes permettent de modifier l'paisseur de certaines parties de la forme (dans le cas
d'une flche, il est possible de modifier l'paisseur de la pointe et de la partie rectangulaire).
27
Compil par Ass Serge KIKOBYA
Pour modifier la largeur/hauteur de la forme, utilisez les points blancs.
28
Compil par Ass Serge KIKOBYA
WordArt
Pour insrer du texte avec des effets graphiques proches de ceux des formes, cliquez sur l'onglet
Insertion puis sur WordArt et choisissez un style.
29
Compil par Ass Serge KIKOBYA
Vous pouvez, tout comme les formes, modifier le style de votre texte depuis l'onglet Format .
Les possibilits de personnalisation sont assez proches de celles des formes, inutile donc d'entrer
dans les dtails ...
30
Compil par Ass Serge KIKOBYA
Lorsque votre image est slectionne, l'onglet Outils Image est affich.
Les 4 premiers boutons vous permettent de retoucher votre image et d'ajouter un effet artistique
si vous le souhaitez.
31
Compil par Ass Serge KIKOBYA
Vous pouvez choisir un cadre pour votre photo (flout, ombrag, relief, 3d, etc.) et modifier
ensuite les proprits comme bon vous semble (comme pour les formes).
32
Compil par Ass Serge KIKOBYA
Plus de dtails sur ce sujet la page suivante ...
Pour insrer un graphique SmartArt, cliquez sur l'onglet Insertion puis sur SmartArt .
Choisissez un style.
Entrez le texte.
33
Compil par Ass Serge KIKOBYA
Vous pouvez ensuite modifier les dispositions du graphique si ncessaire.
34
Compil par Ass Serge KIKOBYA
I.5. La recopie incrmente
Pour ce faire, placez le pointeur sur lextrmit infrieure droite de la slection, cliquez sans
relcher jusqu lapparition du 20.
35
Compil par Ass Serge KIKOBYA
Une alternative pour effectuer la mme recopie : entrez le chiffre 1 en A1 :
Vous obtenez :
36
Compil par Ass Serge KIKOBYA
La recopie incrmente sapplique aussi aux jours, mois, dates, heures, etc.
En voici un exemple :
Le rsultat :
Incrment A : 2 jours
Incrment B : 2 mois
Incrment C : les mois (au lieu des jours)
Incrment D : 2 heures
Incrment E : + 2
Incrment F : + 10
37
Compil par Ass Serge KIKOBYA
Exemple avec une fonction
La cellule slectionne contient la somme des chiffres encadrs.
Vous obtenez 2 autres chiffres qui reprsentent la somme de leur colonne de chiffres respective :
38
Compil par Ass Serge KIKOBYA
Recopier une mise en forme
Exemple de recopie de mise en forme avec les 2 lignes suivantes.
Vous obtenez :
Commencez toujours votre calcul par le signe = , ensuite sans laisser despaces, placez un chiffre
suivi dun signe suivi dun autre chiffre, etc. Ajoutez des ( ) si cela savre ncessaire.
Exemples :
39
Compil par Ass Serge KIKOBYA
=(45-32)^2/10 (Excel affichera la rponse : 16.9)
Observez ce tableau :
Les calculs peuvent galement tre effectus partir des donnes provenant de cellules.
Dans ce cas, commencez aussi par un = , cliquez ensuite sur une premire cellule, ajoutez un
signe, cliquez sur une autre cellule, etc. Ajoutez des ( ) si cela savre ncessaire.
40
Compil par Ass Serge KIKOBYA
Les formules du tableau ci-dessus utilisent les valeurs de A8 et A9. Le principal avantage de ce
systme est de pouvoir modifier tous les rsultats automatiquement (sans toucher aux formules)
en changeant simplement les valeurs de A8 et A9, exemple :
Il existe une multitude de fonctions. Vous trouverez des explications sur les fonctions les plus
utilises sur la page consacre aux fonctions (accessible via le lien Fonctions en haut de page).
Fonction SOMME
Slectionnez la cellule o vous souhaitez entrer la somme. Cliquez ensuite sur l'onglet Formules
puis sur Somme automatique .
41
Compil par Ass Serge KIKOBYA
Slectionnez ensuite la plage de cellule dont vous souhaitez obtenir la somme (dans le cas
prsent, la slection propose par Excel est la bonne).
42
Compil par Ass Serge KIKOBYA
Fonction MOYENNE
Il existe diffrents raccourcis dans l'onglet Formules pour insrer une fonction. Cette fois-ci,
nous allons insrer la fonction sans utiliser l'un de ces raccourcis ...
Slectionnez la cellule o vous souhaitez insrer la moyenne et cliquez sur Insrer une fonction
:
43
Compil par Ass Serge KIKOBYA
Vous obtenez :
Fonction SI
44
Compil par Ass Serge KIKOBYA
Dans ce cas, le but est dafficher Oui si le rsultat est plus grand que 10 et Non si ce nest
pas le cas.
Remarque : si l'une des valeurs est du texte, il est ncessaire de la mettre entre guillemets (exemple : "Oui").
Le rsultat est correct (les formules se sont adaptes : chaque recopie d'une ligne vers le bas, le
n de ligne des cellules de la formule a t augment de 1).
45
Compil par Ass Serge KIKOBYA
Maintenant, si l'on veut changer la valeur limite de 10 (pour dterminer si c'est Oui ou Non
qui doit tre affich), il va falloir modifier chaque formule, ce n'est donc pas trs pratique.
A la place d'entrer la valeur 10 directement dans la formule, nous allons faire rfrence une
cellule contenant 10. De cette manire, lorsqu'on voudra modifier cette valeur limite, il suffira de
modifier la valeur de la cellule.
46
Compil par Ass Serge KIKOBYA
Oprateurs de comparaison
Dans l'exemple prcdent, nous avons voulu savoir si la valeur tait plus grande que en
utilisant le signe > . Voici les autres oprateurs que vous pouvez utiliser :
= est gal
<> est diffrent de
< est plus petit que
<= est plus petit ou gal
> est plus grand que
>= est plus grand ou gal
Ainsi que :
=ET(formule_1;formule_2;formule_3)
ET Toutes les conditions doivent tre vraies
=OU(formule_1;formule_2;formule_3)
OU Au moins une des conditions doit tre vraie
D'autres fonctions
Vous trouverez des explications sur les fonctions les plus utilises sur la page consacre aux
fonctions (accessible via le lien Fonctions en haut de page).
47
Compil par Ass Serge KIKOBYA
I.7. Insertion de graphiques
Le tableau suivant sera utilis en exemple lors de cette leon (vous pouvez le tlcharger
en cliquant ici).
48
Compil par Ass Serge KIKOBYA
Lorsque vous slectionnez le graphique des onglets supplmentaires sont affichs.
Pour changer (si ncessaire) de type de graphique, cliquez sur Modifier le type de graphique .
49
Compil par Ass Serge KIKOBYA
Vous pouvez galement choisir l'un des styles prdfinis.
50
Compil par Ass Serge KIKOBYA
Il est galement possible de personnaliser les diffrents lments sparment (en les
slectionnant sur le graphique).
Par exemple :
51
Compil par Ass Serge KIKOBYA
Quant l'onglet Mise en forme , il est semblable l'onglet Format que nous avons dj vu.
52
Compil par Ass Serge KIKOBYA
Modifier la source du graphique
Pour changer la plage de donnes prendre en compte pour le graphique, cliquez sur
Slectionner des donnes... .
Un graphique sparkline est un tout petit graphique intgr une cellule (les graphiques sparkline
ne sont pas disponibles avec les versions d'Excel infrieures 2010).
53
Compil par Ass Serge KIKOBYA
Pour insrer un graphique, slectionnez la cellule de destination et choisissez un style de
graphique.
Le graphique a t insr.
54
Compil par Ass Serge KIKOBYA
Exemple de mise en forme :
Comme son nom l'indique, la mise en forme conditionnelle (abrge en MFC) est une mise en
forme applique sous certaines conditions.
Entrez une valeur limite (ici, 50'000) et choisissez une mise en forme.
55
Compil par Ass Serge KIKOBYA
La mise en forme est alors applique toutes les valeurs suprieures 50'000.
En choisissant la MFC 10 valeurs les plus leves... , la mise en forme sera applique sur les 10
valeurs les plus leves de la plage de cellules.
Vous pouvez ensuite dfinir le nombre de valeurs mettre en vidence (ici, 5) ainsi que la mise en
forme.
56
Compil par Ass Serge KIKOBYA
Les 5 valeurs les plus leves sont alors mises en forme.
57
Compil par Ass Serge KIKOBYA
Exemple avec les jeux d'icnes :
L'objectif ici est de crer une MFC qui va colorer automatiquement la colonne du tableau en
fonction du mois en B8.
Commencez votre formule avec un = , entrez ensuite la premire cellule tester (ici, B1) et
finissez avec le test =$B$8 (avec des $ pour "fixer" la cellule).
58
Compil par Ass Serge KIKOBYA
Avec =B1=$B$8 , la MFC est applique chaque cellule contenant la valeur recherche (ici,
Fvrier).
La formule =B1=$B$8 est celle de la premire cellule du tableau, dans les autres cellules la
formule est modifie (comme lors d'une recopie incrmente).
Ce tableau devrait vous aider mieux comprendre le test effectu pour chaque cellule :
59
Compil par Ass Serge KIKOBYA
Pour mettre en forme la colonne entire et pas seulement une cellule, il va falloir "fixer" le n de
ligne avec un $ .
Pour modifier la formule, cliquez sur Grer les rgles... puis Modifier la rgle... .
60
Compil par Ass Serge KIKOBYA
Les tests effectus sur les cellules :
Pour mettre en forme une colonne, il suffit maintenant de modifier le mois en B8.
Voici quelques exemples varis de MFC avec leur fichier source (tlchargeable).
61
Compil par Ass Serge KIKOBYA
1. Afficher "pay" dans une cellule lorsque la date de paiement est saisie
Slectionnez les cellules cibles et choisissez la MFC Egal ... :
Vous obtenez :
62
Compil par Ass Serge KIKOBYA
2. Afficher les retards de paiement en fonction de la date du jour
Grce la fonction AUJOURDHUI, la MFC utilisera la date du jour pour dterminer s'il y a un
retard de paiement.
63
Compil par Ass Serge KIKOBYA
Dfinissez la mise en forme.
I.10. Complments
64
Compil par Ass Serge KIKOBYA
Si ncessaire, modifiez les marges et/ou utilisez les options d'ajustement.
65
Compil par Ass Serge KIKOBYA
Dans le cas prsent, modifiez l'option Echelle (ou les marges) pour intgrer l'ensemble du
tableau sur la page.
Pour imprimer uniquement le tableau (sans le texte au-dessous), slectionnez le tableau et cliquez
sur ZoneImpr puis Dfinir .
66
Compil par Ass Serge KIKOBYA
Seul le tableau sera imprim.
67
Compil par Ass Serge KIKOBYA
Et dcochez Imprimer l'objet .
68
Compil par Ass Serge KIKOBYA
Dans cet exemple, l'objectif est d'entrer l'adresse du client sur la facture l'aide d'une liste
droulante.
69
Compil par Ass Serge KIKOBYA
Copiez la formule (sans la modifier) aux emplacements suivants :
70
Compil par Ass Serge KIKOBYA
Pour concatner (= assembler) plusieurs valeurs, utilisez le signe & .
Dans le cas prsent, nous voulons obtenir : A1 + un espace + B1, ce qui nous donne :
Pour obtenir sur notre facture le nom et le prnom spars par un espace, c'est exactement pareil
la seule diffrence prs que A1 et B1 sont remplacs par les formules :
71
Compil par Ass Serge KIKOBYA
Module-2 : Formation sur Excel Avanc
Grce aux diffrentes leons proposes, vous allez apprendre le VBA (macros Excel)...
Si vous pensez que crer des macros est trop compliqu et que ce n'est pas votre porte, soyez
rassur(e), ce cours est adapt aux personnes dbutantes en programmation et dmarre de zro.
Tout comme le cours Excel, les leons sont riches en exemples et simplifies autant que possible
afin de faciliter l'apprentissage du VBA.
Il est recommand de suivre les leons en respectant l'ordre donn car, chaque nouvelle leon,
vous aurez besoin des connaissances acquises au cours des leons prcdentes.
Leon 1 :
Introduction
Premire macro
Leon 2 :
Les slections
Les proprits
Les couleurs
Leon 3 :
Les variables
Les variables (suite)
Leon 4 :
Les conditions
Les conditions (suite)
Leon 5 :
Les boucles
Les boucles (exercice)
Leon 6 :
Les procdures et fonctions
72
Compil par Ass Serge KIKOBYA
Leon 7 :
Les botes de dialogue
Leon 8 :
Les vnements Workbook
Les vnements Worksheet
Leon 9 :
Les formulaires et contrles
Les formulaires et contrles (suite)
Les formulaires et contrles (suite 2)
Les formulaires et contrles (exercice)
Leon 10 :
Les tableaux
Les tableaux (suite)
Les tableaux (exercice)
Leon 11 :
Utilisations des fonctions
Cration d'une fonction personnalise
Formation avance :
Dvelopper une application complexe
Astuces VBA :
Diverses astuces utiles en VBA
II.1. Introduction
Le VBA (Visual Basic for Applications) est un langage proche du Visual Basic qui ncessite une
application hte pour s'excuter (Excel dans notre cas).
Grce au VBA nous allons pouvoir raliser peu prs tout ce que l'on souhaite avec Excel ...
Mais avant de commencer, commenons par afficher les outils qui nous seront utiles.
73
Compil par Ass Serge KIKOBYA
Si vous utilisez la version 2007 d'Excel (ou une version suprieure), cliquez sur Fichier > Options >
Personnaliser le Ruban puis cochez "Dveloppeur".
Si vous utilisez une version d'Excel antrieure 2007, ajoutez les barres "Botes outils Contrles"
et "Formulaires" :
Pour travailler avec du code VBA, nous avons besoin d'un diteur, celui-ci est dj install et vous
pouvez l'ouvrir avec le raccourci "Alt F11" :
74
Compil par Ass Serge KIKOBYA
Nous y reviendrons, retenez simplement le raccourci "Alt F11" pour le moment ...
Il est possible d'automatiser certaines tches en toute simplicit grce l'enregistreur de macros.
Pour prendre un exemple simple, nous allons automatiser les oprations suivantes :
Pour ce faire, cliquez sur "Enregistrer une macro" puis "Ok", excutez les oprations dcrites ci-
dessus sans interruption (car toutes les manipulations sont enregistres) puis cliquez sur "Arrter
l'enregistrement".
Pour les versions d'Excel infrieures 2007 : Outils > Macros > Nouvelle macro.
75
Compil par Ass Serge KIKOBYA
Excel a enregistr vos manipulations et les a traduites en code VBA.
Pour voir votre macro, ouvrez l'diteur (Alt F11) et cliquez sur "Module1" :
Sub Macro1()
'
' Macro1 Macro
'
'
76
Compil par Ass Serge KIKOBYA
Columns("A:A").Select
Selection.ClearContents
Columns("C:C").Select
Selection.ClearContents
Columns("B:B").Select
Selection.Cut Destination:=Columns("A:A")
Columns("D:D").Select
Selection.Cut Destination:=Columns("C:C")
Columns("C:C").Select
End Sub
Sub et End Sub dlimitent le dbut et la fin de la macro, "Macro1" correspond au nom de cette
macro :
Sub Macro1()
End Sub
Nous allons modifier le nom de cette macro par quelque chose de plus parlant, remplacez
simplement "Macro1" par "manipulations_des_colonnes" (le nom ne doit pas contenir d'espaces) :
Sub manipulations_des_colonnes()
Le texte en vert (texte prcd d'une apostrophe) est un commentaire, il n'est pas pris en compte
l'excution du code :
'
' Macro1 Macro
'
'
Les commentaires sont trs utiles pour s'y retrouver lorsque l'on a beaucoup de code ou pour ne
pas xcuter certaines lignes de code sans pour autant les supprimer.
Sub manipulations_des_colonnes()
'
'Mon premier commentaire !
'
Columns("A:A").Select
Selection.ClearContents
Columns("C:C").Select
Selection.ClearContents
Columns("B:B").Select
Selection.Cut Destination:=Columns("A:A")
Columns("D:D").Select
Selection.Cut Destination:=Columns("C:C")
Columns("C:C").Select
End Sub
Maintenant, nous voulons que cette macro s'excute en cliquant sur un bouton.
77
Compil par Ass Serge KIKOBYA
Tracez votre bouton et slectionnez ensuite simplement votre macro :
78
Compil par Ass Serge KIKOBYA
II.2. Les feuilles et cellules
Nous allons commencer par crer une macro qui slectionnera une cellule de notre choix.
Sub selection()
End Sub
Crez maintenant un bouton de formulaire auquel vous allez associer cette macro (vide pour le
moment) :
79
Compil par Ass Serge KIKOBYA
Compltez votre macro avec ceci :
Sub selection()
'Slection de la cellule A8
Range("A8").Select
End Sub
Vous pouvez tester cette macro en cliquant sur votre bouton de formulaire, la cellule A8 est alors
slectionne.
Nous allons maintenant modifier cette macro pour slectionner la cellule A8 de la seconde feuille
:
Sub selection()
'Activation de la feuille 2
Sheets("Feuil2").Activate
'Slection de la cellule A8
Range("A8").Select
End Sub
Remarque : aidez-vous des commentaires (texte en vert) pour bien comprendre les macros de ce cours.
80
Compil par Ass Serge KIKOBYA
Slection d'une plage de cellules
Sub selection()
'Slection des cellules A1 A8
Range("A1:A8").Select
End Sub
Cette autre manire de slectionner permet des slections plus dynamiques et sera bien utile par
la suite.
Sub selection()
'Slection alatoire d'une cellule de la ligne 1 10 et de la colonne 1
Cells(Int(Rnd * 10) + 1, 1).Select
'Traduction :
'Cells([nombre_alatoire_entre_1_et_10], 1).Select
End Sub
Ici, le numro de ligne est : Int(Rnd * 10) + 1, autrement dit : un nombre entre 1 et 10 (inutile de
retenir ce code pour le moment).
81
Compil par Ass Serge KIKOBYA
ActiveCell.Offset(2, 1).Select
End Sub
Dcalage de 2 lignes vers le bas et 1 colonne vers la droite partir de la cellule active, puis
slection :
Slection de lignes
Il est possible de slectionner des lignes entires avec Range ou Rows (Rows tant spcifique aux
lignes).
Sub selection()
'Slection des lignes 2 6
Range("2:6").Select
End Sub
Sub selection()
'Slection des lignes 2 6
Rows("2:6").Select
End Sub
Slection de colonnes
Tout comme pour les lignes, il est possible de slectionner des colonnes entires
avec Range ou Columns (Columns tant spcifique aux colonnes).
Sub selection()
'Slection des colonnes B G
Range("B:G").Select
End Sub
Sub selection()
'Slection des colonnes B G
Columns("B:G").Select
End Sub
Nous allons maintenant agir sur le contenu et l'apparence des cellules et des feuilles.
82
Compil par Ass Serge KIKOBYA
Commencez par ouvrir l'diteur, ajoutez-y un module, copiez la macro ci-dessous et associez-la un
bouton formulaire (voir page "Slections" en cas de besoin) :
Sub proprietes()
'Macro incomplte
Range ("A8")
End Sub
Nous voulons effectuer une action sur la cellule A8 avec ce dbut de macro.
Pour afficher la liste des possibilits que l'on peut associer l'objet Range, ajoutez un point
aprs Range ("A8") :
Pour ce premier exemple, cliquez sur "Value" puis sur la touche Tab pour valider ce choix.
Sub proprietes()
'Macro incomplte
Range("A8").Value
End Sub
Sub proprietes()
'A8 = 48
Range("A8").Value = 48
'Traduction :
'La valeur de la cellule A8 est gale 48
End Sub
Puis, la valeur Exemple de texte A8 (important : le texte doit tre mis entre " ") :
Sub proprietes()
'A8 = Exemple de texte
Range("A8").Value = "Exemple de texte"
End Sub
Dans ce cas, c'est bien la cellule A8 de la feuille o est lance la procdure (ici, grce au bouton
formulaire) qui sera modifie. Si vous crez un second bouton sur la feuille 2, ce sera alors la
cellule A8 de la feuille 2 qui sera modifie.
83
Compil par Ass Serge KIKOBYA
Pour modifier la cellule A8 de la feuille 2 en cliquant sur le bouton de la feuille 1, il faut ajouter
avant Range :Sheets("Nom_de_la_feuille") ou Sheets(Numro_de_la_feuille).
Sub proprietes()
'A8 de la feuille 2 = Exemple de texte
Sheets("Feuil2").Range("A8").Value = "Exemple de texte"
'Ou :
'Sheets(2).Range("A8").Value = "Exemple de texte"
End Sub
De mme, si l'on souhaite modifier la cellule A8 de la feuille 2 d'un autre classeur ouvert, il faut
ajouter avant Sheets et Range : Workbooks("Nom_du_fichier").
Sub proprietes()
'A8 de la feuille 2 du classeur 2 = Exemple de texte
Workbooks("Classeur2.xlsx").Sheets("Feuil2").Range("A8").Value = "Exemple de texte"
End Sub
Bien que Value ait t utilis pour illustrer ces diffrents exemples, il n'est pas ncessaire de
l'indiquer, car c'est automatiquement la valeur de la cellule qui est modifie si rien n'est prcis.
Ces 2 lignes offrent un rsultat identique :
Range("A8").Value = 48
Range("A8") = 48
Sub proprietes()
'Effacer le contenu de la colonne A
Range("A:A").ClearContents
End Sub
84
Compil par Ass Serge KIKOBYA
La modification des couleurs sera dtaille la page suivante ...
Pour supprimer la mise en forme "caractres gras" un texte, il faut donc remplacer "Oui" par
"Non", autrement dit, "True" par "False" :
Sub proprietes()
'Enlever la mise en forme "gras" des cellules A1 A8
Range("A1:A8").Font.Bold = False
End Sub
85
Compil par Ass Serge KIKOBYA
Ajouter des bordures
Sub proprietes()
'Ajouter une bordure aux cellules A1 A8
Range("A1:A8").Borders.Value = 1
'Value = 0 => pas de bordure
End Sub
86
Compil par Ass Serge KIKOBYA
Nous allons donc demander que A7 prenne la valeur de A1, ce qui nous donne :
Sub proprietes()
'A7 = A1
Range("A7") = Range("A1")
'Ou :
'Range("A7").Value = Range("A1").Value
End Sub
Sub proprietes()
Range("A7").Font.Size = Range("A1").Font.Size
End Sub
Ce qui est gauche du signe = prend la valeur de ce qui est droite du signe =.
Sub proprietes()
'Compteur de clics en A1
Range("A1") = Range("A1") + 1
End Sub
Excel excute le code ligne par ligne, ces commentaires devraient vous aider mieux comprendre
ce mme code :
Sub proprietes()
End Sub
With
Ce code permet de dfinir diffrentes proprits la cellule active :
Sub proprietes()
ActiveCell.Borders.Weight = 3
ActiveCell.Font.Bold = True
ActiveCell.Font.Size = 18
ActiveCell.Font.Italic = True
ActiveCell.Font.Name = "Arial"
End Sub
87
Compil par Ass Serge KIKOBYA
Nous pouvons utiliser With pour viter les rptitions d'ActiveCell dans le cas prsent.
Sub proprietes()
'Dbut de l'instruction avec : WITH
With ActiveCell
.Borders.Weight = 3
.Font.Bold = True
.Font.Size = 18
.Font.Italic = True
.Font.Name = "Arial"
'Fin de l'instruction avec : END WITH
End With
End Sub
ActiveCell n'est donc plus rpt.
Bien que ce ne soit pas indispensable dans ce cas, il est galement possible d'viter les rptitions
de .Font, ce qui nous donnerait :
Sub proprietes()
With ActiveCell
.Borders.Weight = 3
With .Font
.Bold = True
.Size = 18
.Italic = True
.Name = "Arial"
End With
End With
End Sub
Nous avons 2 possibilits pour dfinir la couleur : ColorIndex et ses 56 couleurs ou Color qui nous
permettra d'utiliser n'importe quelle couleur.
ColorIndex
Voici les 56 couleurs disponibles avec ColorIndex :
88
Compil par Ass Serge KIKOBYA
Pour donner notre texte l'une des 56 couleurs, nous crirons :
Sub couleurs()
'Couleur du texte en A1 : vert (Couleur n10)
Range("A1").Font.ColorIndex = 10
End Sub
Pour les versions d'Excel infrieures 2007 : l'utilisation de ColorIndex est prfrable Color.
Color
Voici un exemple similaire avec Color :
Sub couleurs()
'Couleur du texte en A1 : RGB(50, 200, 100)
Range("A1").Font.Color = RGB(50, 200, 100)
End Sub
La couleur ici est : RGB(50, 200, 100)
RGB en franais signifie Rouge-Vert-Bleu (RVB), les valeurs vont de 0 255 pour chaque couleur.
RGB(0, 0, 0) : noir
RGB(255, 255, 255) : blanc
RGB(255, 0, 0) : rouge
RGB(0, 255, 0) : vert
89
Compil par Ass Serge KIKOBYA
RGB(0, 0, 255) : bleu
Heureusement pour nous, il existe diffrentes solutions qui nous permettent de trouver
facilement les valeurs RGB de la couleur qui nous intresse.
Vous trouverez par exemple une liste de valeurs RGB sur la page suivante : liste de valeurs RGB
Pour donner une couleur violette notre texte, nous pouvons donc rechercher les valeurs RGB de
cette couleur sur la liste et crire :
Sub couleurs()
'Couleur du texte en A1 : RGB(192, 32, 255)
Range("A1").Font.Color = RGB(192, 32, 255)
End Sub
Pour les versions d'Excel infrieures 2007 : le nombre de couleurs est limit (la couleur disponible la plus proche de
la valeur RGB sera utilise).
Sub couleurs()
'Epaisseur de la bordure
ActiveCell.Borders.Weight = 4
'Couleur de la bordure : rouge
ActiveCell.Borders.Color = RGB(255, 0, 0)
End Sub
Aperu :
Pour appliquer cet effet plusieurs cellules la fois, nous pouvons utiliser Selection :
Sub couleurs()
'Epaisseur de la bordure
Selection.Borders.Weight = 4
'Couleur de la bordure : rouge
90
Compil par Ass Serge KIKOBYA
Selection.Borders.Color = RGB(255, 0, 0)
End Sub
Aperu :
Aperu :
91
Compil par Ass Serge KIKOBYA
'Affichage de la valeur de ma_variable dans une MsgBox
MsgBox ma_variable
End Sub
Cette premire ligne de code est la dclaration de la variable (gnralement place en dbut de
procdure).
Dclarer ses variables n'est pas obligatoire mais recommand. Cela permet de s'y retrouver plus
facilement, peut aider rsoudre plus facilement les problmes, etc. Bref, mieux vaut prendre
l'habitude de dclarer ses variables correctement.
Le type de la variable indique la nature de son contenu (texte, nombres, date, etc.).
ma_variable = 12
MsgBox ma_variable
MsgBox "valeur" affiche une valeur dans une bote de dialogue de la faon la plus simple.
Le rsultat de ce code :
Si pour le moment vous ne comprenez pas bien l'intrt d'utiliser des variables, soyez rassur, les
exemples abords au cours des prochaines leons vous en dmontreront l'utilit ...
92
Compil par Ass Serge KIKOBYA
Integer Numrique Nombre entier de -32'768 32'767. %
Long Numrique Nombre entier de - 2'147'483'648 2'147'483'647. &
Nombre dcimale fixe de -922'337'203'685'477.5808
Currency Numrique @
922'337'203'685'477.5807.
Single Numrique Nombre virgule flottante de -3.402823E38 3.402823E38. !
Nombre virgule flottante de -1.79769313486232D308
Double Numrique #
1.79769313486232D308.
String Texte Texte. $
Date Date Date et heure.
Boolean Boolean True (vrai) ou False (faux).
Object Objet Objet Microsoft.
Tout type de donnes (type par dfaut si la variable n'est pas
Variant Tous
dclare).
'Exemple : texte
Dim varTexte As String
varTexte = "ISIG.AC.CD"
'Exemple : date
Dim varDate As Date
varDate = "06.02.2011"
'Exemple : vrai/faux
Dim varBoolean As Boolean
varBoolean = True
Les symboles indiqus dans le tableau ci-dessus permettent de raccourcir les dclarations de
variables.
Par soucis de lisibilit, ils ne seront pas utiliss dans les leons mais voici tout de mme un
exemple :
93
Compil par Ass Serge KIKOBYA
Dim exemple As Integer
Dim exemple%
Remarque : il est possible de forcer les dclarations de variables en plaant Option Explicit tout au dbut du
module (une erreur sera ainsi gnre en cas d'oubli de dclaration).
Exemple pratique
Nous allons maintenant crer par tapes une macro qui va rcuprer le nom dans la cellule A2, le
prnom dans la cellule B2, l'ge dans la cellule C2 et qui va les afficher dans une bote de
dialogue.
Nous commenons par dclarer les variables (sur la mme ligne, spares par des virgules) :
Sub variables()
'Dclaration des variables
Dim nom As String, prenom As String, age As Integer
End Sub
Nous attribuons ensuite les valeurs aux variables avec Cells :
Sub variables()
'Dclaration des variables
Dim nom As String, prenom As String, age As Integer
End Sub
Et enfin, nous affichons le rsultat dans la bote de dialogue en concatnant les valeurs
avec & (comme sous Excel).
Sub variables()
'Dclaration des variables
Dim nom As String, prenom As String, age As Integer
'Bote de dialogue
MsgBox nom & " " & prenom & ", " & age & " ans"
End Sub
94
Compil par Ass Serge KIKOBYA
Nous allons maintenant rechercher afficher dans la boite de dialogue la ligne du tableau
correspondant au numro indiqu dans la cellule F5.
Voici l'objectif :
Prenez un moment pour effectuer cette modification vous-mme avant de passer la solution ci-
dessous ...
.
.
.
La solution :
Sub variables()
'Dclaration des variables
Dim nom As String, prenom As String, age As Integer, numero_ligne As Integer
95
Compil par Ass Serge KIKOBYA
'Bote de dialogue
MsgBox nom & " " & prenom & ", " & age & " ans"
End Sub
Notez au passage que nous pouvons rduire cette procdure entire sur une ligne :
Sub variables()
MsgBox Cells(Range("F5")+1,1) & " " & Cells(Range("F5")+1,2) & ", " &
Cells(Range("F5")+1,3) & " ans"
End Sub
Le code fonctionne correctement, il est nanmoins beaucoup moins lisible que le prcdent et
plus difficile retravailler (les codes ne seront donc pas rduits dans les leons afin d'en faciliter la
comprhension).
Les tableaux
Les variables permettent de stocker une valeur par variable, les tableaux permettent de stocker une
multitude de valeurs (leur utilisation est proche de celle des variables).
96
Compil par Ass Serge KIKOBYA
Voici quelques exemples de dclarations :
Le tableau 1 dimension :
97
Compil par Ass Serge KIKOBYA
Les constantes
Les constantes permettent de stocker des valeurs comme les variables, la diffrence qu'on ne
peut pas les modifier (d'o leur nom).
Par exemple, nous pouvons ajouter une constante pour viter les rptitions de 6.87236476641 :
Sub exemple_const()
Cells(1, 1) = Cells(1, 2) * 6.87236476641
Cells(2, 1) = Cells(2, 2) * 6.87236476641
Cells(3, 1) = Cells(3, 2) * 6.87236476641
Cells(4, 1) = Cells(4, 2) * 6.87236476641
Cells(5, 1) = Cells(5, 2) * 6.87236476641
End Sub
Cela facilite la lecture du code (en particulier pour des codes importants) et facilite le changement
(manuel) de la valeur de la constante en cas de besoin :
Sub exemple_const()
'Dclaration de la constante + attribution de sa valeur
Const TAUX_ANNUEL As Double = 6.87236476641
Sub procedure1()
Dim var1 As Integer
' => Utilisation de la variable dans la procdure uniquement
End Sub
Sub procedure2()
' => Impossible d'utiliser var1 ici
End Sub
Pour pouvoir utiliser une variable dans toutes les procdures d'un module, il suffit de la dclarer
en dbut de module. De plus, cela permet de conserver la valeur de la variable jusqu' la
fermeture du classeur.
Sub procedure1()
' => Utilisation de var1 possible
End Sub
98
Compil par Ass Serge KIKOBYA
Sub procedure2()
' => Utilisation de var1 possible
End Sub
Mme principe pour utiliser une variable dans tous les modules, la diffrence prs que Dim est
remplac par Global :
Global var1 As Integer
Pour conserver la valeur d'une variable la fin d'une procdure, remplacez Dim par Static :
Sub procedure1()
Static var1 As Integer
End Sub
Pour conserver les valeurs de toutes les variables d'une procdure, ajoutez Static devant Sub :
Static Sub procedure1()
Dim var1 As Integer
End Sub
Sub variables()
'Dclaration
Dim p1 As invites
'Exemple d'utilisation
MsgBox p1.nom & " " & p1.prenom
End Sub
Les conditions sont trs utiles en programmation, elles nous serviront effectuer des actions en fonction de
critres prcis (mme principe que la fonction SI).
99
Compil par Ass Serge KIKOBYA
Passons directement la pratique et reprenons l'exemple dvelopp la leon sur les variables. Il
avait pour but d'afficher dans une boite de dialogue la ligne du tableau correspondant au numro
indiqu dans la cellule F5. :
Si vous entrez une lettre en F5, cela gnre un bug. Nous voulons viter cela.
Sub variables()
'Dclaration des variables
Dim nom As String, prenom As String, age As Integer, numero_ligne As Integer
'Bote de dialogue
MsgBox nom & " " & prenom & ", " & age & " ans"
End Sub
Nous allons commencer par ajouter une condition pour vrifier que la valeur de la cellule F5 est
numrique avant d'excuter le code.
'SI la valeur entre parenthses (cellule F5) est numrique (DONC SI CONDITION VRAIE) alors on
'excute les instructions places aprs THEN
If IsNumeric(Range("F5")) Then
100
Compil par Ass Serge KIKOBYA
End If
End Sub
Ajoutons galement des instructions pour le cas o la condition n'est pas remplie :
Sub variables()
End If
End Sub
Notre tableau contient 16 lignes de donnes, nous allons donc vrifier que la
variable numero_ligne soit : "plus grande ou gale 2" et "plus petite ou gale 17".
= est gal
<> est diffrent de
< est plus petit que
<= est plus petit ou gal
> est plus grand que
>= est plus grand ou gal
OR ou [condition1] OR [condition2]
101
Compil par Ass Serge KIKOBYA
Au moins 1 des 2 conditions doit tre vraie
NOT [condition1]
NOT faux
La condition doit tre fausse
Ajoutons maintenant les conditions indiques un peu plus haut en utilisant AND ainsi que les
oprateurs de comparaison dtaills ci-dessus :
Sub variables()
If IsNumeric(Range("F5")) Then 'SI NUMERIQUE
Dim nom As String, prenom As String, age As Integer,
numero_ligne As Integer
numero_ligne = Range("F5") + 1
Pour rendre notre macro plus pratique, nous pouvons encore remplacer 17 par une variable
contenant le nombre de lignes. Cela permettra d'ajouter/retirer des lignes notre tableau sans
avoir modifier chaque fois cette limite.
Pour cela, crons une variable nb_lignes et ajoutons cette fonction:
numero_ligne = Range("F5") + 1
nb_lignes = WorksheetFunction.CountA(Range("A:A")) 'Fonction NBVAL
102
Compil par Ass Serge KIKOBYA
If numero_ligne >= 2 And numero_ligne <= nb_lignes Then 'SI N CORRECT
nom = Cells(numero_ligne, 1)
prenom = Cells(numero_ligne, 2)
age = Cells(numero_ligne, 3)
MsgBox nom & " " & prenom & ", " & age & " ans"
Else 'SI N INCORRECT
MsgBox "L'entre " & Range("F5") & " n'est pas un numro valide !"
Range("F5").ClearContents
End If
ElseIf
ElseIf permet d'ajouter plusieurs conditions la suite :
If [CONDITION 1] Then ' => SI condition 1 valide ALORS
'Instructions 1
ElseIf [CONDITION 2] Then ' => SINON, SI condition 2 valide ALORS
'Instructions 2
Else ' => SINON
'Instructions 3
End If
Si la condition 1 est vraie, les instructions 1 sont excutes puis nous sortons de
l'instruction If (qui dbute avec If et finit End If). Si la condition 1 est fausse, nous passons la
condition 2. Si celle-ci est vraie les instructions 2 sont excutes si ce n'est pas le cas les
instructions 3 seront alors excutes.
Voici un exemple, avec en A1 une note de 1 6 (sans virgules pour cet exemple) et en B1 un
commentaire en fonction de la note :
Sub commentaires_notes()
'Variables
Dim note As Integer, commentaire As String
note = Range("A1")
103
Compil par Ass Serge KIKOBYA
End If
'Commentaire en B1
Range("B1") = commentaire
End Sub
Select
Une alternative aux instructions If contenant beaucoup ElseIf existe : Select, cette instruction
tant plus adapte dans ce genre de situations.
Voici la mme macro avec Select :
Sub commentaires_notes()
'Variables
Dim note As Integer, commentaire As String
note = Range("A1")
'Commentaire en B1
Range("B1") = commentaire
End Sub
Notez que nous pouvons galement utiliser les autres oprateurs de comparaison, par exemple :
104
Compil par Ass Serge KIKOBYA
Condition en fonction d'un type
IsNumeric (fonction vue la page prcdente) renvoie TRUE (vrai) si la valeur est numrique et FALSE
(faux) si ce n'est pas le cas :
If IsNumeric(Range("A1")) = True Then 'SI LA VALEUR EST NUMERIQUE ...
Le code suivant est identique au premier (il n'est pas ncessaire d'indiquer = True puisque que l'on cherche
automatiquement savoir si la condition est vraie) :
If IsNumeric(Range("A1")) Then 'SI LA VALEUR EST NUMERIQUE ...
Dans le cas o nous voulons vrifier si la valeur n'est pas numrique, nous avons galement deux
possibilits :
Constante Valeur
vbEmpty 0
vbNull 1
105
Compil par Ass Serge KIKOBYA
vbInteger 2
vbLong 3
vbSingle 4
vbDouble 5
vbCurrency 6
vbDate 7
vbString 8
vbObject 9
vbError 10
If VarType(ma_variable) = vbInteger Then 'SI ma_variable est de type Integer ...
'Identique :
If VarType(ma_variable) = 2 Then 'SI ma_variable est de type Integer ...
Maintenant, si nous voulons vrifier que la variable contienne bien la valeur "12345" sans tenir
compte des autres caractres, nous utiliserons l'oprateur Like ainsi que * devant et derrire la
valeur rechercher.
Le caractre * peut remplacer : aucun, un ou plusieurs caractres :
ma_variable = "Exemple 12345"
106
Compil par Ass Serge KIKOBYA
[a-g] remplace un des caractres suivants : a b c d e f g
[369] remplace un des caractres suivants : 3 6 9
[2-5] remplace un des caractres suivants : 2 3 4 5
[?*#] remplace un des caractres suivants : ? * #
ma_variable = "Exemple 12345"
Pour remplacer un caractre non compris dans les valeurs entre crochets, un ! doit tre ajout
aprs [ :
ma_variable = "Exemple 12345"
Remarque : un caractre en majuscule n'est pas gal ce mme caractre en minuscule. Pour ne pas faire de
distinctions entre majuscules-minuscules, placez Option Compare Text en dbut de module.
While
Les boucles permettent de rpter des instructions un certain nombre de fois, ce qui peut tre un
gain de temps considrable.
Sub boucle_while()
Cells(1, 1) = 1
Cells(2, 1) = 2
Cells(3, 1) = 3
Cells(4, 1) = 4
Cells(5, 1) = 5
Cells(6, 1) = 6
Cells(7, 1) = 7
Cells(8, 1) = 8
Cells(9, 1) = 9
Cells(10, 1) = 10
Cells(11, 1) = 11
Cells(12, 1) = 12
End Sub
Maintenant, imaginez qu'il faille numroter plusieurs centaines de lignes ... Vous comprenez donc
l'intrt de crer des boucles.
107
Compil par Ass Serge KIKOBYA
While [condition]
'Instructions
Wend
End Sub
Tant que la condition est vraie, les instructions sont excutes en boucle (attention ne pas crer
une boucle infinie).
While numero <= 12 'TANT QUE la variable numero est <= 12, la boucle est rpte
Cells(numero, 1) = numero 'Numrotation
numero = numero + 1 'Le numro est augment de 1 chaque boucle
Wend
End Sub
Avec cette boucle, si nous voulons numroter 500 lignes, il suffit alors de remplacer 12 par 500 ...
Do Loop
Cette boucle fonctionne de la mme manire que While Wend (tant que la condition est vraie, la
boucle est excute) :
Sub boucle_do_while()
Do While [condition]
'Instructions
Loop
End Sub
La condition peut galement tre place en fin de boucle Do Loop, ce qui implique que les
instructions sont excutes au moins une fois :
Sub boucle_do_while()
Do
'Instructions
Loop While [condition]
End Sub
Plutt que de rpter la boucle tant que la condition est vraie, il est possible de quitter la boucle
lorsque la condition est vraie en remplaant While par Until :
Sub boucle_do_while()
Do Until [condition]
'Instructions
Loop
End Sub
108
Compil par Ass Serge KIKOBYA
For
Sub boucle_for()
For i = 1 To 5
'Instructions
Next
End Sub
La boucle For est rpte ici 5 fois.
Sub boucle_for()
For i = 1 To 5
MsgBox i
Next
End Sub
En voici un exemple :
Sub boucle_for()
Dim max_boucles As Integer
max_boucles = Range("A1") 'En A1 : une limite de rptitions de la boucle est dfinie
MsgBox i
Next
End Sub
Les autres instructions Exit :
Exit Do 'Quitter une boucle Do Loop
Boucle-exercice
109
Compil par Ass Serge KIKOBYA
Pour mettre en pratique ce qui a t vu jusque-l, nous allons crer tape par tape une macro
qui va colorer 10x10 cellules (en damier rouge et noir) partir de la cellule slectionne, aperu :
Sub exercice_boucles()
'...
End Sub
Pour commencer, ajoutez une boucle For qui va colorer en noir les cellules de la colonne A de 1
10 (10 tant la constante NB_CASES), aperu :
Prenez quelques instants pour crer cette boucle avant de passer la solution ...
110
Compil par Ass Serge KIKOBYA
.
.
.
La solution :
Sub exercice_boucles()
Next
End Sub
La prochaine tape est la coloration en rouge d'une cellule sur 2 grce une instruction If (en
fonction des n de ligne pairs/impairs), aperu :
.
.
.
La solution :
Sub exercice_boucles()
111
Compil par Ass Serge KIKOBYA
Next
End Sub
La condition If l Mod 2 = 0 signifie : si le reste de la division de l par 2 est gal 0 ...
Seuls les n de ligne pairs ont un reste gal 0 lorsqu'ils sont diviss par 2.
Crez maintenant une boucle qui va excuter la premire boucle sur 10 colonnes, aperu :
.
.
.
.
La solution :
Sub exercice_boucles()
If l Mod 2 = 0 Then
Cells(l, c).Interior.Color = RGB(200, 0, 0) 'Rouge
Else
Cells(l, c).Interior.Color = RGB(0, 0, 0) 'Noir
End If
Next
Next
End Sub
112
Compil par Ass Serge KIKOBYA
Pour obtenir ce rsultat ...
Remplacez :
If l Mod 2 = 0 Then
Par :
If (l + c) Mod 2 = 0 Then
Il ne reste plus qu' modifier le code pour crer le damier partir de la cellule active ( la place de
A1), aperu :
.
.
.
.
113
Compil par Ass Serge KIKOBYA
La solution :
Sub exercice_boucles()
If (l + c) Mod 2 = 0 Then
'Cells(n de ligne + dcalage lignes, n de colonne + dcalage colonnes)...
Cells(l + lig, c + col).Interior.Color = RGB(200, 0,
0) 'Rouge
Else
Cells(l + lig, c + col).Interior.Color = RGB(0, 0, 0) 'Noir
End If
Next
Next
End Sub
Public - Private
Pour le moment, toutes les procdures cres sont de typePublic, elles sont accessibles depuis tous les
modules.
Sub exemple()
'Identique :
Public Sub exemple()
Pour rendre une procdure inaccessible hors du module, ajoutez Private :
Private Sub exemple()
Un exemple simple :
114
Compil par Ass Serge KIKOBYA
End Sub
Sub macro_test()
If Range("A1") = "" Then
avertissement ' <= excute la procdure "avertissement"
End If
'etc ...
End Sub
Ici, lorsque "macro_test" est excute et que A1 vaut "", la procdure "avertissement" est
excute.
Les arguments
Les arguments permettent d'utiliser des valeurs d'une procdure dans une sous-procdure (car
rappelez-vous que par dfaut les variables ne sont pas accessibles depuis les autres procdures).
Sub macro_test()
If Range("A1") = "" Then
avertissement "cellule vide"
ElseIf Not IsNumeric(Range("A1")) Then
avertissement "valeur non numrique"
End If
End Sub
Cette procdure ncessite un argument, il faudra donc placer une valeur aprs "avertissement"
pour l'excuter :
En cas d'arguments multiples, ceux-ci doivent tre spars par des virgules.
115
Compil par Ass Serge KIKOBYA
Les arguments optionnels
Par dfaut, si une procdure requiert des arguments, ceux-ci sont obligatoires pour excuter la
procdure.
Des arguments optionnels peuvent tre ajouts aprs les arguments obligatoires avec Optional,
par exemple :
Private Sub boite_de_dialogue(nom As String, Optional prenom, Optional age)
Cette procdure peut alors tre lance avec ou sans arguments optionnels, comme ceci :
Pour vrifier si un argument optionnel est prsent ou non, nous utiliserons la fonction IsMissing.
Cette fonction n'tant compatible qu'avec certains types de variables (dont Variant), le type des
arguments optionnels n'a pas t dclar (type non dclar = Variant).
Sub macro_test()
nom1 = Range("A1")
prenom1 = Range("B1")
age1 = Range("C1")
End Sub
116
Compil par Ass Serge KIKOBYA
If IsMissing(prenom) Then 'Si la variable prenom est absente, on n'affiche que le nom
MsgBox nom
Else 'Sinon, on affiche le nom et le prnom
MsgBox nom & " " & prenom
End If
If IsMissing(prenom) Then 'Si la variable prenom est absente, on affiche le nom et l'ge
MsgBox nom & ", " & age & " ans"
Else 'Sinon on affiche le nom, le prnom et l'ge
MsgBox nom & " " & prenom & ", " & age & " ans"
End If
End If
End Sub
Aperu (exemple 1) :
ByRef - ByVal
Par dfaut, les arguments sont de type ByRef ce qui signifie que, si une variable est passe en
argument, c'est sa rfrence qui est transmise. Autrement dit, si la variable est modifie dans la
sous-procdure, elle le sera galement dans la procdure d'appel.
Par exemple :
Sub macro_test()
Dim nombre As Integer
nombre = 30
calcul_carre nombre
MsgBox nombre
End Sub
Private Sub calcul_carre(ByRef valeur As Integer) 'Il n'est pas ncessaire de prciser ByRef
(puisque par dfaut)
117
Compil par Ass Serge KIKOBYA
valeur = valeur * valeur
End Sub
Pour mieux comprendre, voici ce qui se passe lorsque la macro est lance :
nombre = 30
'La valeur initiale de la variable "nombre" est 30
calcul_carre nombre
'La sous procdure est lance avec la variable "nombre" en argument
End Sub
'Fin de la sous-procdure
MsgBox nombre
'La variable "nombre" a t modifie, 900 est alors affich dans la bote de dialogue
calcul_carre nombre
'La sous procdure est lance avec la variable "nombre" en argument
End Sub
'Fin de la sous-procdure (dans cet exemple, la sous-procdure n'aura servi rien)
MsgBox nombre
'La variable "nombre" n'a pas t modifie, 30 est donc affich dans la bote de dialogue
Ce qu'il faut retenir : utiliser ByVal lorsque la variable ne doit pas tre modifie ...
Les fonctions
La principale diffrence entre une procdure Sub et Function est la valeur retourne par la
fonction.
118
Compil par Ass Serge KIKOBYA
Function carre(nombre)
carre = nombre ^ 2 'La fonction "carre" renvoie la valeur de "carre"
End Function
Sub macro_test()
Dim resultat As Double
resultat = carre(9.876) 'La variable resultat reoit la valeur retourne par la fonction
MsgBox resultat 'Affiche le rsultat (ici, le carr de 9.876)
End Sub
Les fonctions peuvent galement tre utilises sur la feuille comme n'importe quelle fonction
Excel.
MsgBox
Pour le moment, nous n'avons utilis la bote de dialogueMsgBox que pour afficher une information :
Sub effacer_B2()
Range("B2").ClearContents
MsgBox "Le contenu de B2 a t effac !"
End Sub
Dans ce cas, MsgBox n'est utilis qu'avec un seul argument.
Aperu du code :
119
Compil par Ass Serge KIKOBYA
Nous allons maintenant crer une bote de dialogue qui va nous demander de confirmer la
suppression avant d'effectuer les deux instructions. Voici les 3 arguments que nous allons
renseigner :
Aperu :
vbYesNo indique que les boutons de la bote de dialogue sont "Oui" et "Non", vbYes correspond
au bouton "Oui" :
If MsgBox("Texte", vbYesNo, "Titre") = vbYes Then 'Si le bouton Oui est cliqu ...
120
Compil par Ass Serge KIKOBYA
Les diffrentes possibilits pour le second argument de MsgBox
vbOKOnly 0
vbOKCancel 1
vbAbortRetryIgnore 2
vbYesNoCancel 3
vbYesNo 4
vbRetryCancel 5
vbCritical 16
vbQuestion 32
vbExclamation 48
vbInformation 64
Le deuxime argument de MsgBox peut prendre jusqu' une valeur de chaque tableau.
Par exemple, pour une bote de dialogue avec "Oui, Non, Annuler" + icne exclamation + bouton
2 par dfaut :
Aperu :
121
Compil par Ass Serge KIKOBYA
Les constantes peuvent tre remplaces par leur valeur respective, ces 3 lignes sont identiques :
vbOK 1
vbCancel 2
vbAbort 3
vbRetry 4
vbIgnore 5
vbYes 6
vbNo 7
Voici l'exemple d'une MsgBox qui apparat en boucle tant que le bouton Oui n'est pas cliqu :
Sub petite_blague()
Do
If MsgBox("Aimez-vous le site ISIG.AC.CD?", vbYesNo, "Sondage") = vbYes Then
Exit Do ' => Si rponse = Oui on sort de la boucle
End If
Loop While 1 = 1 ' => Boucle infinie
MsgBox ";-)"
End Sub
122
Compil par Ass Serge KIKOBYA
Aperu :
InputBox
L'InputBox demande l'utilisateur d'entrer une valeur depuis une bote de dialogue, exemple :
Sub exemple()
Dim resultat As String
resultat = InputBox("Texte ?", "Titre") 'La variable reoit la valeur entre dans l'InputBox
If resultat <> "" Then 'Si la valeur est diffrente de "" on affiche le rsultat
MsgBox resultat
End If
End Sub
Aperu :
Aperu :
123
Compil par Ass Serge KIKOBYA
II.8. Les vnements Workbook
Nous pouvons excuter du code lors de certains vnements du classeur (ouverture, fermeture,
etc).
Workbook_Open ( l'ouverture)
Pour excuter des instructions l'ouverture du classeur, rendez-vous dans ThisWorkbook et
slectionnez Workbook :
End Sub
Par exemple, en ajoutant l'instruction suivante, une bote de dialogue sera affiche l'ouverture
du classeur :
124
Compil par Ass Serge KIKOBYA
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
La fermeture du classeur peut tre annule en attribuant la valeur True la variable "Cancel".
End Sub
L'enregistrement peut tre annul en attribuant la valeur True la variable "Cancel".
End Sub
L'impression peut tre annule en attribuant la valeur True la variable "Cancel".
End Sub
125
Compil par Ass Serge KIKOBYA
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
End Sub
End Sub
End Sub
End Sub
126
Compil par Ass Serge KIKOBYA
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
End Sub
End Sub
End Sub
End Sub
II.9. UserForm
Pour ajouter un UserForm, procdez de la mme manire que pour un nouveau module :
127
Compil par Ass Serge KIKOBYA
La fentre de l'UserForm ainsi que la "Bote outils" apparaissent :
Si la fentre des proprits n'est pas prsente, affichez-la et commencez par modifier le nom de
l'UserForm (pour mieux s'y retrouver par la suite) :
128
Compil par Ass Serge KIKOBYA
Tout comme le classeur ou les feuilles, l'UserForm a ses propres vnements. Pour ajouter des
vnements, double-cliquez sur la fentre de l'UserForm :
Pour prendre un exemple, nous allons crer deux vnements. Le premier pour dfinir les
dimensions initiales de l'UserForm et le second pour augmenter ses dimensions de 50 pixels au
clic.
129
Compil par Ass Serge KIKOBYA
Lancer un UserForm
Pour lancer un UserForm depuis une procdure, utilisez Show :
Sub lancer_userform()
Mon_userform.Show
End Sub
Les contrles ont galement toute une panoplie de proprits et d'vnements qui diffrent d'un
contrle l'autre, nous ne verrons ici que quelques unes des nombreuses possibilits lies ces
contrles.
Commencez par ajouter les 3 contrles suivants : un intitul (Label), une zone de texte (TextBox)
et un bouton (CommandButton) :
Modifiez le nom et les proprits des contrles (dont la proprit Caption pour le texte) pour
obtenir ceci :
Pour le moment, lorsque l'on rentre un numro et que l'on valide, il ne se passe rien.
Pour y remdier, nous allons commencer par ajouter un vnement pour entrer la valeur de la
zone de texte dans la cellule A1 et fermer l'UserForm.
130
Compil par Ass Serge KIKOBYA
En double-cliquant sur un contrle, vous aurez accs ceci :
Range("A1") = TextBox_numero.Value
'TextBox_numero est le nom de la zone de texte
'Value est la proprit contenant la valeur de la zone de texte
Unload Me
'Unload ferme l'UserForm
'Le nom de l'UserForm a t remplac par Me (puisque ce code est plac dans l'UserForm fermer)
End Sub
Ajoutez un second Label et modifiez les proprits suivantes : Caption, Forecolor (couleur rouge)
et Visible (False, pour masquer le contrle par dfaut) :
Nous allons maintenant ajouter un vnement qui s'active au changement de valeur de la zone
de texte et qui va afficher le message d'erreur si la valeur n'est pas numrique.
Il nous reste encore empcher la validation du formulaire si la valeur n'est pas numrique :
131
Compil par Ass Serge KIKOBYA
End If
End Sub
Pour ne pas laisser vide la partie droite de l'UserForm lorsqu'il n'y a pas d'erreur, nous pouvons la
rduire en modifiant la proprit Width de l'UserForm :
Private Sub TextBox_numero_Change()
If IsNumeric(TextBox_numero.Value) Then 'SI valeur numrique ...
Label_erreur.Visible = False 'Label masqu
Me.Width = 156 'Largeur de l'UserForm
Else 'SINON ...
Label_erreur.Visible = True 'Label visible
Me.Width = 244 'Largeur de l'UserForm
End If
End Sub
Aperu :
132
Compil par Ass Serge KIKOBYA
Si une case est coche/dcoche la valeur de la cellule correspondante sera modifie, avec
l'vnement Click :
Private Sub CheckBox1_Click() 'N1
If CheckBox1.Value = True Then 'Si coch ...
Range("A2") = "Coch"
Else 'Si non coch ...
Range("A2") = "Non coch"
End If
End Sub
Dans cet exemple, les cases ne sont pas coches au lancement de l'UserForm.
Pour cocher les cases dont la valeur de la cellule correspondante est "Coch", un test est effectu
au lancement de l'UserForm avec l'vnement UserForm_Initialize :
Private Sub UserForm_Initialize() 'Cocher si "Coch"
If Range("A2") = "Coch" Then
CheckBox1.Value = True
End If
133
Compil par Ass Serge KIKOBYA
CheckBox2.Value = True
End If
Pour crer un groupe, insrez d'abord un cadre (Frame) puis les boutons d'option :
Une fois le formulaire valid, nous entrerons une donne dans la cellule correspondant aux
numros de colonne et de ligne choisis.
Pour connatre le bouton qui a t coch, nous pourrions procder de la mme manire qu'avec
le prcdent exemple (cases cocher) mais nous allons le faire l'aide d'une boucle pour allger
le code.
Nous utiliserons la boucle For Each que nous n'avions pas encore abord jusque-l. Elle permet
d'excuter des instructions pour chaque objet d'un "groupe d'objet" :
Private Sub CommandButton1_Click()
Dim colonne As String, ligne As String
134
Compil par Ass Serge KIKOBYA
Unload Me
End Sub
Ce formulaire entre alors la valeur "Cellule choisie !" dans la cellule choisie (pour autant que le
formulaire soit complet).
Pour viter d'avoir ce bug, nous avons besoin de vrifier que l'utilisateur a bien coch les deux
boutons d'option.
Pour cet exemple, tant que le formulaire sera incomplet, le bouton "Valider" restera dsactiv. Ce
n'est pas la solution la plus simple, mais cela vous dmontrera l'intrt d'utiliser des
fonctions/procdures dans un UserForm.
Dans le code ci-dessus, nous avons utilis 2 boucles For Each pour obtenir les valeurs des
boutons cochs. Nous allons avoir besoin de ces mmes valeurs dans les vnements Click du
bouton "Valider" ainsi que des 10 boutons d'option.
Pour viter de copier ces boucles dans chaque vnement, nous allons les appeler l'aide d'une
fonction.
135
Compil par Ass Serge KIKOBYA
If bouton_colonne.Value Then
colonne = bouton_colonne.Caption
End If
Next
End Function
Il ne reste plus qu' crer une procdure qui vrifie si les boutons sont bien cochs (en faisant
appel aux deux fonctions) et qui active le bouton si c'est le cas.
L encore, le test est effectu dans une procdure part pour viter de copier 10x le code dans
les vnements des boutons d'option :
136
Compil par Ass Serge KIKOBYA
Private Sub OptionButton18_Click()
activer
End Sub
Private Sub OptionButton19_Click()
activer
End Sub
Private Sub OptionButton20_Click()
activer
End Sub
Notez tout d'abord que le "Mode Cration" doit tre activ pour modifier un contrle plac sur
une feuille (et dsactiv pour utiliser le contrle).
Pour les versions d'Excel infrieures 2007 : bouton sur la barre "Bote outils Contrles".
137
Compil par Ass Serge KIKOBYA
L'objectif est de colorer et slectionner une cellule grce aux barres de dfilement dans la zone
dfinie de 30 lignes x 10 colonnes.
Min : 1
Max : 30 (puisque 30 lignes)
Value : position de la barre (entre 1 et 30 ici)
Mme chose avec la barre horizontale avec un Max 10 ...
Voici le code qui sera appliqu chaque changement de valeur (Value) de la barre verticale :
'Couleur grise sur les cellules
Cells.Interior.Color = RGB(240, 240, 240)
138
Compil par Ass Serge KIKOBYA
'Couleur et slection de la cellule
With Cells(ScrollBar_verticale.Value, ActiveCell.Column)
.Interior.Color = RGB(255, 220, 100) 'Orange
.Select 'Slection de la cellule
End With
End Sub
Au lancement de l'UserForm, nous voulons que les 4 pays soient chargs dans la liste droulante
(avec la mthodeAddItem) :
139
Compil par Ass Serge KIKOBYA
Private Sub UserForm_Initialize()
For i = 1 To 4 ' => pour lister les 4 pays
ComboBox_Pays.AddItem Cells(1, i) 'Ajoute les valeurs des cellules A1 A4 avec la
boucle
Next
End Sub
Au changement de valeur de la liste droulante, nous voulons ajouter les villes correspondant au
pays choisi avec une boucle semblable celle ci-dessus.
no_colonne = ComboBox_Pays.ListIndex + 1
Pour obtenir le nombre de lignes de la colonne du pays choisi, nous pouvons rechercher le n de
ligne de la dernire cellule d'un bloc de cellules non vides :
Grce ces informations, il est dsormais possible de crer la boucle pour ajouter les villes dans
la zone de liste :
Remarque : nous pourrions rduire le code ci-dessus, nanmoins cela rendrait sa lecture plus
difficile :
140
Compil par Ass Serge KIKOBYA
Private Sub ListBox_Villes_Click()
TextBox_Choix.Value = ListBox_Villes.Value
End Sub
141
Compil par Ass Serge KIKOBYA
L'aide Excel est trs riche en informations, n'hsitez pas l'utiliser en cas de besoin ...
Pour mettre en pratique l'utilisation des contrles, rien de tel qu'un petit exercice ...
142
Compil par Ass Serge KIKOBYA
Quelques points prendre en compte :
Prenez un moment pour raliser cet exercice avant de passer la solution ...
.
.
.
Les tests des boutons d'option ont dj t vus la premire page des contrles, c'est pour cela
qu'une solution plus simple a t utilise ici.
Le bouton "Mme" a t choisi par dfaut (proprit Value : True), cela implique qu'il ne sera pas
ncessaire de vrifier si le choix de la civilit a t effectu.
Le bouton "Fermer"
Private Sub CommandButton_Fermer_Click()
Unload Me
End Sub
143
Compil par Ass Serge KIKOBYA
ComboBox_Pays.AddItem Sheets("Pays").Cells(i, 1)
Next
End Sub
Mais pour compliquer un peu les choses, chaque contrle sera test individuellement, et si l'un
d'eux n'est pas rempli, son intitul (Label) sera color en rouge :
'Contrles de contenu
If TextBox_Nom.Value = "" Then 'SI pas de "nom" ...
Label_Nom.ForeColor = RGB(255, 0, 0) 'Label "nom" en rouge
ElseIf TextBox_Prenom.Value = "" Then
Label_Prenom.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Adresse.Value = "" Then
Label_Adresse.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Lieu.Value = "" Then
Label_Lieu.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Pays.Value = "" Then
Label_Pays.ForeColor = RGB(255, 0, 0)
Else
'Instructions pour insrer le contact ici ...
End If
End Sub
144
Compil par Ass Serge KIKOBYA
Insertion des donnes
Le code suivant a t insr l'emplacement indiqu sur la code prcdent (sous forme de
commentaire) :
'Choix de civilit
For Each bouton_civilite In Frame_Civilite.Controls
If bouton_civilite.Value Then
civilite = bouton_civilite.Caption 'Civilit choisie
End If
Next
Vue d'ensemble
Pour terminer, voici le code complet ainsi que le fichier :
145
Compil par Ass Serge KIKOBYA
Private Sub CommandButton_Fermer_Click()
Unload Me
End Sub
'Contrles de contenu
If TextBox_Nom.Value = "" Then 'SI pas de "nom" ...
Label_Nom.ForeColor = RGB(255, 0, 0) 'Label "nom" en rouge
ElseIf TextBox_Prenom.Value = "" Then
Label_Prenom.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Adresse.Value = "" Then
Label_Adresse.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Lieu.Value = "" Then
Label_Lieu.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Pays.Value = "" Then
Label_Pays.ForeColor = RGB(255, 0, 0)
Else
'Si le formulaire est complet, on insre les valeurs sur la feuille
Dim no_ligne As Integer, civilite As String
'Choix de civilit
For Each bouton_civilite In Frame_Civilite.Controls
If bouton_civilite.Value Then
civilite = bouton_civilite.Caption
End If
Next
146
Compil par Ass Serge KIKOBYA
End If
End Sub
Les tableaux sont des "variables" qui permettent de stocker une multitude de valeurs. Nous avons
effleur le sujet la leon sur les variables, nous allons maintenant l'approfondir ...
Le second intrt des tableaux est leur "rapidit". Parcourir un tableau de donnes demande
beaucoup moins de temps que parcourir un "tableau" (compos de cellules) sur une feuille Excel
...
Sur la premire feuille ("BD") : une base de donnes de 5000 lignes sur 3 colonnes :
Sur la seconde feuille : un "tableau" rcapitulatif o seront comptabiliss les "OUI" en fonction des
annes et des clients :
147
Compil par Ass Serge KIKOBYA
Dans le cas prsent, la procdure va parcourir la base de donnes en boucle et comptabilisera
pour chaque anne et chaque n de client le nombre de "OUI" avant de l'entrer dans la cellule
correspondante.
Sans utiliser de tableau, il faudra 131.44 secondes Excel pour excuter la procdure :
148
Compil par Ass Serge KIKOBYA
En enregistrant d'abord la base de donnes (de la feuille "BD") dans un tableau et en effectuant
ensuite les mmes calculs (en utilisant le tableau la place de la base de donnes de la feuille
"BD"), il ne faudra que 1.74 secondes pour excuter la procdure :
Et si l'on dcide d'optimiser la procdure en n'enregistrant que les donnes avec les "OUI" dans le
tableau (ce qui reprsente environ le 3/4 des donnes), 1.02 secondes suffisent :
149
Compil par Ass Serge KIKOBYA
Dans cet exemple, l'utilisation d'un tableau a permis d'excuter la procdure environ 128x plus
rapidement et cette diffrence peut encore augmenter sensiblement lorsque l'on travaille avec
plusieurs bases de donnes en mme temps.
Si vous ne pouvez pas entrer de valeurs fixes (parce que cela dpend de la taille de la base de
donnes par exemple), laissez les parenthses vides.
150
Compil par Ass Serge KIKOBYA
Vous n'avez pas besoin de dclarer un type (string, long, etc.), dans bien des cas cela ralentirait
votre procdure ...
Nous voulons enregistrer ici 11 x 1 valeurs, il faudra donc crer un tableau une dimension :
'Dclaration
Dim tab_exemple(10)
Rappelez-vous que la numrotation d'un tableau commence 0 (c'est une norme en
programmation, autant prendre de bonnes habitudes ds le dbut mme s'il est possible de
modifier cela en VBA).
Vous pouvez utiliser, modifier chaque lment du tableau comme une variable.
151
Compil par Ass Serge KIKOBYA
Dim tab_exemple(10)
'Test 1
MsgBox tab_exemple(8) '=> renvoie : 04.02.2016
'Test 2
MsgBox tab_exemple(8) '=> renvoie : 2016
End Sub
Pour enregistrer ce mme tableau plus rapidement, une boucle For est toute indique :
'Dclaration
Dim tab_exemple(10)
Le tableau 2 dimensions
Pour enregistrer plusieurs colonnes de donnes, une dimension supplmentaire est ncessaire. En
voici un exemple :
152
Compil par Ass Serge KIKOBYA
Enregistrement des donnes dans un tableau 2 dimensions :
'Dclaration
Dim tab_exemple(10, 2) 'Tableau de 11 x 3 "cases"
Le tableau dynamique
Imaginons que cette mme base de donnes soit rgulirement mise jour et que l'on ne puisse
donc pas entrer de valeurs fixes la dclaration ...
Pour connatre le n de ligne de la dernire cellule d'un bloc de cellules non vides, autrement dit,
la dernire ligne de notre base de donnes, utilisez cette formule :
derniere_ligne = Range("A1").End(xlDown).Row
Dclarez un tableau dynamique (parenthses vides), puis dfinissez ses dimensions avec Redim :
Dim tab_exemple()
ReDim tab_exemple(derniere_ligne - 2, 2)
De cette manire vous enregistrerez automatiquement toutes les lignes de la base de donnes
dans le tableau :
153
Compil par Ass Serge KIKOBYA
Sub enreg_tab()
derniere_ligne = Range("A1").End(xlDown).Row 'Dernire ligne de la base de donnes
Dim tab_exemple()
ReDim tab_exemple(derniere_ligne - 2, 2)
Ubound
Dans l'exemple ci-dessus, le dernier n de notre tableau tait derniere_ligne - 2 :
For i = 0 To derniere_ligne - 2
Une autre solution pour connatre ce n consiste utiliser la fonction Ubound :
For i = 0 To UBound(tab_exemple)
Cette fonction renvoie le plus grand n pour une dimension choisie (par dfaut la premire).
Sub enreg_tab()
Dim tab_exemple(10, 2)
'Dclaration
Dim tab_exemple(10, 2) 'Tableau de 11 x 3 "cases"
'Dclaration
Dim tab_exemple()
154
Compil par Ass Serge KIKOBYA
Mme si au premier abord cette seconde mthode semble sduisante, elle peut dans bien des cas
vous faire perdre plus de temps que la premire mthode ...
En enregistrant vos donnes dans le tableau de cette manire, le premier n n'est pas 0 mais 1,
cela peut tre source de confusion ... De plus, si au cours du dveloppement vous choisissez de
n'enregistrer dans le tableau que les donnes rpondant certains critres (ou effectuer toute
autre opration), vous aurez besoin de tout rcrire avec une boucle ...
Cette seconde mthode reste tout de mme intressante lorsque vous avez besoin d'enregistrer
l'ensemble du contenu d'une grande base de donnes, car plus rapide qu'avec une boucle (gain
d'environ 0.2 secondes pour 15'000 entres).
Array
Vous aurez peut-tre parfois besoin de crer un tableau contenant des donnes "fixes".
Dim fr(5)
fr(0) = "SI"
fr(1) = "RECHERCHEV"
fr(2) = "SOMME"
fr(3) = "NB"
fr(4) = "ESTNUM"
fr(5) = "STXT"
Heureusement, vous pouvez vous simplifier la tche en utilisant Array :
fr = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT")
Voici un exemple d'utilisation de la fonction Replace (utile pour mieux comprendre l'exemple
suivant) :
Sub remplacement()
Dim chaine_a_traiter As String
155
Compil par Ass Serge KIKOBYA
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID")
Split
La fonction Split permet de convertir une chane de caractres en un tableau.
chaine = "SI/RECHERCHEV/SOMME/NB/ESTNUM/STXT"
Utilisez la fonction Split et dfinissez le sparateur :
fr = Split(chaine, "/")
Le tableau fr renverra les valeurs suivantes :
MsgBox fr(0) '=> renvoie : SI
MsgBox fr(1) '=> renvoie : RECHERCHEV
MsgBox fr(2) '=> renvoie : SOMME
MsgBox fr(3) '=> renvoie : NB
MsgBox fr(4) '=> renvoie : ESTNUM
MsgBox fr(5) '=> renvoie : STXT
Cette fonction permet d'assembler les valeurs d'un tableau en une chane de caractres.
156
Compil par Ass Serge KIKOBYA
II.11. Utilisations des fonctions Excel
Pour s'y retrouver, une liste des fonctions traduites en anglais est disponible sur ce site, en
voici un extrait :
Fonction en
Fonction en anglais Description de la fonction
franais
NB.SI COUNTIF compte le nombre de cellules qui rpondent un critre donn dans une plage.
NBVAL COUNTA dtermine le nombre de valeurs comprises dans la liste des arguments.
157
Compil par Ass Serge KIKOBYA
Dans l'exemple suivant, le nombre de cellules vides de la plage "A1:D8" est enregistr dans la
variable puis affich dans la bote de dialogue :
Sub test()
var_test = WorksheetFunction.CountBlank(Range("A1:D8"))
MsgBox var_test
End Sub
Pour afficher une valeur (B2) si une cellule (C2) contient une valeur ("OUI"), nous pouvons utiliser
la fonction SI avec la formule =SI(C2="OUI";B2;0) :
L'objectif ici est de crer une fonction capable de faire cela =SI(C2 a un fond vert;B2;0) que
nous crirons comme ceci : =SI_VERT(C2;B2) :
158
Compil par Ass Serge KIKOBYA
Dvelopper la fonction personnalise
Commencez par crer votre fonction :
End Function
Les arguments :
Dans le cas prsent, si le test est FAUX, la valeur sera 0 chaque fois, il est donc inutile d'avoir un argument pour
cela.
Pour vrifier si la couleur est correcte, vous pouvez utiliser une cellule contenant la bonne couleur
comme point de comparaison :
couleur = Sheets("Feuil1").Range("K1").Interior.color
End Function
Mais pour viter de dpendre d'une cellule, nous allons utiliser ici le n de la couleur qui nous
intresse :
End Function
159
Compil par Ass Serge KIKOBYA
Pour connatre le n de couleur de fond d'une cellule, slectionnez la cellule et excutez cette
macro :
Sub test_color()
MsgBox ActiveCell.Interior.color
End Sub
Application.Volatile
End Function
Application.Volatile indique que la fonction est volatile (comme c'est le cas pour la fonction SI), ce
qui signifie qu'elle doit tre recalcule chaque changement de valeur. Par exemple, si vous
modifiez l'un des montants (ou n'importe quelle autre cellule), la fonction est recalcule est
affichera le bon montant.
En revanche, la modification de la couleur de fond ne dclenche pas cette mise jour. Pour
recalculer les valeurs sans attendre, vous pouvez par exemple appuyer sur "Delete" en
slectionnant une cellule vide ou ajouter un bouton "Actualiser" pour tout recalculer d'un clic :
Sub actualiser()
Application.Calculate
End Sub
160
Compil par Ass Serge KIKOBYA
Complments
Une autre manire d'crire cette mme fonction :
161
Compil par Ass Serge KIKOBYA
Crer une application de gestion est donc certainement l'objectif de la majorit des personnes qui se
sont mises au VBA !
Et, bonne nouvelle, si vous avez suivi le cours VBA (ou quivalent), vous avez dj 90% des
connaissances thoriquesutiles au dveloppement d'une application de gestion ...
162
Compil par Ass Serge KIKOBYA