Userform: Incrémenter l'indice d'un MSform

Bonjour un code vaut mieux qu'une longue explication, donc voici ce que je veux faire:

Dim image As MSForms.image

For i = 1 To 18

    Set image = "UserForm1.Image" & i
    image.BackColor = blablabla

Next

Evidement ça ne marche pas (erreur 424 objet requis), j'utilise un string alors qu'il attend un MSform, mais je ne connais pas la façon de faire ça ;(

ça non plus ca ne marche pas:

Set image = UserForm1.image(i).BackColor
'ou simplement:
Set image = UserForm1.image(i)

Sauriez vous comment faire?

Merrci beaucoup à vous pour votre aide;)

Bonjour

Tu devrais expliquer ce que tu veux obtenir au lieu de nous montrer des choses qui ne marchent pas…

Bye !

Bonjour Gmb,

Avec tout le respect, si tu avais pris la peine de lire mon message, tu aurai sans doute vu (comme précisé dans ledit message) que la ligne qui pose problème est bien celle où j'initialise mon MSform à l'aide de l'instruction "set"; et que, comme écrit, ce que je veux, après avoir déclaré un control image correspondant à une image de Userform1 en l’occurrence, c'est pouvoir agir sur les propriétés de mon image tel que ceci :

image.BackColor = peuximportelacouleur 'ie: ce qui importe c'est de pouvoir controler les propriétés de mon MSform, peux importe lesquelles

Ce qui pose donc problème n'est pas cette instruction ci dessus (car cette instruction ci dessus est précisément ce que je souhaite obtenir), mais plutot la syntaxe employée pour affecter un objet (lors de l'instruction set donc).

Désolé pour ma franchise, c'est de bonne guerre

Merci tout de même d'avoir pris la peine de répondre

Bonjour,Salut gmb !

Set image = "UserForm1.Image" & i

Ceci ne peut marcher, parce que l'expression entre guillemets n'est pas un objet, mais du texte (parce qu'entre guillemets). Tu ne peux donc l'affecter à une variable objet.

Mais ceci marchera :

Set image = UserForm1.Controls("Image" & i)

à condition que UserForm1 contienne 18 contrôles Image (car ta variable est typée Image), nommés Image suivi d'un numéro d'ordre de 1 à 18.

Mais on voit pas trop l'utilité de passer par une variable objet pour modifier la couleur de fond des contrôles...

    For i = 1 To 18
        UserForm1.Controls("Image" & i).BackColor = vbBlack
    Next i

Ceci suffirait... (NB- blablabla, tel que tu l'as écrit ne peut être qu'une variable non déclarée et non initialisée dont on attend un code de couleur, soit une valeur numérique, dans ce contexte elle renvoie 0, et donc le fond de ton contrôle sera coloré en noir ! )

Set image = UserForm1.image(i).BackColor

Ceci ne peut évidemment pas fonctionner non plus, tu affectes à une variable objet une valeur numérique de type Long !

Cordialement.

Bonjour Mferrand,

Ouaou je me sens con, tu as tout à fait raison.... j'ai pourtant essayé en utilisant "UserForm1.Controls", mais en effet tu as complètement raison, il est inutile de passer par une variable objet.... Je vais essayer ça tout de suite et je te redis ça

Merciiiiiiiiiiiiiiiiiiiiiiiiiiiii Mferrand ça marche, tu gères trop

PS: en fait j'avais oublié mais si j'ai utilisé un set c'est tout simplement car je vais utiliser plusieurs fois ces 18 images dans plusieurs "Frames" différentes, et de cette façon je pourrai toujours appeler la même macro pour toutes mes frames. Autrement dit, si j'ai 10 frames avec les mêmes 18 images, (ça ferait 10x18 images différentes dans l'userform), j'ai juste à utiliser mon unique macro (au lieu de l'écrire dans chaque control.images) et remplacer les image.controls dans ma macro à l'aide de "set". Le seul impératif comme tu l'as si bien fait remarquer, c'est qu'il faut le bon nombre de controls quand j'initie ma boucle for, mais je contourne ce problème avec un résume next donc tout vas bien

C'est pas très clair expliqué comme ça je l'avoue lol

Rechercher des sujets similaires à "userform incrementer indice msform"