Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la...

33
Corrigés des exercices Chapitre 2 1. Résultats du programme calcul3() La figure 14.1 donne le déroulement de l’exécution du programme calcul3(). x y z x x x y y y z z z x=40 y=8 z=x-y x=x+11 y=y-2 z=x-y 40 8 40 8 51 6 32 51 6 45 32 Étape 1 Étape 2 Étape 3 Étape 4 Figure 14.1 • Les 4 étapes. À l’étape 2, la variable z prend la valeur 32. À l’étape 4, la variable z prend la valeur 45. 2. Résultats du programme calcul4() Six variables sont définies par le programme calcul4() : x, y, z, x1, y1 et z1. Elles sont toutes de type Double. Le déroulement de l’exécution du programme est le suivant : 1. x = 2/3 : 2/3 est calculé, puis sa valeur 0.666666666666667 est affectée à x. Le résultat est donné avec 15 décimales. 2. y = 4/7 : 4/7 est calculé, puis affecté à y. La variable y vaut alors 0.571428571428571. 3. z = x + y : la somme x + y est tout d’abord calculée. Elle vaut 1.23809523809524. La variable z prend alors cette valeur. 4. x1 = Round(x, 2) : cette affectation utilise la fonction Round(x, nb). Celle-ci calcule la valeur arrondie de x avec nb décimales, soit 2 décimales. Elle fournit comme résultat 0.67 et x1 prend la valeur 0.67. 5. y1 = Round(y, 2) : de la même façon, la fonction Round(y, 2) calcule la valeur arrondie de y avec 2 décimales. La variable y1 vaut alors 0.57. © 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Transcript of Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la...

Page 1: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices

Chapitre 2

1. Résultats du programme calcul3()

La figure 14.1 donne le déroulement de l’exécution du programme calcul3().

x

y

z

x x x

y y y

z z z

x=40 y=8

z=x-y x=x+11 y=y-2

z=x-y

40

8

40

8

51

6

32

51

6

45 32

Étape 1 Étape 2 Étape 3 Étape 4

Figure 14.1 • Les 4 étapes.

À l’étape 2, la variable z prend la valeur 32. À l’étape 4, la variable z prend la valeur 45.

2. Résultats du programme calcul4()

Six variables sont définies par le programme calcul4() : x, y, z, x1, y1 et z1. Elles sont toutes de type Double. Le déroulement de l’exécution du programme est le suivant :

1. x = 2/3 : 2/3 est calculé, puis sa valeur 0.666666666666667 est affectée à x. Le résultat est donné avec 15 décimales.

2. y = 4/7 : 4/7 est calculé, puis affecté à y. La variable y vaut alors 0.571428571428571.

3. z = x + y : la somme x + y est tout d’abord calculée. Elle vaut 1.23809523809524. La variable z prend alors cette valeur.

4. x1 = Round(x, 2) : cette affectation utilise la fonction Round(x, nb). Celle-ci calcule la valeur arrondie de x avec nb décimales, soit 2 décimales. Elle fournit comme résultat 0.67 et x1 prend la valeur 0.67.

5. y1 = Round(y, 2) : de la même façon, la fonction Round(y, 2) calcule la valeur arrondie de y avec 2 décimales. La variable y1 vaut alors 0.57.

Livre 7608-VBA.indb 1 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 2: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

2 ◆ Introduction à la programmation avec VBA

6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé par le programme.

3. Extraction des chiffres d’un nombre

Le tirage au hasard d’un nombre compris entre 1000 et 9999 est obtenu en utilisant la fonction Int(9000 * Rnd() + 1000) et en affectant ce résultat à la variable étudiée. Pour obtenir le chiffre de l’unité, puis celui de la dizaine, puis celui de la centaine et enfin celui du millier, il faut effectuer des divisions entières à l’aide des opérateurs \ et Mod.

Voici le texte du programme. Il utilise les variables val (valeur du nombre à étudier), nbu (valeur de l’unité), nbd (valeur de la dizaine), nbc (valeur de la centaine), nbm (valeur du millier) et les variables x et y comme variables auxiliaires.

Listing 14.1 : chiffres4()

•Sub chiffres4()•Dim val As Integer, x As Integer, y As Integer•Dim nbu As Integer, nbd As Integer, nbc As Integer, nbm As Integer•Randomize•val = Int(9000 * Rnd() + 1000) 'nb compris entre 1000 et 9999•nbu = val Mod 10•x = val \ 10•nbd = x Mod 10•y = x \ 10•nbc = y Mod 10•nbm = y \ 10•MsgBox val & " : " & nbu & " " & nbd & " " & nbc & " " & nbm•End Sub

Chapitre 3

1. Prénom, année de naissance et âge

Le programme prenom_age() est défini avec trois variables :

• prenom de type String : la valeur est donnée par l’utilisateur.

• annee de type Integer : la valeur est aussi donnée par l’utilisateur.

• age de type Integer : la valeur est calculée par le programme.

Si l’on veut qu’il affiche comme résultat "Alexandre tu as 23 ans. Bonne chance!", il faut que la chaîne de caractères à afficher grâce à l’instruction MsgBox soit structurée de la façon suivante :

•prenom & " tu as " & age & " ans. Bonne chance!"

La chaîne est constituée de la valeur de la variable prenom, puis de la chaîne " tu as ", puis de la valeur de la variable age, et enfin de la chaîne " ans. Bonne chance!". Notez que les deux chaînes contiennent des espaces de façon que les mots de la chaîne finale soient séparés les uns des autres.

Livre 7608-VBA.indb 2 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 3: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 3

Voici le texte du programme.

Listing 14.2 : prenom_age()

•Sub prenom_age()•Dim prenom As String•Dim annee As Integer, age As Integer•prenom = InputBox("quel est ton prénom ?")•annee = InputBox("quelle est ton année de naissance ?")•age = 2012 - annee•MsgBox prenom & " tu as " & age & " ans. Bonne chance!"•End Sub

Si l’on veut que le résultat soit affiché sur deux lignes au sein de la boîte de dialogue, il faut introduire le caractère spécial vbCr de la façon suivante :

•MsgBox prenom & " tu as " & age & " ans." & vbCr & "Bonne chance!"

2. Numéro de Sécurité sociale

Soit ch la variable qui enregistre le numéro de Sécurité sociale donnée par l’utili-sateur, et soit les variables sexe, annee, mois, departement, numero_registre et cle les variables de type String qui vont servir à mémoriser les diverses informations issues du numéro de Sécurité sociale.

Tout numéro de Sécurité sociale se présente comme l’indique la figure 14.2.

1 78 07 64 386 097 52

1 3 6 9 12 20 Positions

N° SS

Figure 14.2 • structure d’un numéro de sécurité sociale.

Pour extraire chaque information du numéro de Sécurité sociale, il faut employer plusieurs fois la fonction Mid(ch, d, n) qui extrait n caractères de la chaîne ch à partir de la position d. Les caractères étant numérotés à partir de 1, les nombres 1, 3, 6, 9, 12 et 20 donnent les positions des débuts de chaque partie à considérer.

Le programme est donc le suivant.

Listing 14.3 : numero_SS()

•Sub numero_SS()•Dim ch As String•Dim sexe As String, annee As String, mois As String•Dim departement As String, numero_registre As String•Dim cle As String•ch = InputBox("Numéro de Sécurité Sociale " & vbCr _• & "(avec un espace entre chaque élément) ?")•sexe = Mid(ch, 1, 1)

Livre 7608-VBA.indb 3 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 4: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

4 ◆ Introduction à la programmation avec VBA

•annee = Mid(ch, 3, 2)•mois = Mid(ch, 6, 2)•departement = Mid(ch, 9, 2)•numero_registre = Mid(ch, 12, 7)•cle = Mid(ch, 20, 2)•MsgBox "Sexe : " & sexe & vbCr _• & "Annee : " & annee & vbCr _• & "Mois : " & mois & vbCr _• & "Département : " & departement & vbCr _• & "Numéro registre : " & numero_registre & vbCr _• & "Clé : " & cle•End Sub

3. Calculs concernant un emprunt

Soit les variables suivantes :

