Programmation sous Excel
Comme promis, voici un petit tutorial vous expliquant comment avoir un environnement de programmation avec seulement Excel d'installé. Cela peut être pratique au travail, lorsque seulement Office est installé.
Voyez-vous les étoiles qui tapisse le fond ? Eh bien, ce gif animé a été créé sur Excel et nous allons voir comment.
Configuration préalable du poste de travail.
Activez les macros pour pouvoir exécuter votre programme.
- Allez dans le menu [Outils][Macro][Sécurité].
- Activez le niveau de sécurité bas ou le niveau de sécurité moyen. Attention aux virus si vous activez le niveau de sécurité bas. Les documents Excel contenant des virus ne seront plus bloqués. Il est nécessaire de relancer Excel après cette opération.
Affichez la barre d'outils Visual Basic
- Allez dans le menu [Affichage][Barres d'outils][Visual Basic]
- La barre suivante s'affiche :
: Affiche la boîte à outils.
: Passe du mode création au mode exécution.
Passez la feuille en caractères texte.
Pour pouvoir taper n'importe quelle valeur dans les cellules Excel, il est plus pratique de convertir les cellules en mode texte. Cela évitera à Excel d'interpréter à tord certaines valeurs.
Pour cela, il faut sélectionner toutes les cellules, cliquer sur [Format][Cellules], et dans l'onglet "Nombre", il faut sélectionner la catégorie "Texte" et valider. On peut maintenant saisir ce que l'on veut à l'intérieur des cellules sans interprétation. Attention cependant, car il est difficile de faire machine arrière et de redonner un autre format aux cellules de la feuille.
Petit exemple de programme.
Avant d'étudier la fabrication du gif animé, nous allons commencer par un tout petit exemple : La création des tables de multiplication.
En premier lieu, cliquez sur la boîte à outils et créez un bouton de commande sur la feuille "feuil1".
Pour cela, vous cliquez sur le bouton de commande dans la boîte à outils et vous ouvrez un rectangle avec la souris sur la feuille. (click + étirement + lâché du click). Un joli "CommandButton1" vient de s'afficher.
Le bouton permet de basculer de mode
En mode création, il est possible d'accéder au code et aux propriétés du bouton.
En mode exécution, il est possible de cliquer sur celui-ci pour exécuter le code.
Pour le moment, il doit être en mode "création". Vous pouvez le déplacer et le dimensionner à votre guise.
Changez le titre du bouton. Pour cela, effectuez un click droit sur le bouton et sélectionnez "propriétés". Sur la ligne "caption", écrivez : "Calculer", puis fermez la fenêtre.
![]() |
Pour accéder au code, effectuez un click droit sur le bouton et sélectionnez "Visualiser le code". Visual basic s'ouvre avec un procédure événementielle vide sur l'action click. Elle s'appelle : CommandButton1_Click()
Entrez le code suivant :
![]() |
Private Sub CommandButton1_Click() Dim Compteur As Integer Dim DonneeIn As Integer Dim TxtOut As String DonneeIn = Trim(Worksheets("Feuil1").Cells(1, 1).Value) For Compteur = 1 To 10 TxtOut = Str(DonneeIn) TxtOut = TxtOut & " x" TxtOut = TxtOut & Str(Compteur) TxtOut = TxtOut & " =" TxtOut = TxtOut & Str(DonneeIn * Compteur) Worksheets("Feuil1").Cells(Compteur, 2).Value = TxtOut Next Compteur End Sub |
Explication de texte :
Trim : renvoie la chaîne sans les espaces à gauche et à droite (un espace est vite tapé et difficilement décelable).
Worksheets("Feuil1").Cells(x, y).Value : Pointe la valeur située en colonne y et en ligne x dans la feuille nommée "Feuil1". Sert dans les 2 sens (récupérer une valeur ou saisir une valeur).
For ... Next : C'est du basic simple. Dans le même registre, on a la commande while :
Do [{While | Until} condition] [statements] [Exit Do] [statements] Loop | Do[statements] [Exit Do] [statements] Loop [{While | Until} condition] |
Comme dit le grand Maître Zindozs : "N'hésite pas à appuyer sur F1."
Passez en mode exécution, saisissez un nombre (9 par exemple) dans la cellule A1 et cliquez sur le bouton.
Une jolie table de multiplication apparaît !
![]() |
Maintenant, tous les délires sont possibles.
Description du programme de fabrication du gif animé galaxian.gif.
Règles fonctionnelles :
Faire un gif animé de 100 pixels de large sur 80 pixel de haut. Il sera composé de 80 images. La dernière image doit s'enchaîner avec la première pour faire un film sans fin.
Le fond de l'image sera noir. Des étoiles de 1 pixel de différentes couleurs défileront de haut en bas par pas de 1. Elles s'allumeront et s'éteindront à chaque pas de 4. 4 groupes d'étoiles seront définies avec un déclenchement de l'allumage/extinction respectivement à pas, pas+1, pas+2, pas+3.
Règles techniques :
Le classeur galaxian.xls est composé de 3 feuilles :
feuil3 :
![]() |
Note : il faut initialiser le motif jusqu'à la ligne 80.
On définit manuellement les 4 groupes d'étoiles avec leur déclenchement allumage/extinction. Lorsqu'un "*" est dans une cellule à la ligne lig, elle sera allumée à la lig ième image. Sinon, elle sera éteinte. Le bouton [Init déplacement] permet de générer la feuille "Feuil2".
Le code sous ce bouton est :
Private Sub CommandButton1_Click() Dim cpt As Integer Dim a, b, c As Integer For cpt = 1 To 4 a = Int((100 * Rnd) + 1) b = Int((80 * Rnd) + 1) c = Int((7 * Rnd) + 2) Worksheets("Feuil2").Cells(a, b).Value = c Worksheets("Feuil2").Cells(a, b + 80).Value = c Next For cpt = 1 To 4 a = Int((100 * Rnd) + 1) b = Int((80 * Rnd) + 1) c = Int((7 * Rnd) + 2) Worksheets("Feuil2").Cells(a + 100, b).Value = c Worksheets("Feuil2").Cells(a + 100, b + 80).Value = c Next For cpt = 1 To 4 a = Int((100 * Rnd) + 1) b = Int((80 * Rnd) + 1) c = Int((7 * Rnd) + 2) Worksheets("Feuil2").Cells(a + 200, b).Value = c Worksheets("Feuil2").Cells(a + 200, b + 80).Value = c Next For cpt = 1 To 4 a = Int((100 * Rnd) + 1) b = Int((80 * Rnd) + 1) c = Int((7 * Rnd) + 2) Worksheets("Feuil2").Cells(a + 300, b).Value = c Worksheets("Feuil2").Cells(a + 300, b + 80).Value = c Next End Sub |
feuil2 :
![]() |
La feuille 2 est initialisée par un programme situé sur le click du bouton situé dans la feuille 3. Lorsque ce bouton est activé, 4 matrices de 100 de large sur 80*2 de haut sont initialisées. Chacune contient l'emplacement de 20 étoiles sur l'image. Chaque matrice est synchronisée respectivement sur l'allumage/extinction définie dans la feuille 3.
Pour la matrice 0, Lorsqu'une cellule (lig, col) est rempli avec un nombre, une étoile de la couleur du nombre est générée (voir tableau des couleurs sur la feuille 3) en colonne col et en ligne lig. Lorsqu'une étoile est générée en colonne col et en ligne lig, la même étoile est générée en colonne col et en ligne lig+80. Cela permet de générer deux images identiques et de garantir le fait que la 80 ème image s'enchaînera avec la première.
La n ième image du gif correspond à l'image défini par le rectangle formé par les cellules (n,1) à (n+80,100). Un raisonnement identique est à faire sur les matrice 1, 2, 3 et 4, en tenant compte du décalage horizontal.
feuill1 :
![]() |
En combinant les matrices définie par la feuille 2 et la notion d'allumage/extinction définie par la feuille3, on peut définir l'image définitive. Il suffit de saisir le numéro de l'image à générer dans la cellule CY83 (nombre de 1 à 80) et de cliquer sur le bouton. L'image est remise à jour.
Note : L'image est composée des cellules B2 à CW81. La taille de ces cellules est de 1 pixel. Pour définir la couleur d'un pixel en (lig, col), il suffit de définir la couleur du motif de la cellule par la commande :
Worksheets("Feuil1").Range(CellToRange(lig, col).Interior.ColorIndex = Couleur
Le code sous le bouton [Génère] est :
Private Sub CommandButton1_Click() Dim cptX, cptY, cptZ, nboccurence As Integer nboccurence = Worksheets("Feuil1").Range("CY83").Value For cptX = 1 To 100 For cptY = 1 To 80 If Worksheets("Feuil1").Range(CellToRange(cptX + 1, cptY + 1)).Interior.ColorIndex <> 1 Then Worksheets("Feuil1").Range(CellToRange(cptX + 1, cptY + 1)).Interior.ColorIndex = 1 End If Next Next For cptZ = 1 To 4 If Trim(Worksheets("Feuil3").Cells(nboccurence, cptZ)) <> "" Then For cptX = 1 To 100 For cptY = 1 To 80 If Trim(Worksheets("Feuil2").Cells(cptX + ((cptZ - 1) * 100), cptY + nboccurence - 1).Value) <> "" Then Worksheets("Feuil1").Range(CellToRange(cptX + 1, cptY + 1)).Interior.ColorIndex = Worksheets("Feuil2").Cells(cptX + ((cptZ - 1) * 100), cptY + nboccurence - 1).Value End If Next Next End If Next End Sub |
On définit pour cette feuille la fonction suivante :
Private Function CellToRange(ByVal a As Integer, ByVal b As Integer) As String Dim c As Integer CellToRange = "" c = Int((a - 1) / 26) If c > 0 Then CellToRange = Chr(64 + c) End If CellToRange = CellToRange & Chr(65 + ((a - 1) Mod 26)) CellToRange = CellToRange & Trim(Str(b)) End Function |
Il suffit ensuite de récupérer les 80 images générées et de créer un gif avec un utilitaire.
Images de 61 à 80