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