L’outil VBA d’Excel permet de créer des interfaces de calcul intuitives et pratiques. Pour que leur utilisation soit pertinente et efficace, il est intéressant de faire apparaitre et/ou disparaitre des images en fonction des commandes de l’utilisateur afin de le guider. Par exemple, associer une image à chaque proposition d’un menu déroulant permet à l’utilisateur de visualiser son choix rapidement, sans rechercher la liste déroulante dans sa page de calcul. Cela nécessite d’associer une image à chaque proposition du menu et donc de faire apparaitre une image en fonction d’un choix.

Nous allons vous guider dans le processus à suivre pour y parvenir. Pour illustrer nos explications, nous nous appuierons sur l’exemple d’un menu déroulant permettant de choisir la section d’une poutre étudiée. Le menu déroulant en question propose quatre sections différentes : carrée, rectangulaire, rectangulaire creuse et en I. L’objectif est de faire apparaitre l’image représentant la section choisie.

Déterminer le nom de l’image sélectionnée

La première étape consiste à déterminer le nom de l’image sélectionnée. Pour cela, nous commençons par insérer les images choisies sur la page d’interface.

Images choisies

Puis nous lançons une macro où nous sélectionnons chacune des images dans un sens de progression logique. Pour plus de renseignements sur l’enregistrement de macro, se référer à l’article :

https://batcave.insa-rouen.fr/2018/12/13/vba-enregistrer-une-macro/‎

Nous allons ensuite dans l’onglet Développeur > Visual Basics afin de visualiser le code VBA de la macro. On obtient ceci :

Sub Image()

    ActiveSheet.Shapes.Range(Array("Picture 79")).Select
    ActiveSheet.Shapes.Range(Array("Picture 80")).Select
    ActiveSheet.Shapes.Range(Array("Picture 81")).Select
    ActiveSheet.Shapes.Range(Array("Picture 82")).Select

Ainsi, chaque image sélectionnée a le nom indiqué entre parenthèses. Les images apparaissent dans l’ordre de sélection précédent. Ainsi, pour notre exemple, l’image de la section carrée est l’image « Picture 79 », celle de la section rectangulaire est l’image « Picture 80 » et ainsi de suite.

Coder l’apparition ou non d’une image

Nous pouvons à présent coder l’apparition et la disparition des images. Ainsi, pour indiquer si une image apparait ou disparait, rien de plus simple. Il suffit de modifier la macro précédente, toujours dans l’onglet Visual Basics en remplaçant « .Select » par « .Visible = True » pour que l’image soit visible, ou par « .Visible = False » pour que l’image ne soit pas visible.

Sub Image()
    
    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = False

Lorsque l’on exécute la nouvelle macro en cliquant sur Exécuter dans le bandeau supérieur, la dernière image disparait.

Associer l’apparition/disparition d’une image à un menu déroulant

Nous pouvons maintenant voir comment associer une image au choix d’un menu déroulant. Pour cela, il faut définir quelle image sera visible et lesquelles seront invisibles pour ce choix. Pour notre exemple, pour la section carrée, la première image sera visible, trois autres seront invisibles. Ainsi pour chaque choix nous auront les codes suivants :

Sub Image()
    
    ' Choix de la section carree

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = False
    
    ' Choix de la section rectangulaire

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = False
    
    ' Choix de la section rectangulaire creuse

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = False
    
    ' Choix de la section en I

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = True

    
End Sub

Il nous faut maintenant affecter la visibilité ou non de chacune des quatre images à chaque choix de section du menu déroulant. Pour cela, nous devons créer une structure « Select Case ».  Cette structure permet d’énumérer les critères et les actions lié(e)s les un(e)s à la suite des autres. Ici, les critères sont le choix des menus déroulants, les actions sont les apparitions et disparitions des images.

Ainsi, pour utiliser le Select Case, nous devons créer une variable nb1 qui indique quel choix a été fait par l’utilisateur. Dans notre cas, nous avons placé l’apparition du choix de notre menu déroulant dans la cellule « C1 » de la « Feuil3 » du document. Si vous voulez en savoir plus sur les menus déroulants, veuillez vous référer à l’article : https://batcave.insa-rouen.fr/2019/12/12/vba-:-creation-d’un-menu-deroulant/

Ainsi, la variable créée doit être initialisée comme suit :

nb1 = Sheets("Feuil3").Range("C1").Value

Nous pouvons maintenant construire notre structure Select Case. Pour cela, on commence la structure avec un Select Case nb1 puis on applique un Case n pour chaque choix n. On ferme la structure avec un End Select. Nous obtenons la structure suivante.

Sub Image()

'nombre correspondant au choix du menu deroulant de la section
nb1 = Sheets("Feuil3").Range("C1").Value

Select Case nb1
    
    Case 1' Choix de la section carree

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = False
    
    Case 2' Choix de la section rectangulaire

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = False
    
    Case 3' Choix de la section rectangulaire creuse

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = True
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = False
    
    Case 4' Choix de la section en I

    ActiveSheet.Shapes.Range(Array("Picture 79")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 80")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 81")).Visible = False
    ActiveSheet.Shapes.Range(Array("Picture 82")).Visible = True

End Case  
End Sub

Maintenant, en fonction du choix du menu « choix de la section », une image apparaitra et les autres disparaitront.

Exemple du choix d’une section rectangulaire
Catégories : VBA

0 commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *