Problème pour la création d'un memorie
BO_Odo
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
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é) :

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).
Si quelqu'un pouvait m'aider ce serais génial :)
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é) :

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).
Si quelqu'un pouvait m'aider ce serais génial :)
A voir également:
- Problème pour la création d'un memorie
- Creation compte gmail - Guide
- Création site web - Guide
- Création d'un compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Creation compte vinted - Guide
9 réponses
Un prof m'a conseiller d'utilisé qqch de cet forme:
set variable = Me.Controls( "a_cb_"& variable)
(mes boutons s'appellent a_cb_1, a_cb_2, a_cb_3...)
mais je ne comprend pas ou ils veut en venir ^^
set variable = Me.Controls( "a_cb_"& variable)
(mes boutons s'appellent a_cb_1, a_cb_2, a_cb_3...)
mais je ne comprend pas ou ils veut en venir ^^
Bonjour,
Maintenant je n'arrive pas à programmer ce qui ce passe quand le joueur retourne 2 cases
Ecris le. Sous la forme d'un "faux algorithme".
Un peu comme ceci :
Maintenant je n'arrive pas à programmer ce qui ce passe quand le joueur retourne 2 cases
Ecris le. Sous la forme d'un "faux algorithme".
Un peu comme ceci :
Boucle sur tous les boutons
Si Bouton.Name Like "a_cb_" & "*" Alors
Si Bouton.BackColor = gris
Retourne Bouton
Sinon
'Etc...
Fin Si
Sinon
Fin Si
'Etc...
Fin Boucle
Bonjour,
Merci pour ta réponse ! Cependant je ne vois pas quelle boucle utiliser (mon niveau en VBA est vraiment faible)
Merci pour ta réponse ! Cependant je ne vois pas quelle boucle utiliser (mon niveau en VBA est vraiment faible)
Voilà j'ai essayer de faire quelque chose mais je ne suis vraiment pas sûr J'ai remplacer bouton par a_cb_16 car je ne savais pas quoi mettre à la place
Désolé mais je ne sais pas à insérer proprement du code dans ce forum et le tabulations ne sont pas pris en compte.
Désolé mais je ne sais pas à insérer proprement du code dans ce forum et le tabulations ne sont pas pris en compte.
Private Sub a_cb_16() 'Boucle sur tout les boutons For i = 1 To 16 'Si bouton.name like "a_cb_" & "*" If a_cb_16.Name Like "a_cb_" & "*" Then 'Si bouton.Backcolor= gris (là blanc) If Me.Controls("a_cb_a" & i).BackColor = 16777215 Then 'retourne bouton If a_couleur_16 = 1 Then a_cb_16.BackColor = 32768 ElseIf a_couleur_16 = 2 Then a_cb_16.BackColor = 8421631 ElseIf a_couleur_16 = 3 Then a_cb_16.BackColor = 10040115 ElseIf a_couleur_16 = 4 Then a_cb_16.BackColor = 52377 ElseIf a_couleur_16 = 5 Then a_cb_16.BackColor = 16764057 ElseIf a_couleur_16 = 6 Then a_cb_16.BackColor = 52479 ElseIf a_couleur_16 = 7 Then a_cb_16.BackColor = 26367 ElseIf a_cb_16.BackColor = 255 Then 'sinon Else: a_cb_16.BackColor = 16777215 'fin si End If 'fin si End If ' fin si End If 'fin boucle Next i End Sub
Lorsque vous placez du code sur notre forum, merci d'utiliser les balises code à votre disposition.
Le mode d'emploi (au cas ou) est ICI.
Ensuite.
Sans le reste de tes codes, je ne peux pas voir ce qui foire ... ou pas.
Peux tu nous faire un fichier exemple?
Le mode d'emploi (au cas ou) est ICI.
Ensuite.
Sans le reste de tes codes, je ne peux pas voir ce qui foire ... ou pas.
Peux tu nous faire un fichier exemple?
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour le mode d'emploie.
Voici le code que j'avais avant tes réponses
https://www.cjoint.com/?DLEop4MoRO0
Après je pense qu'il faut que je remplace l'ensemble des bouton "a_cb_"... par ça
En remplaçant a_cb_16 par un nom qui prendrais en compte n'importe quel bouton
Voici le code que j'avais avant tes réponses
https://www.cjoint.com/?DLEop4MoRO0
Après je pense qu'il faut que je remplace l'ensemble des bouton "a_cb_"... par ça
Private Sub a_cb_16() 'Boucle sur tout les boutons For i = 1 To 16 'Si bouton.name like "a_cb_" & "*" If a_cb_16.Name Like "a_cb_" & "*" Then 'Si bouton.Backcolor= gris (là blanc) If Me.Controls("a_cb_a" & i).BackColor = 16777215 Then 'retourne bouton If a_couleur_16 = 1 Then a_cb_16.BackColor = 32768 ElseIf a_couleur_16 = 2 Then a_cb_16.BackColor = 8421631 ElseIf a_couleur_16 = 3 Then a_cb_16.BackColor = 10040115 ElseIf a_couleur_16 = 4 Then a_cb_16.BackColor = 52377 ElseIf a_couleur_16 = 5 Then a_cb_16.BackColor = 16764057 ElseIf a_couleur_16 = 6 Then a_cb_16.BackColor = 52479 ElseIf a_couleur_16 = 7 Then a_cb_16.BackColor = 26367 ElseIf a_cb_16.BackColor = 255 Then 'sinon Else: a_cb_16.BackColor = 16777215 'fin si End If 'fin si End If ' fin si End If 'fin boucle Next i End Sub
En remplaçant a_cb_16 par un nom qui prendrais en compte n'importe quel bouton
Bon. Alors on s'en passera.
Dans le code du classeur fourni, tu écris ce code pour le bouton a_cb_1 :
et quasiment le même pour tous les boutons.
Regarde déjà ce que ferait ce code :
Attention : ne pas avoir deux procédures Private Sub a_cb_1_Click()!!!
Dans le code du classeur fourni, tu écris ce code pour le bouton a_cb_1 :
Private Sub a_cb_1_Click() If a_couleur_1 = 1 Then a_cb_1.BackColor = 32768 ElseIf a_couleur_1 = 2 Then a_cb_1.BackColor = 8421631 ElseIf a_couleur_1 = 3 Then a_cb_1.BackColor = 10040115 ElseIf a_couleur_1 = 4 Then a_cb_1.BackColor = 52377 ElseIf a_couleur_1 = 5 Then a_cb_1.BackColor = 16764057 ElseIf a_couleur_1 = 6 Then a_cb_1.BackColor = 52479 ElseIf a_couleur_1 = 7 Then a_cb_1.BackColor = 26367 Else: a_cb_1.BackColor = 255 End If End Sub
et quasiment le même pour tous les boutons.
Regarde déjà ce que ferait ce code :
Private Sub a_cb_1_Click() Call Bouton_Clic(1) End Sub Private Sub a_cb_2_Click() Call Bouton_Clic(2) End Sub Private Sub a_cb_3_Click() Call Bouton_Clic(3) End Sub Sub Bouton_Clic(Num As Integer) MsgBox "Tu as cliqué sur le bouton : " & Me.Controls("a_cb_" & Num).Name End Sub
Attention : ne pas avoir deux procédures Private Sub a_cb_1_Click()!!!
J'ai légèrement repris tes codes.
J'ai pris la liberté d'utiliser des variables tableaux pour simplifier l'écriture. Si cela ne convient pas (car tu ne l'aurais pas abordé en cours), dis le on rechangera.
Je te laisse le soin de regarder attentivement, surtout les codes de :
Elle utilise le code demandé par ton professeur (boucle sur contrôles)
et dans le Module :
https://www.cjoint.com/?DLEplsdrfRA
Dès que tu les auras comprises, on pourra passer à la suite, et donc à la fonction : Bouton_Clic qui n'est pas encore écrite.
J'ai pris la liberté d'utiliser des variables tableaux pour simplifier l'écriture. Si cela ne convient pas (car tu ne l'aurais pas abordé en cours), dis le on rechangera.
Je te laisse le soin de regarder attentivement, surtout les codes de :
Private Sub a_cb_lancer_partie_Click()
Elle utilise le code demandé par ton professeur (boucle sur contrôles)
et dans le Module :
Sub Tirage_Couleurs()
https://www.cjoint.com/?DLEplsdrfRA
Dès que tu les auras comprises, on pourra passer à la suite, et donc à la fonction : Bouton_Clic qui n'est pas encore écrite.
C'est bon j'ai compris l'ensemble du code
Je t'aide...
Ce code :
fait exactement la même chose que ce que tu faisais ici :
Sauf que, au lieu de remplir 16 variables en 16 lignes de code, par un léger arrangement des formules dans la feuille et l'utilisation d'une variable de type tableau, on peut le faire en 3 lignes par une boucle.
Ensuite, à quoi sert :
Et bien, en fait, la propriété BackColor des boutons de commande n'accepte que les codes couleurs Long, pas les codes couleurs Excel VBA (1, 2, 3 etc...)? CEs derniers sont réservés pour ColorIndex, propriété que ne possède pas le background des boutons de commande.
Il nous faut donc, à partir des numéros aléatoires (de 1 à 8) a_couleur(i), les transformer en Long.
Pour cela, nous utiliserons l'Array Couleurs qui renvoie :
Ce code :
For i = 1 To 16 a_couleur(i) = Range("C" & i).Value Next i
fait exactement la même chose que ce que tu faisais ici :
a_couleur_1 = Range("B1").Value a_couleur_2 = Range("B5").Value a_couleur_3 = Range("D1").Value a_couleur_4 = Range("D5").Value a_couleur_5 = Range("B2").Value a_couleur_6 = Range("B6").Value a_couleur_7 = Range("D2").Value a_couleur_8 = Range("D6").Value a_couleur_9 = Range("B3").Value a_couleur_10 = Range("B7").Value a_couleur_11 = Range("D3").Value a_couleur_12 = Range("D7").Value a_couleur_13 = Range("B4").Value a_couleur_14 = Range("B8").Value a_couleur_15 = Range("D4").Value a_couleur_16 = Range("D8").Value
Sauf que, au lieu de remplir 16 variables en 16 lignes de code, par un léger arrangement des formules dans la feuille et l'utilisation d'une variable de type tableau, on peut le faire en 3 lignes par une boucle.
Ensuite, à quoi sert :
Couleurs = Array(0, 12632256, 255, 65280, 16711680, 65535, 16711935, 16776960)
Et bien, en fait, la propriété BackColor des boutons de commande n'accepte que les codes couleurs Long, pas les codes couleurs Excel VBA (1, 2, 3 etc...)? CEs derniers sont réservés pour ColorIndex, propriété que ne possède pas le background des boutons de commande.
Il nous faut donc, à partir des numéros aléatoires (de 1 à 8) a_couleur(i), les transformer en Long.
Pour cela, nous utiliserons l'Array Couleurs qui renvoie :
Couleurs = Array(0, 12632256, 255, 65280, 16711680, 65535, 16711935, 16776960) 'Signifie : 'Couleurs(1) = 0 => Noir 'Couleurs(2) = 12632256 => gris 'Couleurs(3) = 255 => rouge 'Etc... 'Couleurs(16) = 16776960
Je pense oui
Attribut la valeur de la cellule "ci" à la variable a_couleur(i) Pour i allant de 1 à 16.
Dans :
Couleurs est une variable tableau dans laquelle avec Array on crée un liste d'élément. Ces éléments étants les couleurs attribuées au bouton, mais je me rend compte que je n'en comprend pas l'utilité.
For i = 1 To 16 a_couleur(i) = Range("C" & i).Value Next i
Attribut la valeur de la cellule "ci" à la variable a_couleur(i) Pour i allant de 1 à 16.
Dans :
Couleurs = Array(0, 12632256, 255, 65280, 16711680, 65535, 16711935, 16776960)
Couleurs est une variable tableau dans laquelle avec Array on crée un liste d'élément. Ces éléments étants les couleurs attribuées au bouton, mais je me rend compte que je n'en comprend pas l'utilité.
Bonjour,
Tu peux faire comme ça directement, cela fonctionne très bien.
Je détaille ici un peu plus pour une meilleure compréhension...
Mais ceci n'est pas notre plus gros problème. De la manière dont nous construisons l'array a_couleur, les couleurs ne sont pas entièrement mélangées dans les boutons de notre UserForm. De la manière dont nous procédons, nous nous retrouvons avec 8 couleurs dans les 8 boutons du haut et leurs doubles dans les 8 boutons du bas... Pas cool.
Ce que je te propose maintenant, c'est de mélanger les couleurs. Pour cela, il te faut une fonction qui mélange un Array.
Je te laisse creuser un peu cette idée.
Tu peux faire comme ça directement, cela fonctionne très bien.
Je détaille ici un peu plus pour une meilleure compréhension...
Mais ceci n'est pas notre plus gros problème. De la manière dont nous construisons l'array a_couleur, les couleurs ne sont pas entièrement mélangées dans les boutons de notre UserForm. De la manière dont nous procédons, nous nous retrouvons avec 8 couleurs dans les 8 boutons du haut et leurs doubles dans les 8 boutons du bas... Pas cool.
Ce que je te propose maintenant, c'est de mélanger les couleurs. Pour cela, il te faut une fonction qui mélange un Array.
Je te laisse creuser un peu cette idée.