Académique Documents
Professionnel Documents
Culture Documents
MOISE Ammar
Octobre 2023
Contents
1 Analyse des résultats des élèves lors d’un semestre 2
2 Multiplication matricielle 5
1
1 Analyse des résultats des élèves lors d’un semestre
Nous allons dans cet exercice étudier les résultats des étudiants du département GIMA-ID durant le
semestre S7 de cette deuxième année. Le but est d’étudier le grade d’un élève qui va lui servir pour
son GPA. En plus de cela nous allons déterminer si l’élève en question peut passer ou s’il est obligé
de redoubler. Nous allons donc déterminer cela avec deux méthodes: la moyenne arithmétique et
la moyenne quadratique. Pour rappel, voici les équivalences notes et grades.
Nous allons d’abord générer aléatoirement les moyennes des élèves du département dans plusieurs
matières. Les moyennes seront comprises entre 7 et 20.Pour ce faire nous utilisons la fonction
ALEA.ENTRE.BORNES Voici le code et le résulat.
==ALEA.ENTRE.BORNES(7;20)
Nom Génie Industriel VBA Analyse de Données Théorie des jeux Anglais
Aliotti 6 17 18 18 15
Bouaouda 11 11 13 12 14
Chemin 5 7 15 16 17
Foubert 18 17 19 5 18
Danielgb 7 8 15 12 18
Godard 18 6 10 12 9
Guella 17 10 9 15 10
Hra 11 8 17 6 15
Lahmidi 14 19 19 5 16
Lamkadmi 6 6 18 13 19
Le-Douarec 14 17 20 15 14
Letartre 6 10 16 15 15
Maurin 17 8 6 10 16
Moise 7 12 20 13 8
Oulahna 10 19 17 19 8
Rahali 11 10 20 15 5
Reilhes 12 19 10 5 19
Speismann 7 7 14 5 13
Sutty 20 14 11 5 6
Tran-Ruesche 10 18 9 12 12
Aboubacker 12 18 13 16 14
2
Nous allons à présent traiter ces données à l’aide de VBA. Pour cela nous allons calculer la
moyenne générale de chaque élève, puis définir le grade associé et enfin décider le passage ou le
redoublement de l’étudiant.
1 Sub CalculateMeansAndGrades()
2 Dim ws As Worksheet
3 Set ws = ThisWorkbook.Sheets("Notes")
4
12 Dim i As Long
13
14 For i = 2 To lastRow
15 ’ Calculate arithmetic mean
16 Dim sum As Double
17 sum = 0
18 For j = 2 To 6 ’ Columns B to F
3
19 sum = sum + ws.Cells(i, j).Value
20 Next j
21 ws.Cells(i, 7).Value = sum / 5
22
4
2 Multiplication matricielle
Nous allons effectuer la multiplication matricielle de deux matrices sur Excel grâce à VBA. Pour ce
faire, nous allons appliquer la célèbre formule calculant coefficient par coefficient et qui ne fonctionne
que si le nombre de colonne de la 1ère matrice est égal au nombre de colonnes de la 2ème. C’est
d’ailleur traité dans la 1ère partie de notre code VBA qui renvoie un message d’erreur si cette
condition n’est pas vérifiée.
22 ’ Effectuer la multiplication
23 For i = 1 To rowsA
24 For j = 1 To colsB
25 resultMatrix(i, j) = 0
26 For k = 1 To colsA
27 resultMatrix(i, j) = resultMatrix(i, j) + matrixA.Cells(i, k).Value *
matrixB.Cells(k, j).Value
28 Next k
29 Next j
30 Next i
31
Afin de simplifier l’usage de cet outil, nous avons décide de coder sous VBA un message(box)
qui demande à l’utilisateur de spécifier les plages de chacunes des deux matrices à multiplier (par
exemple A1:B6 pour la 1ère); et enfin de spécifier la plage où voudrait que la matrice résultante
s’affiche.
5
Figure 1: Multiplication de deux matrices
Voici le code :
1 Sub MultiplyMatricesWithFormulaMain()
2 ’ Demander l’utilisateur de spcifier la plage de la matrice A
3 On Error Resume Next ’ Permettre l’utilisateur d’annuler la bote de dialogue
4 Dim rangeA As Range
5 Set rangeA = Application.InputBox("Slectionnez la plage de la matrice A Par exemple:
A1:B6", Type:=8)
6 On Error GoTo 0 ’ Ractiver la gestion des erreurs
7
6
26 Dim resultRange As Range
27 Set resultRange = Application.InputBox("Slectionnez la plage o stocker le rsultat de
la multiplication des matrices:", Type:=8)
28 On Error GoTo 0
29
38 MsgBox "La multiplication des matrices a ete effectue avec succes. Le rsultat a t
place dans la plage specifiee.", vbInformation
39 End Sub
7
3 Algorithme de recherche dichotomique d’un entier x dans
un tableau d’entiers triés
On se propose à présent de de rechercher de manière dichotomique un entier x dans un tableau trié.
La recherche dichotomique est une recherche de complexité logarithmique il ne faudrait donc pas
implémenter de fontions annexes de complexité plus grande.
On demande d’abord à notre utilisateur de spécifier la plage de son tableau d’entiers.Par exem-
ple, une plage est soit une ligne soit une colonne (A1:A165 ou C23:O23). Comme dans le précédent
algorithme on peut code une interface pour demander la plage à l’utilisateur.
Puis on applique notre algorithme de recherche dichotomique avec le pivot et divisant succes-
sivement notre problème en 2. Voici un exemple pour un tableau très simple:
1 Sub RechercheDichotomique()
2 Dim plage As Range
3 Dim elementRecherche As Integer
4 ’ Demander l’utilisateur de spcifier la plage
5 On Error Resume Next
6 Set plage = Application.InputBox("Slectionnez une plage :", Type:=8)
7 On Error GoTo 0
8 If plage Is Nothing Then
9 MsgBox "Aucune plage slectionne . Le programme va se terminer."
10 Exit Sub
11 End If
8
12 ’ Demander l’utilisateur de spcifier l’ lment rechercher
13 On Error Resume Next
14 elementRecherche = InputBox("Entrez l’lment rechercher :")
15 On Error GoTo 0
16 If elementRecherche = 0 Then
17 MsgBox "Aucun lment spcifi . Le programme va se terminer."
18 Exit Sub
19 End If
20 ’ Appliquer l’algorithme de recherche dichotomique
21 Dim celluleTrouvee As Range
22 Set celluleTrouvee = RechercheDichotomiqueDansPlage(plage, elementRecherche)
23
24 ’ Afficher le rsultat
25 If Not celluleTrouvee Is Nothing Then
26 MsgBox "L’ lment " & elementRecherche & " a t trouv dans la cellule " &
celluleTrouvee.Address
27 Else
28 MsgBox "L’ lment " & elementRecherche & " n’a pas t trouv dans la plage
spcifie ."
29 End If
30 End Sub
31
37 debut = 1
38 fin = plage.Rows.Count
39
9
4 Ecrire le pgcd de 2 nombres
Nous allons dans cet exercice calculer le pgcd de deuc nombres en utilisant l’algorithme d’Euclide.
Comme dans les deux précédents exercices, nous allons coder une interface sous VBA permettant
d’indiquer le 1er nombre puis le 2ème nombre. Voici des illustrations de notre interface:
1 Sub CalculerPGCDDeuxNombres()
2 ’ Demander l’utilisateur de spcifier les deux nombres
3 Dim n1 As Integer
4 Dim n2 As Integer
10
5
10 If n1 = 0 Then
11 MsgBox "Aucun nombre spcifi . Le programme va se terminer."
12 Exit Sub
13 End If
14
19 If n2 = 0 Then
20 MsgBox "Aucun nombre spcifi . Le programme va se terminer."
21 Exit Sub
22 End If
23
28 ’ Afficher le rsultat
29 MsgBox "Le PGCD de " & n1 & " et " & n2 & " est " & pgcd
30 End Sub
31
41 CalculerPGCD = a
42 End Function
11