Des animations sous Excel ?

Comment donner un peu de vie à nos fichiers Excel ?

Excel est normalement assez inerte.
On le sent toutefois plein de vie quand on lui soumet un calcul un peu ardu et qui le force à mouliner pendant quelques secondes, quelques minutes, voire quelques heures !
Et puis, il y a VBA, avec plein de possibilités passionantes.

1) Sans macro

Pour esperer obtenir un effet d'une certaine durée avec Excel sans recourir à des macros, il faut lui faire faire des calculs longs.
Rien de tel que les calculs itératifs : avec l'option "calcul itératif", on peut même règler la durée du calcul (enfin, au moins le nombre d'itérations). Il suffit d'aller dans le menu Outils à Options / Calcul et de cocher la case Itération, puis de régler le nombre maximum d'itérations en fonction de l'effet recherché.

Reste à faire des effets graphiques qui soient liés aux calculs d'Excel.
Un exemple dans le fichier joint :
dans la cellule A1, on inscrit une formule créant une référence circulaire, =A1+0.05
A chaque itération, Excel va ajouter 0.05 à la cellule A1.
Pour peu que le fichier contienne un bon nombre de formules à calculer, chaque itération peut, selon la vitesse du processeur, prendre quelques fractions de seconde à quelques secondes.
Dans la feuille de calcul, une multitude de cellules utilisées comme autant de pixels pour créer des images.
Dans chaque cellule, une formule dont le résultat, lié à la cellule A1 (celle qui donne le tempo) fluctue autour d'une valeur.
Il suffit d'utiliser les formats conditionnels pour colorier (en rouge par exemple) les cellules dont la valeur répond à certaines conditions (inférieure à 0.05 dans notre exemple).

  Pour utiliser le fichier exemple, commencer par le télécharger en cliquant ICI, puis penser à passer en mode itération (Outils / Options / Calcul / Itération) et finalement lancer le calcul par exemple en enregistrant.
La courbe de lissajou est recalculée avec un déphasage à chaque itération.
La courbe se modifie donc pendant toute la durée du calcul.


Une autre animation sans VBA (passer Excel en mode itération avec 200 itérations avant d'ouvrir le fichier, puis lancer l'animation en tapant sur la touche F9) :
cliquez ici

2) Par VBA

VBA offre d'intéressantes possibilités d'animations, avec notamment la possibilité d'enchaîner de nombreuses actions basées sur le déplacement ou la modification de taille d'objets, et sur des temporisations :
Un grand nombre d'objets contrôlés par VBA possèdent les propriétés "top" (distance par rapport au haut de l'écran), "left" (distance par rapport au coté gauche), "width" (largeur) et height (hauteur).
Certains (comme les objets shape) ont également des propriétés "rotation" (angle de rotation) et "Fill" (couleur).
ActiveSheet.Shapes("zaza").Top = 50 va placer l'objet Zaza à 50 points du haut.
ActiveSheet.Shapes("zaza").Left = ActiveSheet.Shapes("zaza").Left + 50 va déplacer Zaza de 50 points vers la gauche.
ActiveSheet.Shapes("zaza").Width = 2 * ActiveSheet.Shapes("zaza").Width va étirer Zaza en largeur.

Rien de plus simple à partir de là que de déplacer Zaza. Il suffit d'une petite boucle qui calcule à chaque itération la position de Zaza.
Par exemple :

Sub Macro1()
For i = 1 To 6.25 Step 6.25 / 50
ActiveSheet.Shapes("zaza").Top = 50 + 50 * Cos(i)
ActiveSheet.Shapes("zaza").Left = 50 + 50 * Sin(i)
Application.Wait Now + 0.5 / 3600 / 24
Next i
End Sub

Zaza fait un tour complet.
On notera l'utilisation de Wait qui permet de temporiser entre chaque image.
On peut également utiliser Application.ScreenUpdating = False pour masquer un mouvement,
ou la propriété "visible" des objets pour les faire disparaître (truc.Visible=False) ou apparaître (truc.Visible=True).

Exemples

Le bouton qui craint les clics de souris
faire virevolter une image graphique en 3D
la balancoire
le jeu de Tangram
...et bien d'autres exemples sur le site de Flo