Comment créer un sapin de Noël sur Excel ?

Guide « 108 astuces pour grands débutants sur Excel ! » Offert
Booster votre productivité en téléchargeant gratuitement votre ebook PDF des meilleures astuces pour les débutants et les pros d'Excel
Excel formation - 00 Astuces - 100
 

Dans ce tutoriel, nous allons découvrir comment créer facilement un sapin de Noël sur Excel en utilisant une petite macro en VBA.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

Tutoriel Vidéo

 

Partie 1 : Construire le sapin de Noël;

 

Partie 2 : Illuminer le sapin de Noël;

 

1. Introduction

Comme nous venons de le voir dans l’introduction de ce tutoriel, nous allons maintenant découvrir comment créer un sapin de Noël sur Excel.

Bien entendu, nous pourrions de le créer directement à la main en colorant des cellules, et en utilisant des mises en forme conditionnelles.

Mais cela serait bien trop fatigant, surtout en cette période de fête, autant demander à Excel de le faire à notre place en construisant une toute petite macro-commande en VBA.

Pour que ce tutoriel soit accessible à tout le monde, nous allons revenir dans le détail sur chaque aspect de cette dernière.

Si vous souhaitez aller plus loin dans la découverte du langage VBA, vous pouvez évidemment consulter la formation disponible sur le blog en cliquant ici.

Mais avant de commencer le développement de la macro, nous allons devoir préparer la feuille de calcul pour recevoir notre sapin.

Pour cela, il va nous suffire de redimensionner les cellules pour leur donner une forme de carré.

Nous commençons donc par sélectionner toutes les cellules de la feuille en cliquant sur le petit bouton situé en haut à gauche, à l’intersection des en-têtes de lignes et des colonnes :

Excel formation - sapin noel - 01

Puis il ne nous reste plus qu’à placer le curseur de la souris sur l’une des lignes de séparation des colonnes et de faire glisser le curseur de la souris vers la gauche, tout en maintenant le bouton de la souris enfoncé, jusqu’à obtenir des cellules carrées :

Excel formation - sapin noel - 02

Cela étant fait, nous allons pouvoir créer notre macro-commande.

 

2. Création de la macro VBA

Pour commencer, nous allons lancer l’éditeur de code VBE (pour Visual Basic Editor), qui est l’éditeur de code intégré dans les différentes applications de la suite Office et qui permet de développer des macro-commandes en VBA.

Pour cela, nous appuyons simplement sur les touches [Alt]+[F11] :

Excel formation - sapin noel - 03

VBE s’ouvre alors et nous allons commencer par créer un nouveau module.

Un module est une feuille de saisie de code dans laquelle nous allons pouvoir saisir nos macros et fonctions.

Pour insérer un nouveau module, nous nous rendons dans le menu Insertion > Module :

Excel formation - sapin noel - 04

Une fois le module inséré, nous allons pouvoir y créer notre macro en utilisant le mot-clé Sub, suivi du nom de la macro :

Sub sapin()
 
End Sub 

Lorsque nous validons la création de la macro en appuyant sur la touche Entrée, Excel ajouter automatiquement la ligne End Sub qui va marquer la fin de la macro.

Tout ce que nous allons saisir entre ces deux lignes sera exécuté chaque fois que nous appellerons notre macro.

Pour commencer, nous allons stocker la taille que nous voudrons donner à notre sapin, exprimé en cellules.

Pour cela, nous créons une variable que nous appelons tailleSapin et que nous typons en tant que nombre entier avec le mot-clé Integer :

    Dim tailleSapin As Integer
    tailleSapin = 30

Notre sapin mesurera donc 30 cellules de haut, et il suffira de modifier cette valeur pour modifier sa taille.

Ensuite nous allons créer une boucle pour dessiner le sapin, en déclarant une nouvelle variable i et en mettant en place une boucle For Next :

    Dim i As Integer
    For i = 0 To tailleSapin
    
    Next

Nous verrons débuter le haut du sapin au nouveau de la cellule active, puis nous effectuerons un décalage de cellule avec la fonction Offset() pour modifier la couleur de la cellule :

    Dim i As Integer
    For i = 0 To tailleSapin
        ActiveCell.Offset(i,  0).Interior.Color = 6805410
    Next

Nous pouvons maintenant tester la macro en appuyant sur la touche [F5] :

