Problème pour la création d'un memorie
Fermé
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
-
29 déc. 2014 à 17:08
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 31 déc. 2014 à 08:00
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 31 déc. 2014 à 08:00
A voir également:
- Problème pour la création d'un memorie
- Creation compte gmail - Guide
- Création compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Création groupe whatsapp - Guide
- Création site web - Guide
9 réponses
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
29 déc. 2014 à 17:27
29 déc. 2014 à 17:27
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 ^^
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2014 à 11:56
30 déc. 2014 à 11:56
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
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
30 déc. 2014 à 12:23
30 déc. 2014 à 12:23
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)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2014 à 12:27
30 déc. 2014 à 12:27
La boucle n'est pas très compliquée en elle même.
Si tu as nommé tes boutons de couleur a_cb_1, a_cb_2, a_cb_3 etc... a_cb_16, tu peux boucler comme ceci :
Si tu as nommé tes boutons de couleur a_cb_1, a_cb_2, a_cb_3 etc... a_cb_16, tu peux boucler comme ceci :
Dim i As Integer For i = 1 To 16 If Me.Controls("a_cb_" & i).BackColor = 12632256 Then Next i
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
Modifié par pijaku le 30/12/2014 à 13:53
Modifié par pijaku le 30/12/2014 à 13:53
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2014 à 13:54
30 déc. 2014 à 13:54
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
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
30 déc. 2014 à 14:12
30 déc. 2014 à 14:12
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2014 à 14:14
30 déc. 2014 à 14:14
As tu déjà vu les modules de classe?
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
30 déc. 2014 à 14:15
30 déc. 2014 à 14:15
Non jamais
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 30/12/2014 à 14:22
Modifié par pijaku le 30/12/2014 à 14:22
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()!!!
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2014 à 15:03
30 déc. 2014 à 15:03
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.
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
30 déc. 2014 à 15:58
30 déc. 2014 à 15:58
C'est bon j'ai compris l'ensemble du code
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2014 à 16:07
30 déc. 2014 à 16:07
Même ceci :
For i = 1 To 16 a_couleur(i) = Range("C" & i).Value Next i Couleurs = Array(0, 12632256, 255, 65280, 16711680, 65535, 16711935, 16776960)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
30 déc. 2014 à 16:28
30 déc. 2014 à 16:28
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
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
30 déc. 2014 à 16:39
30 déc. 2014 à 16:39
D'accord j'avais bien compris pour le premier code mais pas trop l'array je voyais ce qu'il faisait mais pas trop à quoi il nous servais.
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
30 déc. 2014 à 16:26
30 déc. 2014 à 16:26
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é.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2014 à 16:42
30 déc. 2014 à 16:42
Alors, dans le Module1, place ce code :
Puis lance le jeu et regarde
Sub Bouton_Clic(Num As Integer) Dim NumCoul As Integer With UserForm1 NumCoul = a_couleur(Num) .Controls("a_cb_" & Num).BackColor = Couleurs(NumCoul) End With End Sub
Puis lance le jeu et regarde
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
30 déc. 2014 à 16:57
30 déc. 2014 à 16:57
Je comprend à peu près mais pourquoi ne fais on pas directement
Sub Bouton_Click(Num As Integer) With UserForme1 .Controls("a_cb_"&num).BackColor = Couleurs(a_couleur(Num) End With End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
>
BO_Odo
Messages postés
10
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
30 décembre 2014
31 déc. 2014 à 08:00
31 déc. 2014 à 08:00
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.