IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Rendre images visible selon contenu de ListBox [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Points : 98
    Points
    98
    Par défaut Rendre images visible selon contenu de ListBox
    Bonjour à tous,

    Je dispose d'un Userform [FICHE ACTIVITE] qui contient pour le moment 1 ComboBox, 1 TextBox, 1 ListBox et 24 images non visibles à l'ouverture.

    La ComboBox s'alimente du nom des feuilles de mon fichier, à la sélection ce nom s'affiche dans la TextBox et la ListBox s'alimente du contenu de la colonne F des feuilles "appelées" (sans doublons et trié).

    La ListBox s'alimente de 1 ) 24 valeurs (noms de risques professionnels comme "CHIMIQUE", "ELECTRIQUE", "INCENDIE",...)

    Nom : aide vba.jpg
Affichages : 653
Taille : 365,3 Ko

    Je souhaite que les images associées à ces risques apparaissent lorsque la ListBox les affiche, mais je n'y parviens pas! Evidemment, si je dois changer d'activité (ADMINISTRATIF à COMMERCIAL par exemple) les images devront à nouveau disparaître pour laisser la place aux nouvelles concernées...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Image18.Visible = True
    Une suggestion?

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    CF PJ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Dim f, bd
    Option Compare Text
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      Set d = CreateObject("Scripting.Dictionary")
      bd = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
      Me.ListBox1.List = Application.Index(bd, , 1)
      For i = LBound(bd) To UBound(bd)
         d(bd(i, 3)) = ""
      Next i
      Me.ComboBox1.List = d.keys
    End Sub
     
    Private Sub ComboBox1_click()
      répertoirePhoto = "c:\photos2"
      famille = Me.ComboBox1
      Me.ListBox1.Clear
      For i = 1 To 6: Me("Image" & i).Picture = LoadPicture: Next i
      n = 0
      For i = LBound(bd) To UBound(bd)
         If bd(i, 3) = famille Then
           Me.ListBox1.AddItem bd(i, 1)
           n = n + 1: Me("image" & n).Picture = LoadPicture(répertoirePhoto & "\" & bd(i, 1) & ".jpg")
         End If
      Next i
    End Sub
    Boisgontier
    http://boisgontierjacques.free.fr
    Fichiers attachés Fichiers attachés

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Nouvelle version

    Boisgontier
    Fichiers attachés Fichiers attachés

  4. #4
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Points : 98
    Points
    98
    Par défaut remerciements
    Je vous remercie, Jacques, pour votre rapidité et l'exactitude de votre réponse!

    Je retrouve mon fichier lundi pour tester et mettre en oeuvre vos solutions!

    Je pense que je vais devenir un fan de votre page free ! Quel travail, quelle banque de données!

    Chapeau et merci encore

  5. #5
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    Bonjour Jacques,

    j'ai commencé à apprivoiser votre solution. J'ai pu y intégrer mes images et intitulés et moduler les plages pour obtenir le résultat attendu.

    Au moment de transposer cette solution à mon fichier, je me suis aperçu que de nombreuses lignes de codes sont quasi identiques (héritage d'une solution que vous proposiez pour alimenter une listbox depuis plusieurs pages excel dans un autre thread).

    J'ai fusionné ces codes en croisant les doigts... après ajustement cela fonctionne, mais partiellement:

    Je parviens à charger les images prédéfinies, renommées pour correspondre les items collectés dans la ListBox1.

    Je ne parviens pas à trouver une formulation qui me permette d'afficher jusqu'à 24 images de risques différents sachant que selon les activités il peut n'y en avoir que 3.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Points : 98
    Points
    98
    Par défaut
    voici le code bloquant:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Private Sub ComboBox1_Click()
     
    Me.TextBox1 = ComboBox1
    Me.ListBox1.Clear
     
    Set f = Sheets(Me.TextBox1.Text)
      Set MonDico = CreateObject("Scripting.Dictionary")
      bd = f.Range("B9:B" & f.[F65000].End(xlUp).Row)  ' tableau bd(n,1) pour rapidité
        For i = LBound(bd) To UBound(bd)
       If bd(i, 1) <> "" Then MonDico(bd(i, 1)) = ""
      Next i
      Me.ListBox1.List = MonDico.keys
     
     '--avec tri
      temp = MonDico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ListBox1.List = temp
     
    With ListBox1
     
     Image1.Picture = Controls("Risque" & .List(.ListIndex, 0)).Picture
     Image2.Picture = Controls("Risque" & .List(.ListIndex + 1, 0)).Picture
     Image3.Picture = Controls("Risque" & .List(.ListIndex + 2, 0)).Picture
     Image4.Picture = Controls("Risque" & .List(.ListIndex + 3, 0)).Picture
     Image5.Picture = Controls("Risque" & .List(.ListIndex + 4, 0)).Picture
     Image6.Picture = Controls("Risque" & .List(.ListIndex + 5, 0)).Picture
     Image7.Picture = Controls("Risque" & .List(.ListIndex + 6, 0)).Picture
     Image8.Picture = Controls("Risque" & .List(.ListIndex + 7, 0)).Picture
     Image9.Picture = Controls("Risque" & .List(.ListIndex + 8, 0)).Picture
     Image10.Picture = Controls("Risque" & .List(.ListIndex + 9, 0)).Picture
     Image11.Picture = Controls("Risque" & .List(.ListIndex + 10, 0)).Picture
     Image12.Picture = Controls("Risque" & .List(.ListIndex + 11, 0)).Picture
     Image13.Picture = Controls("Risque" & .List(.ListIndex + 12, 0)).Picture
     Image14.Picture = Controls("Risque" & .List(.ListIndex + 13, 0)).Picture
     Image15.Picture = Controls("Risque" & .List(.ListIndex + 14, 0)).Picture
    End With
    End Sub
    Par exemple ce code bloque à la 7ème image/risque pour l'activité "ADMINISTRATIF" car il n'y a que 6 risques identifiés dans ce secteur...

    MA QUESTION : Comment formuler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture = Controls("Risque" & .List(.ListIndex, 0)).Picture
    Pour qu'il s'adapte au nombre d'items de la ListBox 1?


    merci d'avance...

    edit: la réponse a été apportée sur un autre Thread : "Optimisation code selon contenu ListBox"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Rendre une image visible selon valeur d'un champ dans un état
    Par cyril.bourreau dans le forum IHM
    Réponses: 1
    Dernier message: 05/05/2017, 15h04
  2. [AC-2003] Rendre un bouton visible selon la valeur dans un champs
    Par dangeles dans le forum VBA Access
    Réponses: 18
    Dernier message: 22/05/2012, 22h57
  3. Image visible ou invisble selon valeur d'un champ
    Par ETERESEAUX dans le forum VBA Access
    Réponses: 10
    Dernier message: 21/07/2008, 16h46
  4. Rendre un image transparente selon un indice donnée
    Par bellemlih dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 17/04/2008, 12h53
  5. Réponses: 3
    Dernier message: 10/01/2008, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo