Maj 2008
Page 1/ 12
Maj 2008
Renvoie une valeur de type Variant (String) contenant une copie d'une
chane en supprimant les espaces de droite.
Renvoie une valeur de type Variant (String) comprenant le nombre
Space
d'espaces indiqu.
Str
Renvoie une valeur de type Variant (String) reprsentant un nombre.
Renvoie une valeur de type Variant (Integer) indiquant le rsultat d'une
StrComp
comparaison de chanes.
StrConv
Renvoie une valeur de type Variant (String) convertie au format indiqu.
Renvoie une valeur de type Variant (String) contenant une chane
String
constitue d'un caractre rpt sur la longueur indique.
Renvoie une chane contenant des caractres dont l'ordre a t invers
StrReverse
par rapport une chane donne.
Renvoie une valeur de type Variant (String) contenant une copie d'une
Trim
chane en supprimant les espaces de gauche et de droite.
Renvoie une valeur de type Variant (String) contenant la chane
UCase
indique, convertie en majuscules.
Si vous fouillez dans l'aide en ligne, vous serez sans doute surpris de voir que certaines
fonctions de chane sont doubles, comme par exemple Left et Left$ ou bien encore Mid
et Mid$ ; apparemment, quand on examine les explications sur ces fonctions jumelles,
on ne note aucune diffrence.
Et pourtant, elles existent et nous allons cette occasion reparler des variables de type
Variant. Vous vous souvenez peut-tre que je vous avais dit que le type de donnes
Variant tait trs souple et qu'il accomplissait une partie du travail votre place.
Ce travail a bien videmment un cot et ce que vous n'avez pas faire, vous le payez en
termes de performance. En fait, la diffrence entre Mid et Mid$ a trait au type de
variable avec lequel la fonction va travailler : Mid travaille avec des donnes Variant et
Mid$ travaille avec des donnes String. La belle affaire me direz-vous puisque cette
distinction est totalement transparente pour vous. En ralit, elle ne l'est pas puisque la
fonction Mid$ est dans certains cas presque deux fois plus rapide que son quivalent qui
marche avec des variables Variant. Mme si la programmation n'est pas votre activit
principale et que vous n'avez aucun souci d'optimisation de votre code, il est important
de comprendre ces diffrences et de pouvoir les valuer. Nous allons voir dans l'exemple
suivant qu'il est trs facile de mettre en place une procdure de test de performance et
vous verrez qu'un petit programme peut fournir des rsultats significatifs :
RTrim
Sub testperf1()
Dim boucle As Double
chaine = " La femme des uns fait le bonheur des autres "
depart = Timer 'dclenche le chrono
For boucle = 1 To 1000000
Dim x
x = Mid(chaine, 26, 7)
Next boucle
fin = Timer ' arrte le chrono
MsgBox (fin - depart)
' affiche le rsultat en secondes
End Sub
Ce premier programme initialise une chane de caractres puis dclenche un compteur
l'aide de la fonction Timer qui renvoie une valeur reprsentant le nombre de secondes
coules depuis minuit.
Une boucle est excute ensuite un million de fois. A l'intrieur de cette boucle, on
Page 2/ 12
Maj 2008
initialise une variable qui est de type Variant tant donn qu'aucun type n'est dclar et
on ralise une opration sur une chane de caractres. A la fin de la boucle, on dclenche
un deuxime chrono et on affiche la diffrence entre les deux chronos, c'est--dire le
temps coul pendant le droulement de la boucle.
Le deuxime programme de test est similaire sauf qu'on prend la peine de dclarer les
variables chane en tant que String et qu'on utilise la fonction Mid$ :
Sub testperf2()
Dim chaine As String
Dim boucle As Double
chaine = " La femme des uns fait le bonheur des autres "
depart = Timer
For boucle = 1 To 1000000
Dim x As String
x = Mid$(chaine, 26, 7)
Next boucle
fin = Timer
MsgBox (fin - depart)
End Sub
Le tableau ci-dessous vous montre les rsultats des tests effectus sur huit fonctions. La
deuxime colonne indique le temps avec la fonction renvoyant une variable Variant et la
troisime colonne indique le temps avec la fonction renvoyant une variable String. Les
valeurs de temps sont exprimes en secondes.
Fonction
Variant
String
Diffrence en %
x = Mid(chaine, 26, 7)
1.54
1.14
0,35
x = Left(chaine, 20)
1.30
.92
0,41
x = Right(chaine, 20)
1.30
.92
0,41
x = LTrim(chaine)
1.30
.99
0,31
x = RTrim(chaine)
1.26
.98
0,29
x = Trim(chaine)
1.38
1.10
0,25
x = LCase(chaine)
12.14
11.87
0,02
x = UCase(chaine)
11.32
10.93
0,04
Mme s'il faut prendre ces mesures avec des pincettes, elles sont suffisamment
significatives sur certaines fonctions pour que cela puisse avoir un impact dans certains
programmes qui font un usage intensif du traitement des chanes de caractres.
Ces deux petits programmes ont surtout un but pdagogique : ils vous montrent qu'il est
ais d'crire une macro pour tester deux versions diffrentes d'un mme programme. De
plus, ils vous enseignent que la facilit fait finalement perdre du temps et qu'on a
toujours intrt tre le plus explicite possible dans un programme car on gagne en
temps et en lisibilit.
Page 3/ 12
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Hour
Minute
Month
MonthName
Now
Second
Time
Timer
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Maj 2008
Maj 2008
DDB
FV
IPmt
IRR
MIRR
Nper
Page 5/ 12
DDB
VC
INTPER
TRI
TRIM
NPM
NPV
Pmt
PPmt
PV
Rate
SLN
SYD
Maj 2008
VAN
VPM
PRINCPER
VA
TAUX
AMORLIN
SYD
EOF
FileAttr
FileDateTime
FileLen
FreeFile
GetAttr
Input
Page 6/ 12
Loc
LOF
Seek
Maj 2008
Maj 2008
Nom_de_fonction(expression)
L'argument expression peut tre n'importe quelle expression de chane ou expression
numrique et le nom de la fonction dtermine le type renvoy, comme le montre le
tableau suivant
Boolean
Byte
Page 8/ 12
Maj 2008
Page 9/ 12
Maj 2008
Rappel : un tableau est une variable particulire qui peut contenir plusieurs valeurs ;
chaque valeur du tableau s'appelle un lment et on accde chaque lment par un
numro nomm indice.
FormatCurrency
FormatDateTime
FormatNumber
FormatPercent
Page 10/ 12
Affiche une invite dans une bote de dialogue, attend que l'utilisateur tape
du texte ou clique sur un bouton, puis renvoie le contenu de la zone de
texte sous la forme d'une valeur de type String.
Affiche un message dans une bote de dialogue, attend que l'utilisateur
clique sur un bouton, puis renvoie une valeur de type Integer qui indique le
Maj 2008
Page 11/ 12