Monsieur Excel
Pour tout savoir faire sur Excel !

11 mars 2019

Sélection d’une image à afficher (b)

Certes, si vous avez essayé de résoudre le problème que nous vous avons posé dans le dernier article sans passer par le VBA, il est normal que vous n’ayez pas trouvé de solution !

Dans la cellule E1, nous avons entré la formule suivante, qui calcule le numéro de l’image sélectionnée via le menu déroulant en C1 : =equiv(C1;F:F;0).

Remarque 1 – Comme nous avons pris toute la colonne F en argument, nous ne serons pas limités dans le nombre d’images utilisables.

Remarque 2 – Attention ! Le numéro de l’image ne correspond pas à celui affiché dans la zone « Nom » de la barre d’édition, mais à l’ordre d’apparition parmi les images actuelles de la feuille de calcul.

La solution à notre problème revient donc à créer une macro événementielle, liée à l’onglet « Image », celui qui nous intéresse, et qui se déclenche chaque fois que la valeur de la cellule C1 (le menu déroulant) est modifiée.

Il y a dans la liste du menu déroulant en haut à droite du VBA 17 événements auxquels on peut associer une macro, l’option Change que nous utilisons ici n’étant qu’une des possibilités pour la feuille de calcul active (Worksheet).


3 Commentaire(s):

  • Bonjour

    C"est faisable sans macro :

    En plaçant les images dans des cellules cote à cote
    Via le collage spécial ; image liée, en remplaçant la source (cellule liée) par une zone nommée contenant une Index ou une Indirect ou une Decaler pour se caler sur la bonne cellule.

    By Blogger Unknown, sur 10:54 PM  

  • Bonjour,

    Une autre solution consiste à nommer les images (Zone des noms) dans la feuille de calcul en utilisant les libellés exacts présents dans la liste de choix de la cellule C1. On se passe ainsi de l'index, de la formule EQUIV, DECALER, etc... pour ne garder que les noms.
    Le choix dans la collection Pictures se fait ainsi par le nom au lieu de l'index.
    La procédure événementielle devient :

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$1" Then
    Me.Pictures.Visible = False
    Me.Pictures(ActiveCell.Value).Visible = True
    End If
    End Sub

    By Anonymous cduigou, sur 2:02 PM  

  • Je suis d'accord avec Arnaud, je fais ca sans macro depuis qq temps déjà.
    peut être la réponse en "c".

    By Blogger Benji, sur 3:08 PM  

Enregistrer un commentaire

<< Accueil