Comment positionner et déplacer un objet (image, bouton…) en VBA pour créer un mini-jeu Pokémon 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, je vais vous montrer comment déplacer un objet, comme une image, un bouton, un graphique etc… sur une feuille de calcul. Nous verrons ainsi que cela peut permettre de créer un mini-jeu très facilement en quelques lignes de code seulement.

 

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

 

1. Introduction

Lorsque nous créons une application en VBA, il nous pourra arriver que nous ayons besoin de déplacer des objets sur une feuille de calcul.

Dans ce tutoriel, nous allons découvrir comment effectuer ce déplacement de manière simple et rapide.

Nous verrons également comment décomposer ce déplacement pour le rendre fluide et naturel.

Et pour rendre ce tutoriel plus intéressant, nous illustrerons ces notions en créant un mini-jeu dans lequel nous essaierons de capturer le plus célèbre des Pokémons, à savoir Pikachu.

 

2. Les bases du placement des objets en VBA

Pour bien comprendre le fonctionnement des déplacements des objets en VBA, nous allons utiliser une image que nous plaçons simplement sur la feuille de calcul en effectuant un copier-coller.

Excel formation - déplacement un objet - 01

Il faut savoir que la position d’un objet sur une feuille de calcul est déterminée en fonction des coordonnées de deux éléments :

  • La position du point situé le plus à gauche, obtenu avec la propriété Left,
  • La position du point situé le plus haut, obtenu avec la propriété Top

Ainsi, pour connaître la position de Pikachu sur la feuille de calcul, il suffira d’appeler cet objet et de consulter la valeur de ces propriétés.

Mais pour que la manipulation de cette image soit la plus simple possible, nous allons commencer par lui donner un nom.

Pour cela, nous sélectionnons l’image, puis nous nous rendons dans le menu Format de l’image (qui n’apparait que lorsqu’une image est sélectionnée), puis nous cliquons sur le bouton Volet Sélection :

Excel formation - déplacement un objet - 02

Ensuite, sur le volet Sélection qui s’affiche à droite, nous double cliquons sur le nom de l’image pour la renommer Pikachu :

Excel formation - déplacement un objet - 03

De cette manière, nous pourrons maintenant appeler l’image très simplement depuis VBA.

Pour cela, nous commençons par lancer l’éditeur de code VBA en appuyant sur les touches [Alt]+[F11], puis nous insérons un nouveau module qui va nous permettre de saisir des lignes de codes.

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

Une fois le module ajouté, nous pouvons créer une macro-commande en utilisant le mot-clé Sub, suivi du nom que nous souhaitons lui donner :

Sub bougerImage()
 
End Sub

Lorsque nous appuyons sur la touche [Entrée], VBE insère bien la macro-commande, laquelle se termine avec la ligne End Sub.

De cette manière, tout ce que nous allons saisir entre ces deux lignes va se lancer à chaque fois que nous lancerons la macro.

Ensuite, comme nous l’avons vu, pour connaître la position de Pikachu, nous allons devoir appeler les propriétés Left et Top, qui sont des propriétés de l’objet Shape qui permet de manipuler l’image et qui est lui-même un sous-objet de la feuille de calcul (ActiveSheet) :

Sub bougerImage()
    MsgBox ActiveSheet.Shapes("Pikachu").Left  & ", " & ActiveSheet.Shapes("Pikachu").Top
End Sub

Ce code nous permet d’afficher les coordonnées de l’objet à l’utilisateur.

Excel formation - déplacement un objet - 04

Nous pouvons maintenant bouger l’image et constater que les coordonnées vont bien évidemment s’adapter.

Maintenant, il faut savoir que les propriétés Left et Top sont utilisables en lecture, comme nous venons de le voir, mais également en écriture, ce qui signifie que nous pouvons les modifier.

Pour déplacer un objet, il suffit donc d’affecter une valeur à ces propriétés :

Sub bougerImage()
    ActiveSheet.Shapes("Pikachu").Left  = 500
    ActiveSheet.Shapes("Pikachu").Top  = 500
End Sub

Pour déplacer l’image à un endroit aléatoire de la feuille de calcul, il suffira alors d’utiliser la fonction Rnd qui permet d’obtenir un nombre aléatoire compris entre 0 et 1 :

Sub bougerImage()
    ActiveSheet.Shapes("Pikachu").Left  = 500 * Rnd
    ActiveSheet.Shapes("Pikachu").Top  = 500 * Rnd
End Sub

À chaque fois que nous lancerons la macro-commande, l’image se déplacera alors sur la feuille de calcul.

 

3. Créer un déplacement fluide

En revanche, comme nous pouvons le constater, le déplacement est instantané.

Pour créer un déplacement naturel, il suffira simplement de le décomposer en plusieurs étapes successives que nous encapsulerons dans une boucle.

Nous commençons alors par créer deux variables mouvementX et mouvementY auxquelles nous effectuerons la différence entre le coordonnées actuelles et les nouvelles coordonnées et que nous diviserons ensuite par 20 :

    Dim mouvementX As Double, mouvementY As  Double
    mouvementX = (500 * Rnd - ActiveSheet.Shapes("Pikachu").Left)  / 20
    mouvementY = (500 * Rnd - ActiveSheet.Shapes("Pikachu").Top)  / 20

Puis, nous initialisons une boucle For… Next qui se répètera 20 fois de suite et dans laquelle nous pourrons déplacer l’image :

    Dim i As Integer
    For i = 1 To 20
        ActiveSheet.Shapes("Pikachu").Left  = ActiveSheet.Shapes("Pikachu").Left  + mouvementX
        ActiveSheet.Shapes("Pikachu").Top  = ActiveSheet.Shapes("Pikachu").Top  + mouvementY
    Next

Pour simplifier le code, nous pouvons également utiliser les méthodes IncrementLeft et IncrementTop, qui vont effectuer directement ce déplacement, de manière plus simple :

    Dim i As Integer
    For i = 1 To 20
        ActiveSheet.Shapes("Pikachu").IncrementLeft  mouvementX
        ActiveSheet.Shapes("Pikachu").IncrementTop  mouvementY
    Next

Comme vous pouvez le constater, ce que nous venons de faire de change rien, le déplacement est toujours instantané…

En réalité, chaque étape du déplacement est bien détaillé, mais à une vitesse bien trop rapide pour être perçu.

Il suffit de ralentir chaque étape du déplacement en insérant ce que nous avions découvert dans un tutoriel précédent : une pause VBA :

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

Ici, l’utilisation du DoEvents est important pour que chaque étape du déplacement soit bien affichée.

Il ne reste plus ensuite qu’à insérer la pause dans la boucle :

    Dim i As Integer
    For i = 1 To 20
        ActiveSheet.Shapes("Pikachu").IncrementLeft  mouvementX
        ActiveSheet.Shapes("Pikachu").IncrementTop  mouvementY
        pause 0.04
    Next

Plus la durée de la pause sera rapide, et plus le déplacement le sera également.

 

4. Créer un mini-jeu de capture de Pokémon

Évidemment, ici notre application ne sert pas à grand-chose.

Nous allons donc continuer sur notre lancée, pour transformer notre travail en un mini-jeu.

Et la première chose que nous allons mettre en place est nouvelle procédure qui va permettre de lancer une nouvelle partie :

Sub nouvellePartie()
 
End Sub

Dans cette macro, nous allons saisir le mot « Jouer » dans la cellule A1, ce qui permettra à Pikachu de savoir qu’il doit continuer de se déplacer, puis nous y lançons automatiquement la procédure bougerImage :

Sub nouvellePartie()
    [A1] = "Jouer"
    bougerImage
End Sub

Puis, à la fin de la procédure bougerImage, nous allons regarder la valeur de la cellule A1, et lorsque celle-ci affiche le message « Jouer », alors nous pourrons relancer cette macro de manière itérative :

if [a1] = "Jouer" then bougerImage

Ensuite, pour stopper la partie, nous créons une nouvelle macro « finPartie » qui affichera le message « Stop » :

Sub finPartie()
    [a1] = "Stop"
End Sub

De cette manière, la macro bougerImage va arrêter de se lancer en boucle.

Et la troisième macro que nous lancerons une fois que le joueur aura réussi à atteindre le Pikachu :

Sub gagner()
    MsgBox "Bravo !"
    finPartie
End Sub

Maintenant, pour appeler ces macros, nous créons deux boutons sur la feuille de calcul.

Pour cela, nous pouvons par exemple insérer une zone de texte depuis le menu Insertion :

Excel formation - déplacement un objet - 05

Ensuite, nous effectuons un clic-droit afin de choisir Affecter une macro et de choisir la macro nouvellePartie :

Excel formation - déplacement un objet - 06

Nous répéttons cette opération pour la fin de partie :

Excel formation - déplacement un objet - 07

Pour finir, étant donné que le but du jeu est de réussir à cliquer sur le Pikachu, nous lui affectons la macro gagner, de la même manière :

Excel formation - déplacement un objet - 08

 

 

 

 

 

 



Articles qui pourraient vous intéresser

Comment remplir automatiquement des cellules d'un tableau Excel avec la complétion automatique
Comment regrouper (ou pas !) les dates d’un tableau croisé dynamique (TCD) sur Excel ?
Comment connecter Excel sur Internet, sans VBA ?
Comment traduire automatiquement des fonctions Excel dans leur version originale ?
Comment analyser les résultats d’un sondage ou questionnaire avec Excel ?
Comment utiliser la fonction SOMME.SI pour effectuer des recherches sur des textes sur Excel ?
Comment calculer et étudier des écarts budgétaires avec Excel ?
Comment verrouiller et protéger un objet (graphique, image, zone de texte…) sur Excel ?
Comment formater des dates correctement dans Excel ?
Comment protéger le formatage des cellules tout en autorisant la saisie de données dans Excel ?
Comment transformer une photo en tableau Excel ?
Comment créer un publipostage automatique avec Excel ? (sans Word !)

Contact - Plan du site - À propos - Contact

© Excelformation.fr 2018-2024 - 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.