Quelques macros corrigées (PDF, 109 Ko)

Transcription

Quelques macros corrigées (PDF, 109 Ko)
Quelques corrigés de macros
Structures de contrôle alternatives.
Ecrire une macro qui demande un nombre à un utilisateur, puis lui demande une valeur entière entre 1 et 5 et
affiche le premier nombre à la puissance du second. On utilisera un Case
Sub puissance()
Dim x As Double
Dim n As Integer
x = InputBox("entrez un nombre")
n = InputBox("entrez un exposant entier")
Select Case n
Case 0: x = 1
Case 2: x = x * x
Case 3: x = x * x * x
Case 4: x = x * x * x * x
Case 5: x = x * x * x * x * x
End Select
MsgBox ("voici la puissance: " & x)
End Sub
Structures de contrôle répétitives.
Ecrire une macro utilisant un Do while qui calcule le nombre de voyelles d’une chaîne de caractères rentré par
l’utilisateur. La transformer à l’aide d’une boucle For..Next
On a besoin pour travailler sur les caractères d’une chaîne de caractères d’une fonction prédéfinie Mid(string,
start[, length]). La valeur de cette fonction est la chaîne extraite de la chaîne string à partir de la position start
sur une longueur length. Par exemple, Mid(« bonjour »,2,3) vaut « onj ».
On utilise également la fonction Len(string) qui donne la longueur de la chaîne passée en paramètre. Ainsi que la
fonction LCase qui transforme un mot en minuscules (pour éviter des tests).
Sub nbvoy()
Dim cpt As Integer
Dim i As Integer
Dim lettre As String
Dim mot As String
mot = InputBox("entrez un mot")
cpt = 0
i=1
Do while i <= Len(mot)
lettre = LCase(Mid(mot, i, 1))
If lettre = "a" Or lettre = "e" Or lettre = "i" Or lettre = "o" Or lettre = "u" Then
cpt = cpt + 1
End If
i=i+1
Loop
MsgBox (" il y a " & cpt & " voyelles")
End Sub
Pour écrire la boucle avec un for, on remplace le Do while … loop par:
For i=1 to Len(mot)
lettre = LCase(Mid(mot, i, 1))
If lettre = "a" Or lettre = "e" Or lettre = "i" Or lettre = "o" Or lettre = "u" Then
cpt = cpt + 1
End If
Next
Ecrire une macro qui calcule le nombre de doublons (deux caractères consécutifs identiques) dans une chaîne de
caractère rentrée par l’utilisateur.
Sub nbdoublons()
Dim cpt As Integer
Dim i As Integer
Dim mot As String
mot = InputBox("entrez un mot")
cpt = 0
i=1
Do while i < Len(mot)
If Mid(mot, i, 1) = Mid(mot, i+1,1) then
cpt = cpt + 1
End If
i=i+1
Loop
MsgBox (" il y a " & cpt & " doublons")
End Sub
Definition de fonctions sans paramètres
Ecrire une fonction qui renvoie la somme des carrés des entiers jusqu’à 10. L’utiliser dans la feuille Excel (dans
une cellule).
Function somcar() As Integer
Dim somme As Integer
Dim i As Integer
somme = 0
For i = 1 To 10
somme = somme + i * i
Next
somcar = somme
End Function
Dans Excel, on écrira dans une cellule =SOMCAR()
Définitions de fonctions avec paramètres et appel dans Excel
Ecrire une fonction de deux paramètres qui calcule un nombre décimal x à la puissance d’un entier n. L’utiliser
dans la feuille de calcul
Function puissance(x As Double, n As Integer) As Double
Dim i As Integer
Dim r As Double
r=1
If n >= 0 Then
For i = 1 To n
r=r*x
Next
Else
For i = n To -1
r=r/x
Next
End If
puissance = r
End Function
Si l’on souhaite utiliser cette fonction dans une feuille de calcul, on pourra par exemple, constituer les trois
cellules A1,B1,C1 sont comme suit :
3
2
=PUISSANCE(A1 ;B1)
Et la valeur 9 apparaîtra dans la cellule C1.
Ecrire une fonction de deux paramètres x et n qui calcule la somme des xk/k pour k allant de 1 à n qui utilise la
fonction puissance.
Function serie(x As Double, n As Integer) As Double
Dim r As Double
Dim k As Integer
r=0
For k = 1 To n
r = r + puissance(x, k) / k
Next
serie = r
End Function
Ecrire une autre version de cette fonction sans utiliser la fonction puissance. A votre avis, laquelle est la
meilleure ?
Function seriebis(x As Double, n As Integer) As Double
Dim r As Double
Dim puis As Double
Dim k As Integer
r=0
puis = 1
For k = 1 To n
puis = puis * x
r = r + puis / k
Next
seriebis = r
End Function
La fonction ci-dessus fait moins de calculs que la précédente, puisqu’à chaque appel de puissance, k
multiplications sont effectuées, alors que dans la seconde fonction, seulement une multiplication est faite.
Ecrire une fonction qui calcule le nombre de doublons dans une chaîne.
Function nbdoublons(mot As String) As Integer
Dim cpt As Integer
Dim i As Integer
cpt = 0
i=1
Do While i < Len(mot)
If Mid(mot, i, 1) = Mid(mot, i + 1, 1) Then
cpt = cpt + 1
End If
i=i+1
Loop
nbdoublons = cpt
End Function
Sub test()
Dim a As String
a = InputBox("entrez un mot")
MsgBox (nbdoublons(a))
End Sub
Définitions de procédures avec paramètres
Ecrire une procédure qui lorsqu’on lui donne un texte s en paramètre, et une valeur booléenne b, affiche Bonjour
monsieur s dans une boite de dialogue si le booleen est vrai, Bonjour madame s si le booleen est faux. Tester
cette procédure à l’aide d’une macro dont c’est le seul but.
Sub salut(nom As String, sexe As Boolean)
If sexe Then
MsgBox ("Bonjour Monsieur " & nom)
Else
MsgBox ("Bonjour Madame " & nom)
End If
End Sub
Sub testsalut()
salut nom:="Dupont", sexe:=True
salut nom:="durand", sexe:=False
End Sub
Ecrire une procédure sans paramètres qui demande le numéro de sécurité sociale de l’utilisateur, puis son nom,
et affiche le message correspondant à son sexe, comme précédemment.
Sub secu()
Dim num As String
Dim nomutil As String
num = InputBox("entrez votre numéro de sécurité sociale")
nomutil = InputBox("entrez votre nom")
salut nom:=nomutil, sexe:=(Mid(num, 1, 1) = "1")
End Sub

Documents pareils