Userform : Affichage image aléatoire

Résolu/Fermé
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 - 12 août 2011 à 11:04
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 - 17 août 2011 à 22:54
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

Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
12 août 2011 à 11:39
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
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
12 août 2011 à 13:07
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.
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
16 août 2011 à 09:55
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
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
16 août 2011 à 13:51
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
16 août 2011 à 20:49
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
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
Modifié par Syzygy le 17/08/2011 à 22:57
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,
0