VBA : analyse et programmation
25 septembre 2007
Qualités d’un projet
- Fiabilité : il doit donner les résultats corrects attendus.
- Robustesse : il doit gérer les erreurs de manipulation des utilisateurs.
- Convivialité : il doit être agréable à utiliser (souris, icônes, menus...)
- Efficacité : il doit donner des réponses rapides et claires.
- Compacité : il doit occuper le moins de place possible en mémoire.
- Lisibilité : il doit être structuré en modules, commenté, présenté clairement.
- Portabilité : il doit être aisément transférable sur une machine d’un autre type.
Algorithme 1
Quand on a un problème à résoudre par programmation on doit tout d’abord trouver une stratégie pour y parvenir.
Il faut bien sur que cette stratégie soit "programmable" dans le langage de programmation choisi. Il faut donc bien connaître les caractéristiques et les possibilités de ce langage.
Le plus souvent on écrit un algorithme en français (c’est la stratégie adoptée) que l’on pourra ensuite coder dans le langage de programmation choisi.
Premier exemple
Il s’agit de chercher quel jour de la semaine tombe la fête de Noël d’une année donnée.
Référence : Noël 1900 était un mardi.
Rappel : 1900 n’était pas bissextile mais 2000 le sera.
Analyse :
Noël se décale d’un jour par an (365 jours = 52 semaines + 1 jour) pour les années normales et de 2 jours par an pour les années bissextiles.
On suppose que le dimanche est numéroté 1, lundi 2 ... ... ... et samedi 7 ou 0.
Donc le mardi 25 décembre 1900 porte le numéro 3.
Il suffit donc d’ajouter à ce nombre (3) les décalages occasionnés par les années (normales ou bissextiles).
Algorithme :
Année ß saisie de l’année à traiter
DécalageA ß nombre d’années entre 1900 et Année
DécalageB ß nombre d’années bissextiles entre 1900 et Année
DécalageTotal ß 3 + DécalageA + DécalageB
JourSem ß reste de la division de DécalageTotal par 7
Programme :
Private Sub Form_Load()
Dim Année As Integer
Dim DécalageA As Integer, DécalageB As Integer
Dim NombreDeJours, JourSem As Integer
Année = InputBox("Taper une année")
DécalageA = Année - 1900
DécalageB = Int(DécalageA / 4)
NombreDeJours = 3 + DécalageA + DécalageB
JourSem = NombreDeJours Mod 7
MsgBox (JourSem)
End Sub
Algorithme 2
Deuxième exemple
Il s’agit de trier en ordre décroissant les nombre contenus dans un tableau de 100 entiers.
Différentes stratégies sont à notre disposition. La plus classique est celle du tri à bulles.
Analyse :
On peut comparer chaque nombre à son suivant et mettre en tête le plus grand des deux.
On avance ainsi dans le tableau jusqu’à la fin de celui-ci.
Puis on recommence au début jusqu’à ce que plus aucune permutation ne soit effectuée.
Pour cela il faut un indicateur de permutation (drapeau ou sémaphore).
Alors le tableau est trié.
Algorithme :
Début
Faire
Permuté ¬ 0 ’ drapeau indiquant qu’aucune permutation n’a été effectuée
Pour i = 1 à 99
Si Case i < Case i+1 alors
Auxiliaire ¬ Case i
Case i ¬ Case i+1
Case i+1 ¬ Auxiliaire
Permuté ¬ 1 ’ drapeau indiquant qu’une permutation a été effectuée
Fin de Si
Nouveau i
Recommencer tant que Permuté = 1
Fin
Programme :
Public Sub TriABulles()
Dim Permuté As Integer
Dim Auxiliaire As Integer
Do
Permuté = 0
For i = 1 To 99
If TabEntiers(i) < TabEntiers(i + 1) Then
Auxiliaire = TabEntiers(i)
TabEntiers(i) = TabEntiers(i + 1)
TabEntiers(i + 1) = Auxiliaire
Permuté = 1
End If
Next i
Loop While Permuté = 1
End Sub
Derniers conseils
- Privilégier une étude descendante : du général au particulier.
- Réfléchir à la structure des données la plus appropriée.
Par exemple pour le jeu du PENDU utiliser un tableau
TabTitres(1 To 10, 1 To 3) As String qui contiendra :
1. En ligne 1 les titres des films
2. En ligne 2 les squelettes (*******)
3. En ligne 3 une aide sous forme de texte ("C’est un western") - Utiliser des noms de variables significatifs :
NombreATrouver As Integer
TitreIncomplet As String
LettreInitiale As String*1 - Initialiser les variables même si VB le fait dans certains cas.
- Si nécessaire travailler sous forme de procédures publiques utilisables dans toute la feuille.
- Définir une interface utilisateur complète.
Par exemple pour le jeu du PENDU prévoir un bouton pour "Ajouter une lettre" et un autre pour "Proposer une réponse".
- Commenter le programme pour qu’il soit plus compréhensible en vue de modifications ultérieures et le rédiger clairement.
- Enfin : que le programme "Tourne" avant de soigner sa forme.
[ Imprimer
cet article ] [ Haut ]
|