• montant : le montant de l’emprunt.

• taux : le taux d’intérêt annuel ; d’où la variable t définie par t = taux / 12 qui donne le taux mensuel.

• nb_annees : durée de l’emprunt ; d’où la variable nb définie par nb = nb_annees * 12 qui donne le nombre de mois de la durée de l’emprunt.

• mensualite : mensualité à payer.

Le calcul de la mensualité est donné par la formule :

•mensualite = (montant * t) / (1 - (1 + t) ^ -nb)

Le programme emprunt() effectue les trois calculs demandés :

a. calcul de la mensualité ;

b. calcul de la valeur cible : montant emprunté ;

c. calcul de la valeur cible : nombre de mois.

Les deux derniers calculs sont faits en reformulant la formule initiale :

•new_montant = (new_mensualite * (1 - (1 + t) ^ -nb)) / t•new_nbmois = (-Log(1 - (montant * t / new_mensualite))) / Log(1 + t)

Listing 14.4 : emprunt()

•Sub emprunt()•Dim montant As Double, new_montant As Double•Dim taux As Double, t As Double•Dim mensualite As Double, new_mensualite As Double•Dim nb_annees As Integer•Dim nb As Integer, new_nbmois As Double• '--- Calcul mensualité ---•montant = InputBox("Montant de l'emprunt ?")•taux = InputBox("Taux d'intérêt annuel (exemple : 5,5) ?")•taux = taux / 100

Livre 7608-VBA.indb 4 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 5: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 5

•nb_annees = InputBox("Durée de l'emprunt (nb années) ?")•t = taux / 12•nb = nb_annees * 12•mensualite = (montant * t) / (1 - (1 + t) ^ -nb)•MsgBox Round(mensualite, 2)• '--- Valeur cible = montant emprunté ---•new_mensualite = InputBox("Quelle mensualité souhaitez-vous ? ")•new_montant = (new_mensualite * (1 - (1 + t) ^ -nb)) / t•MsgBox Round(new_montant, 2)• '--- Valeur cible = nombre de mois ---•new_mensualite = InputBox("Quelle mensualité maximale souhaitez-vous ? ")•new_nbmois = (-Log(1 - (montant * t / new_mensualite))) / Log(1 + t)•MsgBox Round(new_nbmois, 2)•End Sub

Chapitre 4

Équation du second degré

L’équation du second degré ax2 + bx + c = 0 est définie avec les coefficients numériques a, b et c, le coefficient a devant être différent de 0. Les valeurs des racines dépendent de la valeur du discriminant b2 – 4 × a × c.

Soit discrim la variable qui donne la valeur du discriminant. Trois cas sont à distinguer pour calculer les racines de l’équation :

• Si la valeur de discrim est positive, les racines sont données par les valeurs de r1 et r2.

• Si la valeur de discrim est nulle, les deux racines sont égales.

• Si la valeur de discrim est négative, il n’y a pas de racines réelles.

Avant l’étude de ces trois cas, il convient de vérifier si le coefficient a est bien différent de 0.

Le programme est structuré par une instruction conditionnelle imbriquée qui examine tous les cas présentés ci-dessus.

Listing 14.5 : eq2degre()

•Sub eq2degre()•Dim a As Double, b As Double, c As Double•Dim discrim As Double, r1 As Double, r2 As Double•a = InputBox("donne la valeur du coef a : ")•b = InputBox("donne la valeur du coef b : ")•c = InputBox("donne la valeur du coef c : ")•discrim = b * b - 4 * a * c•If a = 0 Then• MsgBox "a=0 : calcul impossible!"•ElseIf discrim > 0 Then• r1 = (-b - Sqr(discrim)) / (2 * a)• r2 = (-b + Sqr(discrim)) / (2 * a)• MsgBox "r1=" & r1 & " " & "r2=" & r2

Livre 7608-VBA.indb 5 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 6: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

6 ◆ Introduction à la programmation avec VBA

•ElseIf discrim = 0 Then• r1 = -b / (2 * a)• r2 = r1• MsgBox "r1=r2=" & r1•Else• MsgBox "Pas de racines réelles"•End If•End Sub

Exemples : si a = 1, b = –6.2 et c = 9.25, les racines valent r1 = 2.5 et r2 = 3.7 ; si a = 1, b = –13 et c = 42.25, le discriminant est nul et r1 = r2 = 6.5.

2. Deux nombres sont-ils proches ?

Soit x et y deux variables dont les valeurs sont des nombres aléatoires donnés par la fonction Int(500 * Rnd() + 1), et soit seuil la variable dont la valeur positive est donnée par l’utilisateur à l’aide de l’instruction InputBox.

Pour résoudre le problème, il faut tout d’abord calculer la valeur absolue de la différence x – y. Soit diff la variable qui reçoit la valeur x – y. Si da différence est négative, il suffit d’attribuer la valeur –diff à la variable diff en écrivant If diff < 0 Then diff = –diff. Cette instruction If…Then…(sans Else) rend alors positive la valeur de la différence, donnant ainsi la valeur absolue (la valeur absolue d’un nombre est toujours positive).

La comparaison peut ensuite être faite entre cette valeur positive et la valeur du seuil à l’aide d’une instruction conditionnelle If …Then…Else…End If.

Le programme nbsproches() fournit alors les résultats.

Listing 14.6 : nbs proches()

•Sub nbsproches()•Dim x As Integer, y As Integer•Dim seuil As Integer, diff As Integer•Randomize•x = Int(500 * Rnd() + 1) 'de 1 à 500•y = Int(500 * Rnd() + 1)•seuil = InputBox("valeur du seuil positive : ")•diff = x - y•If diff < 0 Then diff = -diff•If diff < seuil Then• MsgBox "OK " & x & " et " & y & " sont proches"•Else• MsgBox "NON " & x & " et " & y & " ne sont pas proches"•End If•End Sub

Exemple : si x vaut 102 et y vaut 341, et si l’utilisateur donne 200 comme valeur de la variable seuil, les deux nombres x et y sont proches car la variable diff vaut +139, valeur inférieure à 200.

Livre 7608-VBA.indb 6 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 7: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 7

3. Une loterie de 1 à 500

Soit nb la variable dont la valeur est tirée au hasard par la fonction Int(500 * Rnd() + 1) qui donne un résultat compris entre 1 et 500.

Quatre cas sont à distinguer selon les valeurs de la variable nb :

• de 1 à 200 : gain de 10 € ;

• 201 ou 202 : gain de 1 000 € ;

• de 203 à 400 : gain de 20 € ;

• de 401 à 500 : gain de 15 €.

Plusieurs formulations sont possibles pour examiner ces quatre cas. Nous en avons choisi deux. La première est définie avec une succession d’instructions If…Then… (sans Else). La seconde est structurée par l’instruction Select Case…

Voici le premier programme.

Listing 14.7 : loterie1()

•Sub loterie1()•Dim nb As Integer, gain As Integer•Randomize•nb = Int(500 * Rnd() + 1)•If nb >= 1 And nb <= 200 Then gain = 10•If nb = 201 Or nb = 202 Then gain = 1000•If nb >= 203 And nb <= 400 Then gain = 20•If nb >= 401 Then gain = 15•MsgBox "Vous avez gagné " & gain & "€ car nb = " & nb•End Sub

Voici le second programme défini avec l’instruction Select Case...

Listing 14.8 : loterie2()

•Sub loterie2()•Dim nb As Integer, gain As Integer•Randomize•nb = Int(500 * Rnd() + 1)•Select Case nb•Case 1 To 200• gain = 10•Case 201, 202• gain = 1000•Case 203 To 400• gain = 20•Case 401 To 500 • gain = 15•End Select•MsgBox "Vous avez gagné " & gain & "€ car nb = " & nb•End Sub

Livre 7608-VBA.indb 7 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 8: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

8 ◆ Introduction à la programmation avec VBA

Notez les deux formulations lorsque le programme examine si la variable nb vaut 201 ou 202 :

• L’instruction conditionnelle définit la condition avec l’opérateur logique Or :

•If nb = 201 Or nb = 202 Then gain = 1000

