Variable en vba

Résolu
aemireille -  
 Utilisateur anonyme -
Bonjour! Je suis nouvelle sur ce forum et débutante, je dois programmer un jeu en vba sur excel pour mon cours d'informatique et je rencontre un problème qui m'empêche d'avancer!
je voudrais programmer une variable pour pouvoir l'utiliser dans des expressions comme ceci :


Sub variables()

Dim s As Integer

End Sub



Private Sub UserForm_Initialize()

x11.Picture = LoadPicture("C:\Users\alice\Desktop\im1.jpg ")
x19.Picture = LoadPicture("C:\Users\alice\Desktop\im2.jpg ")
x99.Picture = LoadPicture("C:\Users\alice\Desktop\im1.jpg ")
x91.Picture = LoadPicture("C:\Users\alice\Desktop\im2.jpg ")
For s = 12 To 14
x & s & .Picture = LoadPicture("C:\Users\alice\Desktop\im3.jpg ")

je voudrais pouvoir remplacer s dans mon expression par des nombres allant de 11 à 99 , et cela ne marche pas avec & s &, pour pouvoir utiliser x12, x13, en faisant varier le nombre s car les x11, x12 sont différentes zones d'images... je pensais que ça marcherait en définissant s comme variable au début, mais cela ne marche pas, pourriez vous m'aider?? ou me dire ce qui ne fonctionne pas dans le code?
merci beaucoup!

3 réponses

Utilisateur anonyme
 
Bonjour

Première remarque, déclarer une variable dans un Sub qui ne fait que ça, ça ne sert à rien car la variable n''existe plus dès que tu sors du Sub
Il faut la déclarer en dehors de tout Sub (variable globale, peu recommandé et inutile dans ton cas) ou à l'intérieur du Sub où tu l'utilises

Deuxième point, pour répondre à ta question, si tu veux désigner (dans le code d'un Form) un contrôle dont tu calcules le nom, il faut utiliser cette syntaxe

For s = 12 To 14 
Controls("x" & s).Picture =  LoadPicture("C:\Users\alice\Desktop\im3.jpg ") 
Next s
0
aemireille
 
Super, je viens de tester et de rentrer mes variables dans le userform_initialize
Merci Beaucoup!
Par contre pourquoi doit on préciser "next s" à la fin? est-ce pour pouvoir donner une nouvelle valeur à la variable ou est-ce indispensable pour l'exécution?
0
Utilisateur anonyme
 
Il faut préciser Next s bace qu'une boucle "for" peut porter sur plusieurs instructions. Le Next sert à dire où elle se termine
Il n'est pas indispensable de rappeler la variable (le s) avec le next, mais ça rend le programme plus lisible, et ça permet de détecter les erreurs plus facilement.
0
aemireille
 
par la même occasion, j'essaie de demander à l'ordinateur de télécharger une image quand on clique sur un bouton si celui d'à côté est déjà programmé avec une image différente, comme cela :

Private Sub x12_Click()

If x11.Picture = Picture("C:\Users\alice\Desktop\im1.jpg") Then x12.Picture = LoadPicture("C:\Users\alice\Desktop\im1.jpg ")
end if

mais l'action x11.Picture = Picture("..") ne vérifie pas l'image qui est programmée pour ce bouton, ni x11= Picture(".."), je ne trouve pas la modification qu'il faudrait apporter sur les exemples en ligne, pourriez vous me conseiller également là dessus? merci beaucoup!
0
Utilisateur anonyme
 
Non, à ma connaissance on ne peut pas retrouver le nom d'une image qui a été chargée précédemment.

Mais on peut le faire quand même grâce à la propriété Tag dont disposent la plupart des contrôles. Le "Tag" est une zone de texte libre, à la disposition du programmeur.
Il suffit d'enregistrer le nom de l'image dans la propriété Tag quand tu la charges :
NomImage="C:\Users\alice\Desktop\im1.jpg"
x11.Picture = LoadPicture(NomImage) 
x11.Tag=NomImage


Ensuite, tu peux tester le "Tag" de x11 pour retrouver le nom de fichier
NomImage="C:\Users\alice\Desktop\im1.jpg"
if x11.Tag<>NomImage Then 
  x12.Picture=Loadpicture(NomImage)
end if
0