Excel formation - sapin noel - 05

Pour le moment, notre sapin semble être un peu plat, et nous allons lui donner un peu de volume.

Pour cela, nous insérons une seconde boucle dans la première :

    Dim i As Integer, j As Integer
    For i = 0 To tailleSapin
        For j = -i To i
            ActiveCell.Offset(i, j).Interior.Color  = 6805410
        Next
    Next

Ici, la boucle commence par donner à la valeur j l’inverse de la valeur i et aura pour valeur maximale la valeur de i.

De cette manière, en utilisant cette variable j comme élément de décalage de la cellule, nous commencerons à distinguer la création d’un sapin… triangulaire :

Excel formation - sapin noel - 06

Pour éviter que les lancements successifs de sapin ne se chevauchent les uns et les autres, nous insèrerons au tout début de la macro une ligne qui se chargera de supprimer tout le contenu de la feuille en supprimant toutes les cellules :

    Cells.Clear

Maintenant, pour donner une forme plus « naturelle » à notre sapin, il suffit de diviser la valeur de début et de fin données à la valeur j dans la seconde boucle :

        For j = -i / 2 To i / 2
            ActiveCell.Offset(i, j).Interior.Color  = 6805410
        Next

Excel formation - sapin noel - 07

À présent, si nous créons notre sapin en sélectionnant une cellule située proche du bord de la fenêtre, nous pourrons constater que cela aura pour effet de faire crasher la macro, car le sapin sortirait de la feuille de calculs :

Excel formation - sapin noel - 08

Pour régler ce problème le plus simplement possible, il suffit d’insérer la ligne suivante juste avant la boucle :

    On Error Resume Next

De cette manière, lorsque la macro-commande va rencontrer une situation génératrice d’une erreur, Excel pourra passer outre et continuer son déroulement normalement, sans s’en soucier.

Pour finir notre sapin, il ne reste plus qu'à ajouter le tronc pour le soutenir.

Pour cela, nous créons une nouvelle double boucle en dessous :

    For i = tailleSapin + 1 To tailleSapin  + 5
        For j = -1 To 1
            ActiveCell.Offset(i, j).Interior.Color  = 1522363
        Next
    Next

Cela nous permettra de créer un rectangle de 3 cellules de large par 5 cellules de haut :

Excel formation - sapin noel - 09

Celui-ci est placé juste en dessous du sapin, au centre.

Maintenant, pour simplifier la création du sapin, nous allons pouvoir créer un bouton sur la feuille de calcul qui se chargera de lancer la macro.

Pour cela, nous nous rendons dans le menu Insertion du ruban, afin de sélectionner l’objet zone de texte, et nous dessinons le bouton souhaité directement sur la feuille de calcul :

Excel formation - sapin noel - 10

Ensuite, nous saisissons le texte souhaité sur le bouton et nous le mettons en forme.

Il ne reste plus qu’à effectuer une clic-droit sur la zone de texte nouvellement créée pour sélectionner l’option Affecter une macro :

Excel formation - sapin noel - 11

Dans la fenêtre qui s’affiche à l’écran, nous choisissons la macro « sapin » et nous validons la création du lien avec le bouton en appuyant sur le bouton [OK].

Il ne reste plus qu’à lancer la macro en appuyant sur le bouton « Créer un nouveau sapin ».

Si vous trouvez que votre sapin est un peu trop long à être mis en place, il vous suffit d’utiliser les techniques découvertes dans l’article « Comment accélérer vos macros VBA sur Excel (jusque 25x plus rapide) ? », notamment celle qui consiste à stopper momentanément l’actualisation de l’affichage en insérant les lignes suivantes avant et après la boucle de construction du sapin :

    Application.ScreenUpdating = False
    …
    Application.ScreenUpdating = True

Excel formation - sapin noel - 12

 


 

 

 

3. Ajouter des boules dans le sapin

Maintenant que notre sapin est finalisé, il ne reste plus qu’à insérer des boules positionnées de manière aléatoire, avec des couleurs elles aussi aléatoires.

Pour cela, nos commençons par créer une variable dans laquelle nous allons stocker les couleurs à affecter à ces boules :

    Dim tableCouleurs As Variant
    tableCouleurs = Array(3, 4, 6, 7, 8)