• L’instruction Select Case… donne les deux valeurs possibles en les énumérant :

•Case 201, 202• gain = 1000

Chapitre 5

1. Somme et moyenne de plusieurs nombres

Le programme est construit avec quatre variables : x reçoit la valeur du nombre donné par l’utilisateur, som permet de calculer la somme des nombres x, nb permet de compter le nombre des nombres donnés par l’utilisateur, et moy donne la moyenne de ces nombres.

Le texte du programme est le suivant.

Listing 14.9 : somme_nbpos()

•Sub somme_nbspos()•Dim x As Double, som As Double, moy As Double•Dim nb As Integer•som = 0•nb = 0•x = InputBox("Donnez un nombre positif :" & vbCr _• & "Pour arrêter le processus , tapez -1")•While x <> -1• som = som + x• nb = nb + 1• x = InputBox("Donnez un nombre positif :" & vbCr _• & "Pour arrêter le processus , tapez -1")•Wend•If nb > 0 Then• moy = som / nb• MsgBox "somme = " & som & vbCr _• & "moyenne = " & moy•Else• MsgBox "aucun nombre positif!"•End If•End Sub

Le programme est structuré par l’instruction While…Wend avec la condition x <> –1. Lorsque x vaut –1, l’instruction itérative arrête son exécution, sans que cette valeur de –1 soit prise en compte dans le calcul de la somme des nombres.

Livre 7608-VBA.indb 8 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 9: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 9

2. Calcul de Un

Pour calculer Un = a × Un – 1 + b × Un – 2 à partir des valeurs de a, b, U0, U1 et n données par l’utilisateur, plusieurs variables sont nécessaires :

• Les variables a, b et n enregistrent les valeurs données au clavier.

• Les variables U0 et U1 mémorisent les deux valeurs initiales U0 et U1 données par l’utilisateur.

• Les variables U, V et W vont effectuer le calcul demandé lors de l’exécution de l’affectation : U = a * V + b * W.

Le texte du programme utilise aussi la variable i pour compter le nombre de répétitions effectuées. Voici le code de ce programme.

Listing 14.10 : calcul_Un()

•Sub calcul_Un()•Dim a As Double, b As Double•Dim U0 As Double, U1 As Double•Dim U As Double, V As Double, W As Double•Dim n As Integer, i As Integer•a = InputBox("donne la valeur de a : ")•b = InputBox("donne la valeur de b : ")•U0 = InputBox("donne la valeur de U0 : ")•U1 = InputBox("donne la valeur de U1 : ")•n = InputBox("donne la valeur de n : ")•W = U0•V = U1•For i = 2 To n• U = a * V + b * W• W = V• V = U•Next i•MsgBox "Un vaut " & U •End Sub

Lorsque i vaut 2, la variable U prend la valeur de a × U1 + b × U0 puisque V vaut U1 (c’est-à-dire U1) et que W vaut U0 (c’est-à-dire U0). La valeur de U est donc la valeur U2. Puis W prend la valeur de V, c’est-à-dire U1, et V prend la valeur de U, c’est-à-dire U2. Au tour suivant, U va donc prendre la valeur de a × U2 + b × U1, qui est la valeur de U3. Le même processus reproduit plusieurs fois permet de calculer de proche en proche la valeur Un pour n donné par l’utilisateur.

3. Calcul de la valeur actuelle nette

La formule financière qui donne la valeur actuelle nette (VAN) à la date 0 est la suivante :

∑ Fi(1 + t)–i – I

Livre 7608-VBA.indb 9 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 10: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

10 ◆ Introduction à la programmation avec VBA

Elle définit une somme pour i allant de 1 à nb_annees, en mettant en jeu les éléments suivants :

• Fi définit le flux net de trésorerie de la période i : la variable flux représentera ces quantités au sein du programme.

• t est le taux d’actualisation : la variable taux donnera sa valeur au sein de la somme à calculer.

• I est le montant de l’investissement initial : la variable invest_init donnera sa valeur initiale.

Voici le texte du programme qui calcule la VAN selon cette formule.

Listing 14.11 : VAN()

•Sub VAN() •Dim invest_init As Double•Dim flux As Double•Dim taux As Double•Dim nb_annees As Integer, i As Integer•Dim VAN As Double, somme As Double•invest_init = InputBox("Investissement initial ?")•taux = InputBox("Taux d'actualisation ?")•nb_annees = InputBox("Nombre d'années ?")•somme = -invest_init•For i = 1 To nb_annees• flux = InputBox("Flux de trésorerie année " & i)• somme = somme + flux * (1 + taux) ^ -i•Next i•VAN = somme•MsgBox VAN•End Sub

Le programme permet à l’utilisateur de donner les valeurs de l’investissement initial, du taux d’actualisation et du nombre d’années à prendre en compte.

Le calcul de la VAN se fait en initialisant la variable somme avec la valeur négative –invest_init. Il se poursuit en ajoutant les quantités flux * (1 + taux) ̂ – i à la somme déjà calculée, la valeur de la variable flux étant donnée à chaque fois par l’utilisateur.

Au terme du calcul, la variable somme a pour valeur la valeur actuelle nette recherchée.

Exemple : si l’investissement initial vaut 10000, le taux d’actualisation 0,1, le nombre d’années 4 et si les flux nets de trésorerie valent 3500, 3000, 3200 et 3400, le résultat vaut 387,610. La VAN est alors positive.

Livre 7608-VBA.indb 10 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 11: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 11

Chapitre 6

1. Les deux valeurs les plus grandes

Le programme recherche les deux valeurs les plus grandes. Soit maxsup et maxinf les variables qui enregistrent les deux valeurs maximales, la valeur de maxsup étant supérieure ou égale à celle de maxinf.

Le programme étudie chaque valeur x tirée au hasard :

• Si x est supérieure à maxsup, deux mises à jour sont nécessaires : maxinf doit prendre la valeur de maxsup et maxsup doit prendre la valeur de x.

• Sinon (x est inférieure ou égale à maxsup) et si x est supérieure à maxinf, la valeur de maxinf doit être mise à jour : maxinf = x.

Voici le programme correspondant.

Listing 14.12 : deuxmax()

•Sub deuxmax()•Dim x As Integer, maxsup As Integer, maxinf As Integer•Dim i As Integer•Dim ch As String•Randomize•maxsup = 0•maxinf = 0•For i = 1 To 10• x = Int(100 * Rnd() + 1) 'de 1 à 100• ch = ch & " " & CStr(x)• If x > maxsup Then• maxinf = maxsup• maxsup = x• ElseIf x > maxinf Then• maxinf = x• End If•Next i•MsgBox ch & vbCr & "maxsup=" & maxsup & " maxinf=" & maxinf•End Sub

2. Étude d’un mot

Le mot donné au clavier est enregistré par la variable ch. Ce mot contient Len(ch) caractères.

Pour étudier si les caractères de la chaîne ch sont tous différents, il suffit de comparer le ième caractère de ch avec tous les autres caractères de la sous-chaîne commençant en i + 1, en faisant l’étude pour chaque valeur de i allant de 1 à Len(ch) – 1.

Voici le texte du programme.

Livre 7608-VBA.indb 11 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 12: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

12 ◆ Introduction à la programmation avec VBA

Listing 14.13 : lettresdiff()

•Sub lettresdiff() 'première solution, voir MMIA p4•Dim ch As String•Dim i As Integer, j As Integer, nb As Integer•ch = InputBox("donne un mot :")•nb = 0•For i = 1 To Len(ch) - 1• For j = i + 1 To Len(ch)• If Mid(ch, i, 1) = Mid(ch, j, 1) Then nb = nb + 1• Next j•Next i•If nb = 0 Then• MsgBox ("lettres toutes différentes")•Else• MsgBox ("lettres NON toutes différentes")•End If•End Sub

Une double boucle permet de structurer l’étude des caractères : la boucle extérieure est définie par la variable i allant de 1 à Len(ch) – 1 et la boucle intérieure par la variable j allant de i + 1 à Len(ch). La condition Mid(ch, i, 1) = Mid(ch, j, 1) permet de tester si le ième caractère est égal ou non au jième caractère de la chaîne ch. Si tous les caractères sont différents, la variable nb garde sa valeur initiale qui vaut 0.

