Userform : Affichage image aléatoire
Résolu
Mabelle60
Messages postés
468
Date d'inscription
Statut
Membre
Dernière intervention
-
Syzygy Messages postés 378 Date d'inscription Statut Membre Dernière intervention -
Syzygy Messages postés 378 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Userform : Affichage image aléatoire
- Userform excel mac - Forum Excel
- Userform Petit ✓ - Forum VB / VBA
- Grandeur UserForm ✓ - Forum VB / VBA
- Userform vba récupérer valeur - Forum Excel
- Pointillé et userform ✓ - Forum Excel
6 réponses
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
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
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.
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.
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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,
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,