Cette déclaration de variable est à insérer avant le lancement de la boucle.

Cette variable tableCouleurs est donc un Array dans laquelle nous stockons des index de couleurs que nous pourrons ensuite récupérer avec la propriété ColorIndex.

Pour retrouver toutes les couleurs utilisables avec cette propriété, il suffit de créer une toute petite macro, puis de la lancer :

Sub listeCouleurs()
    Dim i As Integer
    For i = 1 To 56
        Cells(i, 1).Interior.ColorIndex = i
        Cells(i, 1) = i
    Next
End Sub 

Et nous retrouvons alors la liste des couleurs directement sur la feuille de calculs :

Excel formation - sapin noel - 13

Libre à vous de choisir vos propres couleurs ;)

Ensuite, nous revenons dans la boucle, juste après avoir modifié la couleur de fond de la cellule, afin d’insérer un caractère spécial qui nous donnera l’apparence d’une boule de sapin (un rond plein).

Pour cela, nous utilisons simplement la fonction ChrW() qui fonctionne comme la fonction Excel UNICAR() :

            ActiveCell.Offset(i, j).Value  = ChrW(9899)

Ensuite, nous lui affectons une couleur en piochant au hasard l’une des couleurs stockées dans la variable tableCouleurs :

            ActiveCell.Offset(i, j).Font.ColorIndex  = tableCouleurs(CInt(Rnd * 4))

Ici, nous utilisons la fonction VBA Rnd que nous multiplions par quatre pour obtenir une valeur aléatoire comprise en 0 et 4.

Nous encapsulons ce résultat à l’intérieur de la fonction CInt afin de n’en conserver que la partie entière.

Pour finir, nous donnons une taille aléatoire à ces boules en modifiant la taille des polices de caractères avec la propriété Font.Size :

            ActiveCell.Offset(i, j).Font.Size  = CInt(Rnd * 10) + 1

Pour être sûr que les boules soient bien centrées dans les cellules, nous modifions l’alignement vertical et horizontal avant le lancement de la boucle :

    Cells.VerticalAlignment = xlCenter
    Cells.HorizontalAlignment = xlCenter

Et voilà, les boules sont maintenant insérées dans notre sapin, nous pouvons relancer la macro en cliquant sur le bouton « Créer un nouveau sapin » :

Excel formation - sapin noel - 14

4. Animer les boules

Maintenant que les boules de Noël trônent fièrement sur notre sapin, il ne reste plus qu’à les animer !

Pour cela, nous allons fortement nous inspirer de la technique d’animation que nous avions déjà utilisée dans le tutoriel dédié au déplacement de Pikachu sur la feuille de calculs.

Le fonctionnement de cette technique est très simple :

  • Lorsque l’animation commence, nous saisissons un texte dans une cellule, par exemple « Joyeux Noël »
  • Puis nous lançons la macro d’animation, laquelle se lance en boucle tant que ce texte reste inchangé
  • Entre chaque lancement, nous insérons une mini-pause qui va permettre d’une part de limiter la vitesse d’animation afin que celle-ci reste bien visible, et d’autre part en y insérant l’instruction DoEvents, nous permettrons de conserver la possibilité d’effectuer des opérations en parallèle, comme le fait de cliquer sur un bouton
  • Ce bouton nous permettra de modifier la valeur de la cellule dans laquelle le texte « Joyeux Noël » est inséré

Pour commencer, nous créons donc la macro demarrerAnimation qui va afficher le texte dans la cellule A1 :

Sub demarrerAnimation()
    [a1] = "Joyeux Noël"
End Sub 

Cette macro demarrerAnimation est à lancer directement depuis la macro de création du sapin (à la toute fin) :

Sub sapin()
    …
    demarrerAnimation
End Sub 

 

Puis, nous créons une seconde macro animerSapin, que nous appelons directement depuis cette dernière :

Sub demarrerAnimation()
    [a1] = "Joueux Noël"
    animerSapin
End Sub
 
Sub animerSapin()
 
End Sub 

Dans cette macro animerSapin, nous créons une boucle Do While… Loop.

Ce type de boucle permet de répéter une opération tant qu’une condition est remplie :

    Do While [a1] = "Joyeux Noël"
    
    Loop

Ici, l’instruction sera à répéter tant que la valeur de la cellule A1 contiendra le texte « Joyeux Noël ».