3. Palindrome

Soit ch la chaîne de caractères à étudier. Soit i la variable qui donne la position des caractères à partir du début de la chaîne et j la variable qui donne la position des caractères à partir de la fin de la chaîne. Pour déterminer si ch est un palindrome ou non, il faut comparer le premier et le dernier caractère, puis le deuxième et l’avant-dernier, etc. Il suffit donc de comparer le ième caractère et le jième caractère autant de fois que nécessaire en augmentant i de 1 et en diminuant j de 1 après chaque comparaison.

Le programme est alors le suivant.

Listing 14.14 : palindrome()

•Sub palindrome() •Dim ch As String•Dim i As Integer, j As Integer•Dim val As Boolean•ch = InputBox("donne le mot à étudier :")•i = 1•j = Len(ch)•val = True•While i < j And val• If Mid(ch, i, 1) = Mid(ch, j, 1) Then• i = i + 1• j = j - 1

Livre 7608-VBA.indb 12 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 13: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 13

• Else• val = False• End If•Wend•If val = True Then• MsgBox ch & " est un palindrome"•Else• MsgBox ch & " n'est pas un palindrome"•End If•End Sub

Exemple : le mot « radar » est un palindrome, alors que ce n’est pas le cas du mot « radars » (avec un s).

Chapitre 7

1. Valeurs cumulées

Le premier tableau tab1 contient les dix valeurs numériques données par l’utilisateur et le second tableau tab2 enregistre les valeurs cumulées. La ième valeur cumulée est calculée en faisant la somme de la ième valeur du tableau initial tab1(i) et de la valeur cumulée tab2(i – 1) calculée précédemment :

•tab2(i) = tab1(i) + tab2(i - 1)

Il faut alors exécuter cette instruction pour toutes les valeurs de i allant de 2 à 10. Pour la valeur i = 1, il suffit d’attribuer à tab2(1) la valeur du premier nombre du tableau.

Voici le programme correspondant.

Listing 14.15 : val_cumulees()

•Sub val_cumulees()•Dim tab1(1 To 10) As Integer, tab2(1 To 10) As Integer•Dim i As Integer•Dim ch1 As String, ch2 As String•ch1 = ""•For i = 1 To 10• tab1(i) = InputBox("donne la valeur n°" & i)• ch1 = ch1 & CStr(tab1(i)) & " "•Next i•tab2(1) = tab1(1)•ch2 = tab2(1) & " "•For i = 2 To 10• tab2(i) = tab1(i) + tab2(i - 1)• ch2 = ch2 & CStr(tab2(i)) & " "•Next i •MsgBox ch1 & vbCr & ch2•End Sub

Livre 7608-VBA.indb 13 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 14: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

14 ◆ Introduction à la programmation avec VBA

2. Deux valeurs successives égales ?

Le tableau t est constitué de 15 éléments. Chaque élément du tableau a pour valeur un nombre tiré au hasard.

La propriété recherchée (existe-t-il deux valeurs successives égales ?) ne concerne que quelques éléments du tableau et non pas tous les éléments. Il convient alors de supposer a priori que la propriété n’est pas vérifiée et d’affecter à la variable prop la valeur 1. Mais dès que le programme constate que deux valeurs successives t(i) et t(i + 1) sont égales (t(i) = t(i + 1)), la variable prop doit prendre la valeur 0 pour signifier que la propriété recherchée est vérifiée.

Le programme est donc le suivant.

Listing 14.16 : deuxnbs()

•Sub deuxnbs()•Dim t(1 To 15) As Integer•Dim i As Integer, prop As Integer•Dim ch As String•ch = ""•Randomize•For i = 1 To 15• t(i) = Int(20 * Rnd() + 1) 'de 1 à 20• ch = ch & CStr(t(i)) & " "•Next i•prop = 1•i = 1•While i < 14 And prop = 1• If t(i) = t(i + 1) Then prop = 0• i = i + 1•Wend•If prop = 0 Then• MsgBox ch & vbCr _• & "il y a deux nbs successifs égaux"•Else• MsgBox ch & vbCr _• & "il n'y a pas deux nbs successifs égaux"•End If•End Sub

L’instruction itérative While…Wend a pour condition i < 14 And prop = 1. Tant que cette condition reste vraie, le programme examine si t(i) et t(i + 1) ont des valeurs égales. Si c’est le cas, la variable prop prend la valeur 0, ce qui rend alors la condition du While fausse, arrêtant ainsi l’exécution de cette instruction.

Le test final étudie la valeur de la variable prop. Si celle-ci vaut 0, deux nombres successifs du tableau sont bien égaux. En revanche, si la variable prop a conservé sa valeur initiale 1, cela signifie que le programme n’a pas constaté l’égalité recherchée : il n’y a donc pas deux valeurs successives égales au sein du tableau.

Livre 7608-VBA.indb 14 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 15: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 15

Chapitre 8

1. Calcul de ex

ex qui vaut 1 + x + x2 / 2! + x3 / 3!+…+ xn / n peut s’écrire sous la forme 1 + ∑xk / k!, pour k allant de 1 à n.

En langage VBA, xk / k! s’écrit (x ^ k) / facto(k), le caractère ^ signifiant puissance, et facto(k) étant une fonction qui calcule la factorielle de k.

Pour calculer ex, il suffit donc de répéter n fois l’affectation suivante :

•res = res + (x ^ k) / facto(k)

dans laquelle res permet de calculer la somme totale après avoir été initialisée à 1.

Le code du programme est constitué d’une procédure et d’une fonction :

• La procédure exp() permet à l’utilisateur de donner les valeurs de x et de n, puis elle effectue le calcul en utilisant une boucle For…Next…

• La fonction facto(x) calcule la factorielle de x.

Listing 14.17 : exp() et facto(x)

•Sub exp()•Dim x As Double, n As Double, res As Double, k As Integer•x = InputBox("donne la valeur de x :")•n = InputBox("donne la valeur de n :")•res = 1•For k = 1 To n• res = res + (x ^ k) / facto(k)•Next k•MsgBox res•End Sub••Function facto(x As Integer) As Double•Dim i As Integer, f As Double•f = 1•For i = 1 To x• f = f * i•Next i•facto = f•End Function

Exemple : si x = 2 et n = 15, le résultat vaut 7.38905609538414.

2. Gestion d’un tableau de notes

Le programme gestion_notes() assure la gestion d’un tableau de notes à l’aide de trois procédures :

• ajout_note() : elle ajoute une note au tableau de notes.

• affichage_notes() : elle affiche toutes les notes.

• moyenne_notes() : elle calcule la moyenne des notes.

Livre 7608-VBA.indb 15 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 16: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

16 ◆ Introduction à la programmation avec VBA

Nous avons défini deux variables globales : tnotes qui définit un tableau de 15 notes et nbnotes qui donne le nombre de notes mises au sein du tableau. Ces deux variables globales sont déclarées en tête du texte et sont utilisées par chacune des procédures.

Voici le texte complet des quatre procédures.

Listing 14.18 : gestion_notes(), ajout_note(), affichage_notes() et moyenne_notes()

•Dim tnotes(1 To 15) As Double•Dim nbnotes As Integer•Sub gestion_notes()•Dim rep As Integer•nbnotes = 0•rep = 1•While rep <> 4• rep = InputBox("1: ajout d'une note" & vbCr _• & "2: affichage des notes" & vbCr _• & "3: moyenne des notes" & vbCr _• & "4: FIN")• If rep = 1 Then ajout_note• If rep = 2 Then affichage_notes• If rep = 3 Then moyenne_notes•Wend•End Sub••Sub ajout_note()•tnotes(nbnotes + 1) = InputBox("donne la note :")•nbnotes = nbnotes + 1•End Sub••Sub affichage_notes()•Dim i As Integer, resultats As String•resultats = ""•For i = 1 To nbnotes• resultats = resultats & " " & tnotes(i)•Next i•MsgBox (resultats)•End Sub••Sub moyenne_notes()•Dim i As Integer, s As Double, moy As Double•For i = 1 To nbnotes• s = s + tnotes(i)•Next i•moy = s / nbnotes•MsgBox moy•End Sub

