jhonnybegood
Messages postés11Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention11 mars 2007
-
11 mars 2007 à 09:50
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
12 mars 2007 à 12:39
Bonjour à tous,
je réalise le jeu du memmory en vba pour excel avec 32 cartes sur une feuille de calcul excel et je souhaiterais qu'en début de partie le joueur ne voit que le
dos des cartes.
Cependant, la répartition se fait quand même ("en
mémoire") lorsque le joueur appuie sur le bouton de lancement.
Ce que
je vais dire va peut-être paraître étrange mais en fait c'est comme
si dans la picture box il y avait 2 images : l'une n'est pas visible au
début (cartes classique(coeur ,pique.....) qui ont été placées
aléatoirement lors du clic sur le bouton de lancement), l'autre le dos
de la carte qui est visible au début et jusqu'à ce que le joueur clique
sur cette image. Pour plus de clarté je vous place ci-dessous le code pour la génération aléatoire des images (ce code produit une génération d'image visible, on voit toutes les cartes se placer aléatoirement mais pas le dos des cartes):
Dim TableauCartes(1 To 32) As Integer
Private Sub cmd_Distribuer_Click()
Dim NbrAléatoire As Integer
Dim chemin As String
Dim a As Integer
Dim TableauAffectation(1 To 16) As Integer
ReDim TabImages(1 To 32) As Object
Set TabImages(1) = Image1
Set TabImages(2) = Image2
Set TabImages(3) = Image3
Set TabImages(4) = Image4
Set TabImages(5) = Image5
Set TabImages(6) = Image6
Set TabImages(7) = Image7
Set TabImages(8) = Image8
Set TabImages(9) = Image9
Set TabImages(10) = Image10
Set TabImages(11) = Image11
Set TabImages(12) = Image12
Set TabImages(13) = Image13
Set TabImages(14) = Image14
Set TabImages(15) = Image15
Set TabImages(16) = Image16
Set TabImages(17) = Image17
Set TabImages(18) = Image18
Set TabImages(19) = Image19
Set TabImages(20) = Image20
Set TabImages(21) = Image21
Set TabImages(22) = Image22
Set TabImages(23) = Image23
Set TabImages(24) = Image24
Set TabImages(25) = Image25
Set TabImages(26) = Image26
Set TabImages(27) = Image27
Set TabImages(28) = Image28
Set TabImages(29) = Image29
Set TabImages(30) = Image30
Set TabImages(31) = Image31
Set TabImages(32) = Image32
For a = 1 To 32
Do
NbrAléatoire = Int((16 * Rnd) + 1) 'nbre aléatoire entre 1 et 16
If TableauAffectation(NbrAléatoire) < 2 Then
TableauAffectation(NbrAléatoire) = TableauAffectation(NbrAléatoire) + 1
TableauCartes(a) = NbrAléatoire
Exit Do
End If
Loop
Next
For a = 1 To 32
chemin = (ThisWorkbook.Path + "" + CStr(TableauCartes(a)) + ".bmp")
TabImages(a).PictureSizeMode = fmPictureSizeModeStretch
TabImages(a).AutoSize = False
TabImages(a).Picture = LoadPicture(chemin)
TabImages(a).Visible = False
Next
End Sub
Si quelqu'un peut m'aider ça serait vraiment sympa, je ne vois pas du tout comment m'en sortir.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 11 mars 2007 à 10:20
Je n'ai pas compris grand chose à ton code.
Mais je vais te donner une petite astuce tout de même. Au lieu de charger l'image de la carte dans ta picturebox, tu met l'iage générique du dos de la carte.
Lors de l'affectation des images à tes picturebox, ne charge pas l'image, stocke simplement le nom du fichier de l'image dans la proriété Tag de ta picturebox.
Ensuite au moment d'afficher l'image tu charge l'image à partir de l'info stockée dans la proriété Tag :
TabImages(index).Picture = LoadPicture(TabImages(index).Tag)
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
jhonnybegood
Messages postés11Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention11 mars 2007 11 mars 2007 à 11:05
J'ai commencé à faire ce que tu as dis mais je n'arrive pas à avoir la prop Tag . J'ai simplement mis dans la prop Image de ma picture box l'image du dos de la carte, mais dans la fenêtre prop il n'y a aucune trace de Tag pour mettre l'image des cartes. J'ai inséré une nouvelle picture box, pour voir, et là apparaît la prop Tag, dois-je recréer toutes mes picture box?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 11 mars 2007 à 11:14
si tu utilise bien un controle PctureBox, tu dois avoir la propriété tag, elle ne disparait pas comme ça. Elle fait partie de ton les controles de VB normalement
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
jhonnybegood
Messages postés11Date d'inscriptionsamedi 6 janvier 2007StatutMembreDernière intervention11 mars 2007 11 mars 2007 à 11:16
En fait je crois que depuis une feuille de calcul la propriété Tag n'est pas accessible alors que sur un userform elle apparaît. Comment puis-je faire alors si je travail sur ma feuille de calcul?
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 mars 2007 à 11:16
"J'ai simplement mis dans la prop Image de ma picture box l'image du dos de la carte, mais dans la fenêtre prop il n'y a aucune trace de Tag pour mettre l'image des cartes"
Euh...
1) La propriété tag d'une picturebox ne saurait disparaître de ta fenêtre des propriétés !
2) son contenu peut être fixé tant manuellement, dans cette fenêtre, que dynamiquement (par code) ===>>> Picture1.tag = "......."
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 11 mars 2007 à 11:24
Zut moi aussi j'avais zappé le coté VBA de la chose.
Comportement étrange effectivement sous Excel, les controle posés sur une feuille de calcul n'ont pas toutes les propriétés. Et même par le code, elles semblent innaccessibles.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 mars 2007 à 11:26
Bon.... Une pictureBox et un contrôle image sont des choses fort différentes !
Peu importe en ce qui concerne l'utilisation de la propriété tag, qu'un contrôle image possède également ...
Ne toutefois pas confondre une image placée sur ta feuille avec un contrôle image placé sur une userform ... ce sont des choses différentes ...
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 mars 2007 à 11:34
Bonjour Casy,
Une idée sans doute idiote (je ne connais pas VBA).
S'il s'agit d'images sur sa feuille et non de contrôles images et que les images n'ont, elles, pas de propriété tag : serait-il idiot d'utiliser une petite cellule cachée quelque part pour jouer ce rôle de tag ?
A moins qu'il n'ai la possibilité de mettre celà en commentaire caché ? (ce qui serait encore mieux)...
Enfin ... je n'en sais rien... juste une idée...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 11 mars 2007 à 11:53
Ah effectivement si c'est une photo insérée directement sur la feuille, elle n'aura pas de propriété Tag. La prorpiété Tag étant niquement sur les controles. Une photo insérée sur une feuille n'est pas un controle mais un objet OLE.
Mais apparement même les controles posés directement sur une feuille n'ont pas la propirété Tag. Pourquoi est-elle inaccessible, mystère ???
Quant à passer outre, oui des cellules masquées pourquoi pas, voire des commentaires aussi, mais le plus simple reste encore je pense de crer un second tableau associé à TabImage.
Une solution plus élégante serait que TabImage soit non pas un tableau d'objet, mais un tableau de structure. Ces mêmes structures contenant l'objet d'une part et une string d'autre part dans laquelle serait stocker le chemin de l'image à charger.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 mars 2007 à 12:07
Pas bête du tout, le coup des structures....
C'est marrant, mais (je suis un vieux fou) personnellement je ne distribuerais pas les cartes au service !
Je ne servirais que des "dos" (identiques) et...
"servirais" au fur et à mesure, en tirant au hasard un chemin dans une listbox, en affichant l'image à l'endroit cliqué à la place du "dos" qui s'y trouvait, et.... supprimerais tout-bêtement le chemin (l'indice) de la listbox (removeitem) pour ne pas risquer de réutiliser cette carte/chemin. Mon rnd se ferait chaquefois en utilisant le listcount de la listbox.
jmmarques a raison... une listbox ou un collection... même combat.
ca éviterais plein de controles de doublons, et la distribution serait plutot rapide.