Userform : Affichage image aléatoire

Résolu/Fermé
Signaler
Messages postés
469
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
-
Messages postés
378
Date d'inscription
vendredi 29 avril 2011
Statut
Membre
Dernière intervention
31 décembre 2011
-
Bonjour la communauté
J'ai un Userform (UF1) avec à l'intérieur 6 Objets (obj1; obj2; obj3; obj4; obj5; obj6).
Je souhaite, pour chaque objet, avoir une image (img) qui correspond au résultat d'une feuille de calcul (TEST)
Mes images (img) à afficher se trouvent dans un dossier Image.
Ex:
Ligne 1 des colonnes A à F pour chaque objet
Mettons A1 =2, B1=5; C1=5; D1=3; E1=1 et F1=6
Je veux sur : obj1 afficher img2, obj2 afficher img5, obj3 afficher img5, obj4 afficher img3, obj5 afficher img1 et obj6 afficher img6

Je parviens à afficher pour chaque objet une image en rapport avec ce résultat grace la fonction 'Select Case', mais cela me fait 6 conditions pour chaque objet, soit plus de 36 lignes.

Existe t'il un moyen d'alléger un peu ça dans la mesure ou cet essai est un prémice à un projet pouvant compoter 25 objets pouvant recevoir chacun plus de 40 images différentes? Je me vois mal faire Quarante condition pour chacun des 25 objets...

De manière plus explicite, je cherche une méthode me permettant de raccrocher le résultat de la feuille (TEST) au chemin qui va me chercher l'imgX dans le dossier

Voici le bout de code utilisé poour l'objet1
Dim VAL1
VAL1 = Worksheets("TEST").Cells(1, 1).Value
Select Case VAL1
Case 1
UF1.obj1.Picture = LoadPicture("G:\Image\img1.jpg")
Case 2
UF1.obj1.Picture = LoadPicture("G:\Image\img2.jpg")
Case 3
UF1.obj1.Picture = LoadPicture("G:\Image\img3.jpg")
Case 4
UF1.obj1.Picture = LoadPicture("G:\Image\img4.jpg")
Case 5
UF1.obj1.Picture = LoadPicture("G:\Image\img5.jpg")
Case 6
UF1.obj1.Picture = LoadPicture("G:\Image\img6.jpg")
End Select
Et la même chose pour les 5 autres objets en modifiant VAL(x) et obj(x)

Merci de vos réponses

6 réponses

Messages postés
378
Date d'inscription
vendredi 29 avril 2011
Statut
Membre
Dernière intervention
31 décembre 2011
139
Bonjour,

Sans votre fichier, je peux vous transmettre une solution qui devrait fonctionner (je ne l'ai pas testé). Celà évitera de passer par un Select Case et ne fonctionnera que si vos images portent un nom du type img1.jpg, le 1 représentant un nombre quelconque.
Sub ChoixImage()
Dim VAL As Integer
VAL = Worksheets("TEST").Cells(1, 1).Value
UF1.obj1.Picture = LoadPicture("G:\Image\img" & VAL & ".jpg")
End Sub

Répétez ensuite l'opération pour chacun des objets de votre formulaire

Il est peut-être possible d'y incorporer une boucle, ce qui faciliterait la mise en place de la procédure. Toutefois, sans le fichier, je ne peux pas vous le confirmer. SI vous le souhaitez, déposez votre fichier (sans données confidentielles) sur http://www.cijoint.fr et indiquez le lien ici.

Bonne journée
Messages postés
469
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
125
Merci Beaucoup Syzygy
Je place le lien "ci-joint" ce soir car mon entreprise à bloqué l'accés au site...

Voici le code complet modifié, ce qui m'évite de passer par une feuille de calcul

Private Sub Images_Click()

' Affecte les valeur 1 à 6 pour chaque image et affiche les images
Randomize
Dim VAL1 As Integer
VAL1 = Int(6 * Rnd) + 1
Obj1.Picture = LoadPicture("G:\Images\Img (" & VAL1 & ").jpg")
Dim VAL2 As Integer
VAL2 = Int(6 * Rnd) + 1
Obj2.Picture = LoadPicture("G:\Images\Img (" & VAL2 & ").jpg")
Dim VLA3 As Integer
VAL3 = Int(6 * Rnd) + 1
Obj3.Picture = LoadPicture("G:\Images\Img (" & VAL3 & ").jpg")
Dim VAL4 As Integer
VAL4 = Int(6 * Rnd) + 1
Obj4.Picture = LoadPicture("G:\Images\Img (" & VAL4 & ").jpg")
Dim VAL5 As Integer
VAL5 = Int(6 * Rnd) + 1
Obj5.Picture = LoadPicture("G:\Images\Img (" & VAL5 & ").jpg")
Dim VAL6 As Integer
VAL6 = Int(6 * Rnd) + 1
Obj6.Picture = LoadPicture("G:\Images\Img (" & VAL6 & ").jpg")

End Sub

Sur mon Userform, 6 objets Image nommés Obj1 à Obj6 et 1 bouton nommé Images
Ca fonctionne impec. Il faudra juste que je m'attaque au redimenssionnement des images par la suite. Mais chaque chose en son temps et chaque temps à sa chose.
Messages postés
469
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
125
Bonjour
Désolé de ne pas avoir fait ce que j'avais promis Vendredi, mais requalification de mes priorités ce WE. Je m'occupe de ça ce soir.

Cdlt
Messages postés
469
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
125
Re
Bon ben finalement, je ne vais pas avoir besoin de mettre le fichier joint.
J'ai continué mes recherches de mon côté et ai trouvé le moyen de réduire le code que voici

Private Sub Images_Click()
Randomize
Dim VAL As Integer
For i = 1 To 6
VAL = Int(6 * Rnd) + 1
Controls("Obj" & i).Picture = LoadPicture("G:\Images\Img (" & VAL & ").jpg")
Next i
End Sub

Merci
Messages postés
469
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
125
Bonsoir
Voici quand même le fichier juste pour le partage.
Ben ouais! On est pas des sauvages quand même...
Juste préciser que pour le bon fonctionnement, il vous faut 6 images numérotées Img1.jpg à Img6.jpg dans le dossier que vous renommerez en lieu et place de "G:\Images\".

http://www.cijoint.fr/cjlink.php?file=cj201108/cijCPgMzhE.xls
Messages postés
378
Date d'inscription
vendredi 29 avril 2011
Statut
Membre
Dernière intervention
31 décembre 2011
139
Bonsoir,

Désolé, j'ai eu quelques empêchements depuis l'autre jour (suractivité au boulot oblige). Je pensais bien qu'il était possible de faire cela avec une boucle (je souhaitais voir votre fichier pour m'assurer que celà fonctionnerait) et vous y êtes parfaitement arrivée (votre code est parfaitement optimisé à présent).

Merci pour votre retour,

A bientôt sur le forum,