La procédure gestion_notes() propose quatre choix à l’utilisateur :

• S’il tape 1, c’est la procédure ajout_note() qui s’exécute.

• S’il tape 2, c’est la procédure affichage_notes() qui s’exécute.

• S’il tape 3, c’est la procédure moyenne_notes() qui s’exécute.

• En revanche, s’il tape 4, aucune procédure n’est appelée, la condition du While devient fausse et le programme met fin à son exécution.

Livre 7608-VBA.indb 16 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 17: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 17

3. Une fonction personnalisée

Le nombre de combinaisons à calculer est défini à l’aide de deux paramètres n et p, et vaut n! / (p! * (n – p)!).

En langage VBA, cette expression s’écrit facto(n) / (facto(p) * facto(n – p)) lorsque facto(…) est une fonction qui calcule la factorielle de son argument.

Le code de la fonction facto(x) étant déjà défini (voir listing 14.17), le texte de la fonction personnalisée fp_combin(c1, c2) est alors le suivant.

Listing 14.19 : fp_combin(c1, c2)

•Function fp_combin(c1 As Range, c2 As Range) As Integer•Dim n As Integer, p As Integer•n = c1.Value•p = c2.Value•fp_combin = facto(n) / (facto(p) * facto(n - p))•End Function

Chapitre 9

1. Partage d’une série de nombres

Le programme est structuré avec les variables suivantes :

• p désigne la plage B1:D10 qui contient la série des nombres à étudier (colonne B) et les résultats recherchés (colonnes C et D).

• seuil enregistre la valeur donnée par l’utilisateur.

• i désigne la ligne du ième nombre de la série des nombres.

• j désigne la ligne du jième nombre à ajouter dans la colonne C (nombres inférieurs à la valeur de seuil) ; k désigne la ligne du kième nombre à ajouter dans la colonne D (nombres supérieurs ou égaux à la valeur de seuil).

Voici le texte du programme.

Listing 14.20 : partage_serie()

•Sub partage_serie()•Dim p As Range•Dim seuil As Integer•Dim i As Integer, j As Integer, k As Integer•Set p = Range("B1:D10")•seuil = InputBox("donne la valeur du seuil :")•j = 1•k = 1•For i = 1 To 10• If p.Cells(i, 1).Value < seuil Then• p.Cells(j, 2).Value = p.Cells(i, 1).Value• j = j + 1

Livre 7608-VBA.indb 17 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 18: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

18 ◆ Introduction à la programmation avec VBA

• Else• p.Cells(k, 3).Value = p.Cells(i, 1).Value• k = k + 1• End If•Next i•End Sub

Le ième nombre de la série des nombres est donné par la variable p.Cells(i, 1).Value. Si cette valeur est inférieure à la valeur de seuil, ce nombre est recopié dans la deuxième colonne de la plage au sein d’une cellule de coordonnées (j, 2), puis j est augmenté de 1. Sinon, ce nombre est recopié dans la troisième colonne de la plage au sein d’une cellule de coordonnées (k, 3), puis k est augmenté de 1.

2. Table de multiplications

Le programme est le suivant.

Listing 14.21 : table_multip()

•Sub table_multip()•Dim c As Range•Dim i As Integer, j As Integer•Set c = Range("A1")•For i = 1 To 10 '---(1) Valeurs de i ---• c.Offset(i, 0).Value = i•Next i•For j = 1 To 10 '---(2) Valeurs de j ---• c.Offset(0, j).Value = j•Next j•For i = 1 To 10 '---(3) Résultats ---• For j = 1 To 10• c.Offset(i, j).Value = _• c.Offset(i, 0).Value * c.Offset(0, j).Value• Next j•Next i•End Sub

La variable c désigne la cellule A1.

Le programme exécute les actions suivantes :

1. Valeurs de i. Les valeurs de i allant de 1 à 10 sont placées au sein des cellules de la plage A2:A11 (sur la colonne A).

2. Valeurs de j. Les valeurs de j allant de 1 à 10 sont placées au sein des cellules de la plage B1:K1 (sur la ligne 1).

3. Résultats. Les résultats des calculs sont affectés aux cellules de la plage B2:K11. Le produit i * j est calculé par le produit c.Offset(i, 0).Value * c.Offset(0, j).Value, et sa valeur est affectée à la cellule c.Offset(i, j).

3. Effectifs et fréquences cumulées

Voici le code du programme.

Livre 7608-VBA.indb 18 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 19: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 19

Listing 14.22 : val_cumulees()

•Sub val_cumulees()•Dim i As Integer, nblig As Integer•Dim s As Double•Dim pl As Range•Set pl = Selection•nblig = pl.Rows.Count• '---(1) Effectifs cumulés ---•pl.Cells(1).Offset(0, 1).Value = pl.Cells(1).Value•s = 0•For i = 2 To nblig• s = pl.Cells(i).Value + pl.Cells(i - 1).Offset(0, 1).Value• pl.Cells(i).Offset(0, 1).Value = s•Next i• '---(2) Fréquences relatives ---•For i = 1 To nblig• pl.Cells(i).Offset(0, 2).Value = pl.Cells(i).Value / s•Next i• '---(3) Fréquences relatives cumulées ---•For i = 1 To nblig• pl.Cells(i).Offset(0, 3).Value = pl.Cells(i).Offset(0, 1).Value / s•Next i•End Sub

Le programme est conçu pour que l’utilisateur sélectionne tout d’abord une plage de cellules à une seule colonne dans laquelle il va mettre les effectifs à examiner. Cette colonne est désignée par la variable pl. Puis le programme calcule le nombre de lignes de la plage pl en exécutant nblig = pl.Rows.Count.

Le programme effectue ensuite les trois traitements demandés.

1. Calcul des effectifs cumulés. La valeur initiale des effectifs cumulés est la première valeur des effectifs. D’où la première affectation :

pl.Cells(1).Offset(0, 1).Value = pl.Cells(1).Value.

Pour déterminer la ième valeur des effectifs cumulés, il faut faire la somme de la ième valeur de l’effectif étudié et de la (i – 1)ème valeur de l’effectif cumulé déjà calculée. Le résultat de la somme est affecté à la variable s. Le calcul est schématisé par la figure 14.3.

ligne i

ligne i-1

pl.Cells(i-1).Offset(0,+1)

pl.Cells(i)

pl.Cells(i).Offset(0,+1)=s

+1

137 21

116

Figure 14.3 • Le calcul du ième effectif cumulé.

Livre 7608-VBA.indb 19 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 20: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

20 ◆ Introduction à la programmation avec VBA

La somme s vaut donc :

•s = pl.Cells(i).Value + pl.Cells(i - 1).Offset(0, 1).Value

Cette valeur s est la valeur recherchée. Elle est affectée à la cellule désignée par pl.Cells(i).Offset(0, 1) car c’est elle qui doit contenir la ième valeur des effectifs cumulés. Le calcul ainsi défini est répété plusieurs fois, pour chacune des valeurs de i allant de 2 à nblig.

Au sortir de la boucle, la variable s contient la somme des effectifs de la plage pl.

2. Calcul des fréquences relatives. Chaque valeur est le quotient de la ième valeur de l’effectif initial par la somme des effectifs s. Elle vaut donc pl.Cells(i).Value / s, et sa valeur est affectée à la ième cellule de la deuxième colonne des résultats qui est définie par pl.Cells(i).Offset(0, 2). D’où l’affectation qu’il faut exécuter nblig fois :

•pl.Cells(i).Offset(0, 2).Value = pl.Cells(i).Value / s

3. Calcul des fréquences relatives cumulées. Chaque valeur est le résultat de la division de la fréquence cumulée par la somme des effectifs. Elle vaut donc pl.Cells(i).Offset(0, 1).Value / s. Sa valeur est ensuite affectée à la ième cellule de la troisième colonne des résultats. Le code suivant doit alors être exécuté nblig fois :

•pl.Cells(i).Offset(0, 3).Value = pl.Cells(i).Offset(0, 1).Value / s

Chapitre 10

1. Formulaire de calcul

Le formulaire est construit selon la maquette donnée par la figure 14.4.

CALCUL

Btn_Calcul

TextBox1

TextBox2 Le deuxième nombre

Le troisième nombre

Le premier nombre

TextBox3

TextBox4

UF_3nbs

Figure 14.4 • La maquette du formulaire.

La variable UF_3nbs désigne l’objet formulaire et cet objet est affiché par la procédure trois_nbs() dont voici le code (on peut aussi définir un bouton de commande).

Livre 7608-VBA.indb 20 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 21: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 21

Listing 14.23 : trois_nbs()

•Sub trois_nbs()•UF_3nbs.Show•End Sub

Au bouton de commande Btn_Calcul du formulaire est associée la procédure Btn_Calcul_Click(). Celle-ci examine la valeur des trois nombres donnés par l’uti-lisateur et détermine si l’un d’entre eux est égal ou non à la somme des deux autres. Voici le code de cette procédure.

Listing 14.24 : Btn_Calcul_Click()

•Private Sub Btn_Calcul_Click()•Dim x As Integer, y As Integer, z As Integer•x = CInt(TextBox1.Text)•y = CInt(TextBox2.Text)•z = CInt(TextBox3.Text)•If x = y + z Or y = x + z Or z = x + y Then• TextBox4.Text = "Egalité"•Else• TextBox4.Text = "NON Egalité"•End If•End Sub

2. Nombre proche

La plage B1:B10 donne la série des nombres à étudier. Le bouton de commande Btn_Calcul, intitulé « CALCUL », permet d’afficher le formulaire UF_Nbproche lors de l’exécution du code suivant :

•Private Sub Btn_Calcul_Click()•UF_Nbproche.Show•End Sub

Lorsque l’utilisateur clique sur le bouton du formulaire intitulé « Nombre Proche », la procédure associée recherche alors le nombre le plus proche parmi les dix nombres situés en B1:B10. La figure 14.5 donne un état de la feuille de calcul après le traitement.

Figure 14.5 • La feuille de calcul après le traitement.

Livre 7608-VBA.indb 21 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 22: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

22 ◆ Introduction à la programmation avec VBA

Le bouton du formulaire intitulé « Nombre Proche » est désigné par la variable Btn_Proche, et la procédure associée a pour nom Btn_Proche_Click(). Son code est le suivant.

Listing 14.25 : Btn_Proche_Click()

•Private Sub Btn_Proche_Click()•Dim p As Range•Dim i As Integer, x As Integer•Dim diff As Integer, nb As Integer•Set p = Range("B1:B10")•x = CInt(TextBox1.Text)•diff = Abs(x - p.Cells(1).Value)•nb = p.Cells(1).Value•For i = 2 To 10• If Abs(x - p.Cells(i).Value) < diff Then• diff = Abs(x - p.Cells(i).Value)• nb = p.Cells(i).Value• End If•Next i•TextBox2.Text = CStr(nb)•End Sub

3. Agence de voyage

Il s’agit d’ajouter un bouton de commande et un formulaire à l’application présentée au paragraphe 3.2 du chapitre 10 afin de pouvoir modifier les informations données lors d’une inscription (nombre de personnes et formule retenue).

Le bouton, ajouté sur la feuille de calcul, est intitulé « MODIFICATION », et il est désigné par la variable Btn_Modif. Le formulaire associé est désigné par la variable UF_Modif. Il a la même structure que le formulaire UF_Inscription de l’application comme l’indique la figure 14.6.

Figure 14.6 • Le formulaire de modification.

Livre 7608-VBA.indb 22 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 23: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 23

L’utilisateur saisit d’abord les informations au sein du formulaire : le nom de la personne déjà inscrite (sans le modifier), puis le nombre de personnes et la formule retenue (Week-End, Semaine ou Promotion) qui sont modifiées par rapport à l’enre-gistrement déjà effectué. Puis l’utilisateur clique sur le bouton de commande intitulé « VALIDATION ».

Ce bouton est désigné par la variable Btn_OK_Modif. La procédure associée, appelée Btn_OK_Modif_Click(), est alors exécutée. En voici le code.

Listing 14.26 : Btn_OK_Modif_Click()

•Private Sub Btn_OK_Modif_Click()•Dim c As Range•Dim nb As Integer, prix As Integer•Dim choix As String•Dim i As Integer• '---(1) Recherche du nom ---•i = 1•While Range("B3").Offset(i, 0).Value <> TextBox1.Text _•And Range("B3").Offset(i, 0).Value <> Empty• i = i + 1•Wend• '---(2) Enregistrement des modifs ---•If Range("B3").Offset(i, 0) <> Empty Then• Set c = Range("B3").Offset(i, 0)• c.Offset(0, 1).Value = TextBox2.Text• nb = CInt(TextBox2.Text)• choix = ComboBox1.Value• c.Offset(0, 2).Value = choix• If choix = "Week-End" Then prix = nb * 100• If choix = "Semaine" Then prix = nb * 500• If choix = "Promotion" Then prix = nb * 150• c.Offset(0, 3).Value = prix• MsgBox "La modification de " & TextBox1.Text & " est enregistrée"• Unload Me•Else• MsgBox "Erreur sur le nom de la personne"•End If•End Sub

La procédure agit en deux temps :

1. Recherche du nom. Les noms des personnes déjà inscrites figurent au sein de la colonne B, à partir de la cellule B4. Le raisonnement à suivre est formulé avec une double condition. Tant que la ième cellule de la colonne B contient un nom et que celui-ci n’est pas le nom recherché, alors il faut examiner la cellule suivante de cette colonne. Mais dès que la valeur de la ième cellule est le nom cherché, il convient d’arrêter l’étude des noms. Il faut aussi arrêter le processus lorsque la ième cellule est vide et ne contient pas de nom.

Lorsque la boucle While…Wend termine son exécution, la variable i désigne la ligne qui contient le nom cherché, ou bien qui ne contient aucun nom.

Livre 7608-VBA.indb 23 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 24: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

24 ◆ Introduction à la programmation avec VBA

2. Enregistrement des modifications. Après avoir vérifié que la ième cellule Range("B3").Offset(i, 0) n’est pas vide (elle contient donc un nom), le programme affecte à la variable c l’adresse de cette cellule, puis il réalise les mises à jour relatives au nom contenu par cette cellule.

Chapitre 11

1. Dessin

Le dessin à reproduire se présente comme à la figure 14.7.

J6: cellule

12

3 4de départ

Figure 14.7 • La maquette du dessin.

Il convient tout d’abord de donner un format carré à chaque cellule concernée, en choisissant par exemple 12,5 comme hauteur des lignes et 2 comme largeur des colonnes.

Il s’agit ensuite de colorier les cellules en partant d’une cellule donnée. Nous proposons de commencer à la cellule J6, positionnée à la ligne 6 et à la colonne 10.

Voici le programme qui colorie quatre cellules dans chacun des quatre parcours (parcours numérotés 1, 2, 3 et 4 sur la figure).

Listing 14.27 : dessin()

•Sub dessin()•Dim i As Integer, j As Integer•Dim k As Integer•i = 6•j = 10 'cellule J6•For k = 1 To 4 'parcours 1• Cells(i, j).Interior.ColorIndex = 4• i = i - 1• j = j - 1•Next k•For k = 1 To 4 'parcours 2• Cells(i, j).Interior.ColorIndex = 4• i = i + 1• j = j - 1•Next k•For k = 1 To 4 'parcours 3• Cells(i, j).Interior.ColorIndex = 4

Livre 7608-VBA.indb 24 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 25: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 25

• i = i + 1• j = j + 1•Next k•For k = 1 To 4 'parcours 4• Cells(i, j).Interior.ColorIndex = 4• i = i - 1• j = j + 1•Next k•End Sub

2. Frise n° 1

La première frise est structurée par la répétition de six cellules qui sont organisées à partir de la cellule B3 comme l’indique la figure 14.8.

c=cellule B3 =c.Offset(0,0)

c.Offset(-1,0) c.Offset(-1,+1)

c.Offset(+1,0)

c.Offset(+1,+1) c.Offset(0,+1)

Figure 14.8 • La frise n° 1.

Voici le programme qui permet de réaliser cette frise.

Listing 14.28 : frise1()

•Sub frise1()•Dim c As Range•Dim j As Integer, k As Integer•Set c = Range("B3")•For k = 0 To 12 Step 2• c.Offset(0, k).Interior.ColorIndex = 6 'jaune• c.Offset(-1, k).Interior.ColorIndex = 6• c.Offset(-1, k + 1).Interior.ColorIndex = 6• c.Offset(0, k + 1).Interior.ColorIndex = 3 'rouge• c.Offset(1, k).Interior.ColorIndex = 3• c.Offset(1, k + 1).Interior.ColorIndex = 3•Next k•End Sub

Le programme affecte à la variable c l’adresse de la cellule B3. Puis il colorie les cellules en fonction de leur position par rapport à cette cellule :

• k vaut d’abord 0 : le programme colorie les six premières cellules.

• La valeur suivante de k vaut 2 car le pas de l’instruction itérative est de 2. Les cellules sont décalées de +2 vers la droite, et le même traitement est appliqué aux six cellules concernées.

Livre 7608-VBA.indb 25 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 26: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

26 ◆ Introduction à la programmation avec VBA

• Il en est de même pour les valeurs suivantes de k : 4, 6, 8, 10 et 12. L’instruction itérative définie avec la variable k assure ainsi sept fois le coloriage des six cellules.

3. Frise n° 2

Pour réaliser la seconde frise, il suffit de la découper en une succession de croix comme l’indique la figure 14.9.

Cellule de départ

Ligne i

Colonne j 0 1 2 3 4

0 1 2 3 4

Figure 14.9 • La frise n° 2.

Chaque croix s’inscrit dans un ensemble de 5 × 5 cellules où chaque cellule est repérée par son numéro de ligne i et son numéro de colonne j, i allant de 0 à 4 et j allant de 0 à 4. Les cellules sont coloriées lorsqu’elles appartiennent à l’une des deux diagonales : première diagonale lorsque i = j et deuxième diagonale lorsque i = 4 – j.

Voici le programme correspondant.

Listing 14.29 : frise2()

•Sub frise2()•Dim c As Range•Dim i As Integer, j As Integer, k As Integer•Set c = Range("B2")•For k = 0 To 15 Step 5• For i = 0 To 4• For j = 0 To 4• If i = j Or i = 4 - j Then• c.Offset(i, j + k).Interior.ColorIndex = 5• End If• Next j• Next i•Next k•End Sub

Le programme attribue à la variable c l’adresse de la cellule B2 qui sert de cellule de référence. Puis le programme exécute trois boucles imbriquées (triple boucle) :

• Lorsque k = 0, le programme exécute une première fois la double boucle structurée par les valeurs de i et de j. Il colorie les cellules c.Offset(i, j + k) c’est-à-dire c.Offset(i, j) lorsqu’elles satisfont aux conditions sur i et j.

Livre 7608-VBA.indb 26 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 27: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 27

• La valeur suivante de k vaut 5 puisque le pas de l’instruction itérative est de 5. Le programme exécute alors une deuxième fois la double boucle définie par i et j. Les cellules c.Offset(i, j + k), c’est-à-dire c.Offset(i, j + 5), sont situées à droite des précédentes cellules, avec un déplacement de +5. Elles sont coloriées lorsqu’elles satisfont aux conditions sur les variables i et j.

• Puis le programme exécute à nouveau ce traitement pour k = 10 et pour k = 15.

Au terme du processus, le programme a colorié quatre croix respectant les conditions imposées aux variables i et j.

Chapitre 12

1. Calculs financiers

Nous proposons que le calcul du montant de l’emprunt soit structuré de la même façon que celui qui détermine la mensualité d’un emprunt : il faut alors ajouter un troisième bouton de commande « EMPRUNT Montant ? » sur la feuille F_menu comme cela est présenté sur la figure 14.10.

Figure 14.10 • La feuille F_menu.

Le bouton de commande « EMPRUNT Montant ? » est désigné par la variable Btn_Emprunt2. Voici le code de la procédure associée Btn_Emprunt2_Click().

Listing 14.30 : Btn_Emprunt2_Click()

•Private Sub Btn_Emprunt2_Click()•Dim f_emprunt2 As Worksheet•Set f_emprunt2 = Worksheets("F_montants_emprunt")•f_emprunt2.Activate•End Sub

Il faut ensuite définir une nouvelle feuille de calcul F_montants_emprunt organisée comme l’indique la figure 14.11.

Livre 7608-VBA.indb 27 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 28: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

28 ◆ Introduction à la programmation avec VBA

Figure 14.11 • La feuille de calcul F_montants_emprunt.

Au bouton de commande intitulé « CALCUL Montants » et désigné par la variable Btn_Calcul_Montants est associée la procédure Btn_Calcul_Montants_Click(), et au bouton intitulé « Quitter » est associée la procédure Btn_Quitter_Click(). Voici le texte de la première procédure.

Listing 14.31 : Btn_Calcul_Montants_Click()

•Private Sub Btn_Calcul_Montants_Click()•Dim m As Double, t As Double•Dim taux As Double, mens As Double•Dim n As Integer, nb As Integer, i As Integer, j As Integer•Dim p As Range• '---(1) Données et calcul du montant ---•mens = Range("B3").Value•t = Range("B4").Value•n = Range("B5").Value•m = (mens * (1 - (1 + (t / 12)) ^ -(n * 12))) / (t / 12)•Range("B6").Value = Round(m, 2)• '---(2) Mise en place du tableau ---•Set p = Range("B8:G13")•p.Cells(1, 1).Value = Round(m, 2)•taux = Range("B4").Value - 0.01•nb = Range("B5").Value - 2•For i = 2 To 6 'valeurs des durées• p.Cells(i, 1).Value = nb• nb = nb + 1•Next i•For j = 2 To 6 'valeurs des taux• p.Cells(1, j).Value = taux• taux = taux + 0.005•Next j• '---(3) Calcul des montants ---•For i = 2 To 6• For j = 2 To 6• n = p.Cells(i, 1).Value• t = p.Cells(1, j).Value• m = (mens * (1 - (1 + (t / 12)) ^ -(n * 12))) / (t / 12)• p.Cells(i, j).Value = Round(m, 2)• Next j•Next i•End Sub

Livre 7608-VBA.indb 28 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 29: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 29

La procédure effectue plusieurs calculs :

1. Données et calcul du montant. Elle calcule tout d’abord la valeur du montant à partir des données fournies par l’utilisateur au sein des cellules B3, B4 et B5. Le calcul du montant m est fait en utilisant les variables mens (mensualité), t (taux d’intérêt en valeur décimale) et n (durée en années de l’emprunt) au sein de l’affec-tation suivante :

•m = (mens * (1 - (1 + (t / 12)) ^ -(n * 12))) / (t / 12)

Cette formulation est la transcription informatique de la formule financière qui définit la valeur du montant de l’emprunt : M = (Me / T) × (1 – (1 + T)–N), Me étant la mensualité, T le taux d’intérêt mensuel et N le nombre de mois de la durée de l’emprunt.

2. Mise en place du tableau. La procédure met en place le tableau B8:G13 désigné par la plage p. Sur la première colonne (B9:B13), elle met les valeurs des durées qui vont être utilisées. Sur la première ligne (cellules C8:G8), elle met les valeurs des différents taux qui encadrent le taux d’intérêt déjà utilisé pour le calcul précédent.

3. Calcul des montants. La procédure calcule ensuite les valeurs des montants en appliquant pour chaque couple de valeur (taux, durée) la formule financière.

Toutes ces valeurs se mettent en place dès que l’utilisateur a donné les valeurs demandées, puis cliqué sur le bouton « CALCUL Montants ».

2. Gestion de prêts

Il s’agit de compléter l’application « Gestion de prêts » en la dotant d’un service supplé-mentaire INFORMATIONS. Celui-ci doit permettre de donner des informations sur l’état des prêts.

Un bouton de commande intitulé « INFORMATIONS » est ajouté à la feuille F_menu comme l’indique la figure 14.12.

Figure 14.12 • La feuille F_menu.

Livre 7608-VBA.indb 29 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 30: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

30 ◆ Introduction à la programmation avec VBA

Au bouton « INFORMATIONS » est associée la procédure suivante :

Listing 14.32 : Btn_Infos_Click()

•Private Sub Btn_Infos_Click()•UF_Infos.Show•End Sub

Voici le formulaire que nous proposons d’ajouter au sein de l’application. Il est donné par la figure 14.13.

Figure 14.13 • Le formulaire UF_infos.

Ce formulaire désigné par la variable UF_Infos contient deux boutons de commande. Le premier, intitulé « CALCUL », est défini par la variable Btn_Nbpers. La procédure associée Btn_Nbpers_Click() est conçue pour effectuer les calculs demandés. Le second bouton est intitulé « Quitter » et permet d’effacer le formulaire de l’écran sans conserver d’information. Le formulaire contient aussi six zones de texte définies par les variables TextBox1, TextBox2,… , TextBox6. Celles-ci vont recevoir les informations calculées par la procédure Btn_Nbpers_Click().

Pour calculer le nombre de personnes ayant empruntés 0 document, 1 document, 2 documents,… , 5 documents, cette procédure doit consulter le nombre de documents empruntés par chaque personne inscrite. Comment trouver cette information ?

L’application est munie de plusieurs variables globales dont la variable ci. Celle-ci désigne la première cellule de la liste des noms de personnes du classeur Inscrits. La variable ci.Offset(i, 0) désigne donc la ième personne et ci.Offset(i, 3).Value donne alors le nombre de documents empruntés par cette personne.

Le texte du programme est alors le suivant.

Livre 7608-VBA.indb 30 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 31: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 31

Listing 14.33 : Btn_Nbpers_Click()

•Private Sub Btn_Nbpers_Click()•Dim i As Integer•Dim nb0 As Integer, nb1 As Integer, nb2 As Integer•Dim nb3 As Integer, nb4 As Integer, nb5 As Integer• '---(1) Initialisations ---•init•i = 0•nb0 = 0: nb1 = 0: nb2 = 0: nb3 = 0: nb4 = 0: nb5 = 0• '---(2) Calculs ---•While ci.Offset(i, 0).Value <> Empty• If ci.Offset(i, 3).Value = 0 Then• nb0 = nb0 + 1• ElseIf ci.Offset(i, 3).Value = 1 Then• nb1 = nb1 + 1• ElseIf ci.Offset(i, 3).Value = 2 Then• nb2 = nb2 + 1• ElseIf ci.Offset(i, 3).Value = 3 Then• nb3 = nb3 + 1• ElseIf ci.Offset(i, 3).Value = 4 Then• nb4 = nb4 + 1• Else• nb5 = nb5 + 1• End If• i = i + 1•Wend• '---(3) Affichage des résultats ---•TextBox1.Text = CStr(nb0)•TextBox2.Text = CStr(nb1)•TextBox3.Text = CStr(nb2)•TextBox4.Text = CStr(nb3)•TextBox5.Text = CStr(nb4)•TextBox6.Text = CStr(nb5)•End Sub

La procédure agit en trois temps :

1. Initialisation. L’appel à la procédure init() permet de créer et d’initialiser toutes les variables globales dont la variable ci. Puis les variables i, nb0, nb1,… , nb5 sont initialisées à 0 (les « : » ajoutés sur la ligne permettent de mettre plusieurs instructions sur cette ligne).

2. Calculs. Tant que la ième cellule contient un nom, la procédure examine la valeur de ci.Offset(i, 3) et met à jour le nombre de documents empruntés selon les résultats aux tests.

3. Affichage des résultats. Les valeurs de nb0, nb1,… , nb5 étant calculées, elles sont affichées sous forme de chaînes de caractères au sein des six zones de texte du formulaire.

Livre 7608-VBA.indb 31 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 32: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

32 ◆ Introduction à la programmation avec VBA

Chapitre 13

1. Comparaison de trois suites récurrentes

Soit trois fonctions qui permettent de calculer la racine d’ordre 5 d’un nombre a, c’est-à-dire a1/5 :

Fonction n° 1 : f(x) = (2 ¥ x + a / (x ^ 4)) / 3

Fonction n° 2 : f(x) = (3 ¥ x + a / (x ^ 4)) / 4

Fonction n° 3 : f(x) = (4 ¥ x + a / (x ^ 4)) / 5

Ces trois fonctions définissent une limite L qui vaut a1/5. Leurs coefficients de conver-gence valent respectivement 2/3, ¼ et 0, indiquant ainsi que la fonction n° 3 est celle dont la vitesse de convergence vers le résultat est la plus grande.

Voici le texte du programme formulé avec la variable U pour la fonction n° 1, la variable V pour la fonction n° 2 et la variable W pour la fonction n° 3.

Listing 13.34 : suite_rac5()

•Sub suite_rac5() •Dim i As Integer•Dim U As Double, V As Double, W As Double, a As Double•Dim c As Range•Set c = Range("B1")•a = InputBox("valeur de a :")•U = InputBox("valeur initiale de U :")•V = U•W = U•For i = 0 To 99• U = (2 * U + (a / (U ^ 4))) / 3• V = (3 * V + (a / (V ^ 4))) / 4• W = (4 * W + (a / (W ^ 4))) / 5• c.Offset(i, 0).Value = U 'affichage colonne B• c.Offset(i, 1).Value = V 'affichage colonne C• c.Offset(i, 2).Value = W 'affichage colonne D•Next i•End Sub

Si l’on donne à la variable a la valeur 243 qui vaut en fait 35 (3 à la puissance 5), on vérifie ainsi à quelle vitesse on obtient la valeur 3 comme résultat. Lorsque l’on donne 3,2 comme valeur initiale et que l’on affiche les résultats avec 15 décimales, on obtient cette valeur 3 à la soixante-dix-septième itération avec la fonction n° 1, à la vingt-deuxième itération avec la fonction n° 2 et à la quatrième itération avec la dernière fonction. C’est bien cette fonction qui permet d’obtenir le programme le plus performant.

Livre 7608-VBA.indb 32 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier

Page 33: Chapitre 2 - pearson.fr · 2 Introduction à la programmation avec VBA 6. z1 = x1 + y1 : z1 vaut la somme 0.67 + 0.57, c’est-à-dire 1.24 qui est le résultat calculé …

Corrigés des exercices ◆ 33

Les trois racines de x3 – 3x + 1 = 0

La première racine 0.347296355333861 a été obtenue à la cinquantième itération avec le calcul par dichotomie et à la quatrième itération avec la méthode de Newton (voir paragraphe 3.1 du chapitre 13).

Pour calculer les deux autres racines, il faut déterminer des intervalles qui contiennent les deux valeurs recherchées :

• Si x = –1, f(x) = x3 – 3x + 1 vaut +3 et si x = -2, f(x) vaut –1 : la deuxième racine est donc comprise entre –2 et –1.

• Si x = +1, f(x) vaut –1 et si x=+2, f(x) vaut +3 : la troisième racine est donc comprise entre +1 et +2.

Il suffit alors de réutiliser les programmes déjà présentés :

• Dans le programme fx_dicho() (voir listing 13.5), il convient de donner aux variables a et b les nouvelles valeurs. La deuxième racine établie avec a = –2 et b = –1 vaut –1.87938524157182 à la quarante-neuvième itération. La troisième racine calculée avec a = 1 et b = 2 vaut 1.53208888623796 à la quarante-neuvième itération elle aussi.

• Dans le programme fx_newton() (voir listing 13.6), il faut initialiser le processus en partant d’une valeur proche. La deuxième racine calculée avec une valeur initiale y = –2 donne le même résultat que précédemment à la quatrième itération. La troisième racine calculée en donnant à y la valeur +2 fournit la même valeur que celle qui a été déterminée par dichotomie, mais à la sixième itération.

Livre 7608-VBA.indb 33 07/08/12 07:05

© 2012 Pearson France – Introduction à la programmation avec VBA – Robert Chevallier