Problème pour la création d'un Memorie

Bonjour tout le monde !

Voilà en cours d'info je dois programmer un memorie sous VBA , c'est un memorie de 16 cases/cartes.

Les règles sont les suivantes :

Les 16 cartes sont répartie en un carré de 8 sur 8, en debut de partie elles se voient attribuer une couleur aléatoirement il ya 8 paire de cartes de couleurs différentes.

Les joueurs entre leurs noms puis ils appuient sur le bouton lancer la partie : le joueur n°1 retourne une carte puis une deuxième si elles sont identique il gagne un point et rejoue sinon c'est au joueur n°2 de jouer.

Il y a un bouton rejouer qui re-répartie les couleurs des cases aléatoirement.

voilà une photo de mon Userform (désolé pour la qualité) :

userform

J'ai déjà réussis à faire en sorte que les couleurs se répartissent aléatoirement lorsque l'on clique sur lancer la partie puis sur rejouer (le bouton lancer la partie se transforme en bouton rejouer), et à ce faire ce "retourner" les cases (qui sont en fait des bouton dont le backcolor change de couleur lorsque l'on clique dessus).

Maintenant je n'arrive pas à programmer ce qui ce passe quand le joueur retourne 2 cases (soit les laisser afficher lorsque qu'elles ont la même couleur soit les laisser afficher 4 seconde puis le "retourner" lorsqu'elles sont de différentes couleurs).

Le prof m'a conseiller d'utilisé ceci " set ctrl = Me.Controls("a_cb_"&i) ".

Je crois que cela sert à donner à une variable une valeur correspondant à une collection d'objet "a_cb_" correspondant à une série de CommandButton (a_cb_1, a_cb_2, a_cb_3,etc jusqu'à 16). Mais je n'en suis pas sûr. Si c'est le cas à quoi cela sert il ? Sinon à quoi correspond cette syntaxe ?

Si quelqu'un pouvait m'aider svp, ce serais génial

Merci d'avance

Bonjour,

En l'absence de fichier difficile de développer beaucoup à partir de cette image.

"a_cb_1", "a_cb_2","a_cb_3"... doivent être les Name des 16 boutons que tu as créés.

soit manuellement soit dans une boucle... Je penche plutôt pour la méthode artisanale vu la question.

Après le :

set ctrl = Me.Controls("a_cb_"&i)

...est une manière de tester si le contrôle en question est le bon sans provoquer une erreur d'exécution

Avec une instruction du type

If not ctrl is Nothing Then

...tu as la possibilité de tester si tes boutons que tu testes correspondent à une condition...

Bon c'est à peux près tout ce que je peux te dire sans patauger dans le marc de café...

Le fichier joint fait un peu ce que tu demandes avec une technique un peu moins artisanale mais sur le fond la macro "Suite" de Module 1 fait exactement ce que tu demandes : elle compare la valeur de la première carte avec la seconde et les supprimes si elles sont de la même couleur... sinon elle retourne les cartes.

Dans ce fichier, les cartes le classeur doivent être dans le même répertoire. (qui peut être le répertoire d'extraction...)

Je ne sais pas si tu comprendras l'ensemble mébon... Sinon tu mets ton fichier en pièce jointe et on verra ce qu'on peut te dire...

A+

16memory.zip (87.11 Ko)

Merci pour ta réponse !

En effet n'ayant pas beaucoup programmer je programme de manière artisanale

Pour la pièce en effet j'ai du mal à tout comprendre ^^

Ce que tu m'indique va m'aider je pense "tu as la possibilité de tester si tes boutons que tu testes correspondent à une condition".

Voici mon code en pièce jointe.

8memorie.xlsm (24.20 Ko)

bonjour,

Qu'ai-je le droit d'utiliser ?

Tu n'utilises pas de boucle

For... Next

pourtant selon l'indication donnée :

set ctrl = Me.Controls("a_cb_"& i)

il semble que tu devrais connaitre cette méthode élémentaire ?

Tu n'utilise pas non plus d'instruction

Select case

juste des boucles

If...End If

ça me parait vraiment limité pour quelqu'un qui doit programmer un userform.

Sur le fonctionnement de ton memory

S'il y a recalcul à chaque tour ce n'est plus un memory c'est du hasard pur et simple.

Du coup je ne sais plus quoi te dire...

Il me semble qu'en début de partie tu devrais pouvoir figer tes couleurs dans tes boutons.

de la manière suivante

For i = 1 to 16
Me.Controls("a_cb_"& i).BackColor = 16777215
next

Ensuite stocker les valeurs "à mémoriser" dans la propriété Tag des boutons

For i = 1 to 8

Me.Controls("a_cb_"& i).tag = cells(i,2).value

next

Bon je t'ai fait un truc assez élémentaire pour illustrer un peu tout ça. Avec un code assez simple pour que tu puisses comprendre.

Néanmoins ce code souffre de graves lacunes :

D'abord on revient à ma première remarque tes boutons ne servent à pas grand chose dans la mesure ou il est pas question de relancer le jeu à chaque changement de joueur. Sinon ce n'est plus un memory mais une mauvaise roulette russe...

Ensuite ton système de tirage aléatoire ne permet pas d'affecter une valeur aléatoire et une position aléatoire aux 16 boutons :

Avec 2 série de 8 aléatoires tu vas avoir 2 groupse de 8 boutons qui auront chacun une des 8 valeurs : [b]Tu es certain de retrouver une couleur du haut dans les 8 boutons du bas...

Pour la gestion des couleurs j'ai utilisé une 5ème colonne . C'est plus pratique.

Je gère quand même l'effacement des boutons après chaque paire de tirage, mais je ne gère pas le passage d'un joueur à l'autre :

Il faut d'abord que tu gères tous les problèmes que je t'ai listés plus haut avant de passer à l'étape suivante...

A+

18memorievg.xlsm (27.85 Ko)

Bonjour,

Et la version 2... Il ne manque plus que la Marseillaise à la fin pour indiquer que "The Winner is ..." !

j'ai essayer de rester dans le code élémentaire.

Pour le tirage aléatoire j'ai modifié ton dispositif colonne ABC et E (masquées)

Le N° de chaque bouton est le N° de ligne le N° de couleur (Tag) du bouton est la colonne 3

Si la couleur (Tag) du bouton est 4 Le N° de couleur se lit ligne 4 > Colonne 5

A+

14memorievg2.xlsm (28.02 Ko)

Merci !!!!!!

Ça marche comme je le veux merci !

Désolé de ne pas avoir répondue avant j'étais trop absorber a essayer de faire quelque chose qui marche. ^^'

Sinon je ne comprend pas bien le rôle de la variable k ?

Ou ?

dans la Sub a_cb_lancer_partie_Click() elle ne sert pas à grand chose :

on pourrait très bien écrire directement

   Me.Controls("a_cb_" & i).Tag = Cells(i, 3)

dans la Sub reset()

elle sert à identifier les boutons cliqués à partir de leur Tag (MEM1 et MEM2)

On parcoure la colonne 3 et si le Tag correspond c'est la ligne du bouton correspondant.

A+

D'accord, encore un grand merci !

Bonne soirée

Rechercher des sujets similaires à "probleme creation memorie"