Enfin, dans cette boucle, nous modifierons simplement la taille des boules en jouant sur la propriété Font.Size.

Nous augmenterons ainsi cette propriété jusqu’à une taille de 11, après quoi celle-ci reviendra à 1.

Pour passer en revue toutes les cellules utilisées sur la feuille, nous lançons une boucle For Each à partir de l’objet ActiveSheet.UsedRange qui reprend la plage des cellules utilisées de la feuille de calcul :

    Do While [a1] = "Joyeux Noël"
        Dim c As Range
        For Each c In  ActiveSheet.UsedRange
        
        Next
    Loop

En utilisant cette méthode, nous modifierons également la taille des textes contenus dans les cellules contenant des boules de Noël, mais ce n’est pas grave, celle-ci étant vide.

Ensuite, nous incrémentons la taille des textes de la cellule c :

            c.Font.Size = c.Font.Size  +1

Et si cette valeur est supérieure à 11, nous lui affectons une taille de police de 5 :

            If c.Font.Size > 11 Then
                c.Font.Size = 5
            End If

Bien entendu, nous pourrions raccourcir ce code en utilisant l’opérateur Mod qui permet d’obtenir le reste d’une division euclidienne, mais en procédant comme nous venons de le faire, le code sera bien plus simple à appréhender pour les débutants.

Ensuite, comme nous l’avons vu un peu plus tôt, nous allons maintenant mettre en place une pause dans l’exécution du code, en utilisant la macro dédiée que nous avions mise en place dans le tutoriel consacré à cette notion :

Sub pause(duree As Double)
    Dim finPause As Double
    finPause = Timer + duree
    
    Do While Timer < finPause
        DoEvents
    Loop
End Sub 

Nous allons par exemple insérer une pause de 0.2 seconde juste avant la fin de la boucle Do While :

        pause (0.2)

Bien entendu, nous pourrons effectuer des tests afin de voir quelle est la durée idéale de la pause à mettre en place.

Comme pour la construction du sapin, si nous souhaitons que l’animation soit suffisamment fluide à l’écran, nous allons devoir stopper provisoirement le rafraichissement de l’affichage en insérant de part et d’autre de la boucle For Each les commandes :

    Do While [A1] = "Joyeux Noël"
        Application.ScreenUpdating = False
        …  
        Application.ScreenUpdating = True
    Loop

Attention de ne surtout pas lancer la macro à ce moment-là, car nous n’avons pas encore mis en place de méthode pour sortir de cette boucle !

Pour cela, il suffit de créer une macro que nous appelons arreterAnimation, laquelle se contentera de supprimer le texte contenu dans la cellule A1 :

Sub arreterAnimation()
    [A1] = ""
End Sub 

Il ne nous reste plus qu’à créer un bouton pour lancer cette macro directement depuis la feuille de calculs :

Excel formation - sapin noel - 15

Bien entendu, et comme toujours lorsque nous mettons en place une animation sur une feuille de calculs, la fluidité et le rendu visuel de celle-ci dépendront fortement des ressources disponibles sur le poste de travail sur lequel elle est lancée.



Articles qui pourraient vous intéresser

Comment gérer ses comptes sur Excel avec le « Suivi du budget familial »
Comment modifier la mise en forme d’un tableau à la volée en 1 clic sur Excel (sans VBA) ?
Comment purger les anciennes valeurs qui restent dans un champ d’un tableau croisé dynamique ?
Comment répartir une base sur plusieurs feuilles Excel avec les tableaux croisés dynamiques sur Excel ?
Comment obtenir le détail d’une valeur d’un tableau croisé dynamique en 1 clic sur Excel
Comment lancer automatiquement une macro à l’ouverture d’un fichier Excel ?
Comment protéger efficacement un classeur Excel en utilisant une clé USB comme protection physique ?
Comment lire un fichier externe (txt, csv,…) avec une fonction Excel VBA ?
Comment créer un arbre généalogique en quelques minutes sur Excel ?
Comment lire un fichier externe depuis un classeur sans VBA Excel ?
Comment consolider plusieurs classeurs Excel dans un classeur unique ?
Comment automatiser la mise à jour des formules Excel ?

Contact - Plan du site - À propos - Contact

© Excelformation.fr 2018-2022 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.