Changement de couleur de cellules comprises entre 2 cellules....

Résolu/Fermé
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 - 18 déc. 2014 à 18:23
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 - 2 avril 2015 à 10:51
Bonjour à Toutes et à Tous
Je suis un petit "programmeur" autodidacte qui adore Excel et son Visual Basic. Depuis plusieurs années j'apprends VBA en travaillant avec et en me perfectionnant en me créant de petites applis qui m'oblige à progresser dans ce langage. Mais des fois je tourne beaucoup en rond sans trouver la solution voire un début de solution. C'est le cas aujourd'hui. Alors j'appelle à l'aide ....
Quand j'étais plus jeune, je jouais au Tribolo. C'est un jeu qui se joue à trois joueurs sur une aire de jeu de 300 cases pour mon cas. Le but du jeu est qu'un joueur en sélectionnant une case stratégiquement prenne les cases des deux autres joueurs. Celui qui a le plus de cases a gagné. Il me manque la façon de changer les cases des joueurs adverses qui perdent leurs cases pour pouvoir incrémenter ou décrémenter le compteur des joueurs. Je vous mets en pièce jointe, des modèles de prise de cases à l'adversaire. Qui pourrait m'aider à rédiger la macro pour réaliser ce changement d'état des cases prises ou me mener sur un rail qui m'aiderait à aller dans le bon sens ?? Par avance merci.




A voir également:

17 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
19 déc. 2014 à 09:15
Salut mousaillon,

Ton sujet est intéressant.
Avant de se ruer sur les fonctions nécessaires au jeu proprement dit, je te propose de nous arrêter un instant sur d'autres possibilités.

La jouabilité :
1- Nombre de joueurs fixes = 3 ou variant de 2 à ...?
2- Plateau de jeu fixe à 300 cases ou variable (on pourrait proposer plusieurs modes de jeu).
Par ailleurs, dans le cas de 300 ,elles se répartissent comment? 15x20?
3- Possibilité de jouer contre l'ordinateur? cf intelligence artificielle

Le choix : jeu en réseau ou sur un seul ordinateur
Les deux étant possibles, ce sera ton choix l'un, l'autre ou les deux.

Intelligence artificielle
En faisant le choix de permettre à l'ordinateur de jouer, il te faut choisir comment il pourra le faire.
Trois choix :
1- Des coups joués au hasard. => simple
2- Des coups calculés au "coup par coup" => difficile
Selon l'état de la piste, l'ordinateur calculerai le meilleur coup possible.
3- Des coups calculés "en avance" => Hyper ardue
L'ordinateur calcule alors comment gagner une partie.

0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
20 déc. 2014 à 08:36
Bonjour pijaku
Merci déjà d'avoir répondu à ma demande. Mais pas d'emballement, je n'ai pas demandé à ce que l'on prenne les rênes du jeu. Je veux juste pouvoir réaliser par macro les 3 exemples que j'ai donnés. Il sera toujours temps d'aller chercher la presque perfection de ce jeu ultérieurement.
Bon we
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743 > mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016
20 déc. 2014 à 10:47
Bonjour

je n'ai pas demandé à ce que l'on prenne les rênes du jeu
Non tout à fait. Et ça n'est pas non plus le but de ma réponse.

d'aller chercher la presque perfection de ce jeu ultérieurement
Pas tout à fait.
En fait, la manière de le développer jusque dans le choix des variables va dépendre de ces questionnements que tu dois te poser.
J'ai bien conscience que c'est pour un but ludique, mais tant qu'à le faire, autant le faire bien non?
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
21 déc. 2014 à 08:54
Bonjour pijaku,
En admettant ta théorie, je ne veux pas en faire "une usine à gaz". Le but de cette affaire n'est pas le jeu, ce qui est le plus important pour moi, c'est d'évoluer dans le développement VBA par la création d'applications utiles, voire ludiques. De me dire j'ai pensé à une application et j'ai réussi à la développer moi-même, même si parfois je suis obligé d'avoir un coup de pousse...!
L'aire de jeu fait 20 colonnes par 15 lignes. L'aire de jeu pourra être variable. Pas de jeu contre l'ordinateur, pas de jeu en réseau. Le nombre de joueurs sera 2 ou 3. Le mieux est de favoriser le jeu à 3. Trop simple lorsque l'on joue à 2, moins de suspense, moins de tactique de jeu.
Au départ j'ai déjà programmé :
(Je me suis axé sur une partie à 3 joueurs)
- l'enregistrement du nom des joueurs
- aléatoirement l'affichage des cases fixes (noires) (comme les cases noires d'un "mots croisés").
soit 30 cases noires sur 300.
- aléatoirement l'affichage des cases rouges du joueur 1.
soit 20 cases rouges sur les 270 restantes.
- aléatoirement l'affichage des cases vertes du joueur 2.
soit 20 cases vertes sur les 250 restantes.
- aléatoirement l'affichage des cases bleues du joueur 3.
soit 20 cases bleues sur les 230 restantes.
Reste = 210 cases pour le jeu.
- le contrôle du nombre de cases affichées aléatoirement
- l'incrémentation des compteurs de chaque joueur. Soit tous les compteurs à 20.
- le tirage au sort du premier joueur qui commence
- et c'est là que je coince, lorsque le joueur doit débuter la partie.....
le joueur sélectionne la case qu'il désire avec la souris ou demande en
l'indiquant la sélection de la case "C4" par exemple (ce cas est un plus lourd
mais bon !).
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
21 déc. 2014 à 12:27
Bonjour,

Voilà qui répond à pas mal de questionnements.

le joueur sélectionne la case qu'il désire avec la souris me semble plus judicieux que indiquant la sélection de la case "C4" par exemple

Pour faire cela, il faut utiliser le Module de la feuille concernée, en utilisant l'événement Worsheet_SelectionChange().

Je te laisse regarder l'aide en ligne sur cet événement.
Si tu as des difficultés, n'hésite pas.

Je reviens dès lundi avec la fonction qui te manque.
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
22 déc. 2014 à 09:12
Ok merci pour cette réponse. Dès que je peux je me plonge dedans.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 déc. 2014 à 11:23
Bonjour,

Avant de te communiquer la fonction, j'ai besoin que tu me confirmes les cellules qui se doivent d'être vérifiées.
En effet, au vu de ta question initiale, j'avais écrit une fonction qui ne s'avère plus exacte au vu de ton complément de samedi (à savoir les cellules noires).
Je t'ai fait un dessin :


Est ce exact? ou pas...
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
22 déc. 2014 à 11:50
Bonjour,
Non ce n'est pas du tout cela. il faut absolument te servir des 3 exemples que j'ai donnés au début de notre discussion. L'emplacement des cellules de couleur que j'ai donné est primordial. Tu ne peux pas avoir de cases "vides" "sans couleur" entre deux cases de même couleur pour que les cellules prisonnières changent de couleur. Sinon il faut bien chercher dans toutes les directions. Je te prépare à nouveau des exemples pour étayer mes explications qui ne sont pas forcément bien claires. Je vois cela cet apm.
A+ et merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 déc. 2014 à 13:32
OK.
Pour le coup, ce que je pensais relativement facile vendredi devient ardu...
Mais c'est faisable.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
22 déc. 2014 à 13:55
Rebonjour,
Oui je me doute que ce n'est pas facile. Je te remets 3 nouveaux exemples pour essayer d'étayer ce problème.

Et un peu plus compliqué :

J'espère que cela éclaircit bien la difficulté à surmonter ?
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
22 déc. 2014 à 13:59
Désolé pour l'augmentation de la difficulté et l'explication en retard des cases noires ! cela augmente le niveau du challenge ! il faut le voir comme cela.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 déc. 2014 à 14:35
T'inquiète pas, je le vois comme ça.

Regarde déjà si ceci convient, sans les cases noires...

https://www.cjoint.com/c/DLwoQjP8ryh

Si oui, on verra ensemble pour ajouter le test "cases noires".
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 déc. 2014 à 14:48
PS : inutile de regarder les fonctions de trop près.
Je suis toujours un peu désordonné au départ.

Regarde simplement si ce fichier répond aux règles imposées (à part les cases noires bien sur)

Il y a moyen de faire beaucoup plus simple, je referais un second jet plus tard.
Là, ton problème m'a collé mal au crâne ;-)

A+
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 déc. 2014 à 15:09
Là, tu peux regarder.
Une fonction au lieu des 3 précédentes...

https://www.cjoint.com/?DLwprjCu0Xg
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
22 déc. 2014 à 15:15
Oui joli travail .... !. Là je vois que ça avance pas mal. Je comprends que tu aies eu mal à la tête lorsque je lis la macro. Je ne suis pas trop habitué à ce genre d'écriture mais je vais creuser. Su tu pouvais mettre quelques annotations pour que je reste sur la bonne piste. Je ne veux pas être qu'un utilisateur mais comprendre ce que je fais avec ton aide bien sûr ! Alors cela marche bien mais malheureusement il y a un défaut majeur. Le joueur arrive à prendre des cases à l'adversaire dans des cas où il n'en a pas le droit. Exemple :
en D2 tu as une case rouge
en D3 tu as une case bleue
en D4 tu as une case verte
le joueur en cours choisit la case D1. La case sélectionnée passe en vert.
D2 et D3 sont comprise entre deux cases vertes.
Avec la macro il prend les cases D2,3. Il n'en a pas le droit. Car D2 et D3 sont de couleur différente. Pour se faire il aurait fallu que D2 et D3 soient de couleur rouge ou bleu. Voir les exemples fournis.
Sinon il modifie bien les cases à prendre dans toutes les directions. Super !
Eh cher ami ne passe pas non plus ton temps là dessus. Il n'y a pas le feu. Mais je suis heureux de voir que cela est faisable.
Merci pour le travail accompli. SUPER !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 déc. 2014 à 18:24
Eh cher ami ne passe pas non plus ton temps là dessus.
Ne t'inquiète pas, mon fils passe avant.
C'est juste que comme il a 7 mois, il fait pas mal de siestes; et aujourd'hui maman n'était pas là... donc j'ai eu la paix et du temps.

Sinon, regarde ceci, cela devrait te convenir, ou presque. J'ai essayé de commencer à annoter, mais là, bébé braille, donc je te laisse.

https://www.cjoint.com/c/DLwsENsveH5

A+
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
23 déc. 2014 à 11:45
Bonjour pijaku

J'ai testé ta nouvelle version. Encore du beau travail avec des améliorations. Malheureusement je l'ai testée dans pas mal de cas. Parfois les cases noires se font manger et changent de couleur. Il y a des dépassements de l'aire de jeu. On dirait qu'il y a un manque de stabilité. Ca marche bien dans les cas simples puis soudain la macro ne réalise pas le travail demandé.
Quand je regarde ta macro, je me dis que j'ai encore pas mal de boulot pour en arriver à ce stade d'écriture.
Encore merci.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
23 déc. 2014 à 18:42
Bonjour,

Je suis sur d'avoir mis une réponse en début d'après midi... Mais elle n'apparait pas. J'ai du faire une boulette ...
Bon, voici un code qui semble fonctionner :
Option Explicit

Dim rngPlateau As Range
Dim Joueurs(2) As Integer
Dim NumJoueurEnCours As Integer

Sub Init()
'Les cellules en dehors du plateau n'ont pas de couleur
    'permet la sortie de boucle lorsque l'on arrive en bordure de plateau
Range("A1:AZ500").Interior.ColorIndex = -4142
'définit le plateau, l'aire de jeu
Set rngPlateau = Range("C4:Q23")
'colore toutes les cellules du plateau en blanc
    'pour différencier de l'extérieur du plateau de jeu
rngPlateau.Interior.ColorIndex = 2
'peint quelques cellules en noir, pour l'exemple
Range("G5").Interior.ColorIndex = 1
Range("D10").Interior.ColorIndex = 1
Range("P4").Interior.ColorIndex = 1
Range("K17").Interior.ColorIndex = 1
Range("L10").Interior.ColorIndex = 1
Range("M20").Interior.ColorIndex = 1
'définit la couleur des 3 joueurs
Joueurs(0) = 3
Joueurs(1) = 4
Joueurs(2) = 5
'numéro du joueur qui a la main
NumJoueurEnCours = 0
'sélection d'une cellule en dehors du plateau
Range("A1").Select
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Si la cellule sélectionnée ne fait pas partie du plateau de jeu, on quitte sans rien faire
If Intersect(rngPlateau, Target) Is Nothing Then Exit Sub
'ICI différents tests à faire...
If Target.Count > 1 Then Exit Sub

Dim Chemin As String, Coul As Integer

Coul = Joueurs(NumJoueurEnCours)
Target.Interior.ColorIndex = Coul

'Cherche le "Chemin" à colorier grâce à la fonction ci-dessous : Colore
    'paramètres :
    'target = Range(cellule cliquée) => cellule active
    '1 = décalage en ligne (pour vérifier la colonne il faut ajouter ou soustraire 1 au numéro de ligne)
    '0 = décalage de colonne
    'coul = couleur du joueur
'Colore La Colonne
Chemin = Colore(Target, 1, 0, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul
'Colore la ligne
Chemin = Colore(Target, 0, 1, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul
'colore la diagonale \
Chemin = Colore(Target, 1, 1, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul
'colore la diagonale /
Chemin = Colore(Target, -1, 1, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul

'joueur suivant
NumJoueurEnCours = NumJoueurEnCours + 1
If NumJoueurEnCours = 3 Then NumJoueurEnCours = 0
End Sub

'La fonction Colore va renvoyer le "chemin" si elle rencontre, dans son parcours
'la couleur du joueur qui vient de jouer.
'Elle est appelée 4 fois, horizontal, vertical et les deux diagonales
Function Colore(RngJoue As Range, pasH As Integer, PasV As Integer, Couleur As Integer) As String
Dim Lig As Integer, Col As Integer, Sens As Integer, CheminTemp As String, Flag As Boolean
Dim PremCouleur As Integer, CoulCelEnCours As Integer

'la cellule jouée est forcément colorée
Colore = RngJoue.Address
'Sens permet, dans le cas horizontal par exemple :
    'd'aller vers la droite, sens = -1
    'd'aller vers la gauche, sens = 1
For Sens = -1 To 1 Step 2
    'initialisation des variables
    'à chaque changement de sens
    Lig = 0
    Col = 0
    PremCouleur = 0
    Do
        Lig = Lig + (pasH * Sens)
        Col = Col + (PasV * Sens)
        'Cas de sortie de boucle :
            'couleur blanc : If RngJoue.Offset(Lig, Col).Interior.ColorIndex = 2
            'couleur noire : If RngJoue.Offset(Lig, Col).Interior.ColorIndex = 1
            'absence de couleur (en dehors du plateau) : If RngJoue.Offset(Lig, Col).Interior.ColorIndex = -4142
        'Ces 3 conditions se résument en une seule :
        If RngJoue.Offset(Lig, Col).Interior.ColorIndex < 3 Then Exit Do
        'PremCouleur représente la couleur de la première case rencontrée
        If PremCouleur = 0 Then 'Si première fois alors
            'on lui attribue la couleur de la case
            PremCouleur = RngJoue.Offset(Lig, Col).Interior.ColorIndex
        End If
        CoulCelEnCours = RngJoue.Offset(Lig, Col).Interior.ColorIndex
        'on va regarder le cas de la couleur de la cellule
        Select Case CoulCelEnCours
            Case PremCouleur 'cas ou elle est identique à la première couleur
                'si on rencontre plusieurs fois la couleur rencontrée dans la cellule
                'voisine de celle jouée, on stocke leurs adresses dans la variable CheminTemp
                CheminTemp = RngJoue.Offset(Lig, Col).Address & "," & CheminTemp
            Case Couleur 'cas ou l'on rencontre la couleur du joueur
                Flag = True
            Case Else 'autre cas (autre joueur)
                Exit Do
        End Select
    Loop While RngJoue.Offset(Lig, Col).Interior.ColorIndex <> Couleur
    'si le drapeau est levé, cela veut dire qu'on a rencontré la couleur du joueur
    'donc on enregistre le "chemin" réalisé
    If Flag = True Then Colore = CheminTemp & Colore Else CheminTemp = ""
Next Sens
End Function


Question subsidiaire quant au jeu : un joueur peut-il jouer sur une case colorée par lui ou un autre joueur?
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
24 déc. 2014 à 10:49
Bonjour pijaku

Encore merci pour cette évolution.
à ta question :
"Question subsidiaire quant au jeu : un joueur peut-il jouer sur une case colorée par lui ou un autre joueur?"
La réponse est non pour les deux cas. Obligatoirement la case est vierge.

J'ai testé la macro. J'ai rencontré deux problèmes. J'en ai réglé un mais pas le deuxième.
Le premier : message d'erreur :

j'ai rajouté les 2 lignes suivantes dans "Options Explicite"


Le deuxième :

Là j'avoue que je ne trouve pas pourquoi. Certainement une erreur ou un manque dans la partie "Function"
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 déc. 2014 à 11:19
Bonjour,

Il ne faut pas réutiliser les anciens codes.
Ouvre un nouveau classeur, dessines les contours de la plage C4:Q23 et colle tout le code plus haut dans le module de la feuille.
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
24 déc. 2014 à 15:11
C'est fait ; j'ai pris un nouveau classeur, j'ai collé la macro mais petit souci, d'écriture je pense, sur cette ligne de code du private sub :
j'ai ce msg d'erreur ;

à priori le "selectijava-script" pose problème. J'ai essayé différentes écritures. Là l'erreur disparait, j'ai bien le trait de séparation des différents paragraphes de la macro qui se matérialise mais pas d'exécution du code.
Pas de bol mais tu t'y approche, ça c'est sûr !

Je vais devoir en rester là pour aujourd'hui et pour deux ou trois jours. Je te souhaite à toi et ta famille de bonnes fêtes de Noël. Joyeux réveillon et encore merci.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
26 déc. 2014 à 11:09
Bonjour,
Le selectijava-script, comme tu peux le voir sur le forum, ne fait pas partie du code.
C'est lorsque tu as copié-collé le code du forum vers ton Excel que ce mot s'est ajouté.
Cela doit être un bug dû à l'utilisation, ici, des balises code. Peux tu nous donner ton navigateur que l'on puisse faire des tests stp?

Sinon, essaie ce fichier :
https://www.cjoint.com/c/DLAlrrnowgU

A+
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
30 déc. 2014 à 11:02
Bonjour,
Me revoilà . Ok pour la macro. Ca marche super bien. Je l'ai testée de plusieurs façons et à priori tout à l'air ok. Je vais tenter maintenant de l'adapter à mes besoins dans l'application. Un grand merci pour ton aide. Super sympa. Bonne fin d'année et bonne année 2015.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
30 déc. 2014 à 11:20
Bonjour,

Juste parce que nous sommes sur un forum d'entraide, ce serait sympa de ta part de placer le résultat final, ici, dans une réponse.
Ainsi nous pourrions voir ta réalisation et pourquoi pas en faire une fiche pratique...
En tout cas, de rien.
Bonne fin d'année et bonne année 2015 à toi également.
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1 > 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 à 09:52
Bonjour,

Ok pas de soucis. J'y avais bien pensé. Ca me prendra un certain temps quand même ! Pour mettre un fichier Excel en pièce jointe sur le forum comment procéder ?
Bon réveillon ! Bonne année 2015
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743 > mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016
31 déc. 2014 à 09:55
Bonjour,

Ca me prendra un certain temps quand même !
Aucun souci. Une des règles des forums en général, c'est que l'urgence n'existe pas...

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...


En tout cas, merci pour tout ceux qui seront intéressés.

Bonne fin d'année et bonne année 2015 également.
@++
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
24 janv. 2015 à 14:51
Bonjour pijaku

Je travaille toujours sur mon application et à priori il ne me reste plus qu'à résoudre deux problèmes sur lesquels je bute. Une nouvelle fois je viens faire appel à ton savoir en la matière.
Le premier concerne une erreur dans la macro pour la prise des cases de l'adversaire.
Un schéma causant toujours mieux qu'un long discours, j'ai mis en pièce jointe 2 exemples d'erreurs

Des cases changent de couleur alors qu'elles n'en ont pas le droit.

Le deuxième est d'ordre esthétique, ergonomique, pratique .....
J'ai réussi à faire un tirage au sort du joueur qui commence et qui affiche sa bonne couleur au démarrage. Mais pour celui-ci, comment éviter qu'il exécute le Alt+F8 ? un clic sur un bouton de commande serait plus pratique ? non ? qu'en penses-tu ? Est ce possible ? ce qui m'inquiète est le sub INIT()

J'ai inséré dans le jeu, le choix de deux aires de jeu (300 et 600 cases),toutes les cases coloriées tirées au sort pour chaque joueur ainsi que les cases noires selon un pourcentage précis en fonction de l'aire de jeu spécifiée (car la grille n'est pas vierge au démarrage), tous les décomptes de points, les statistiques, les sauvegardes de jeu, une notice simplifiée et quelques messages en cas d'erreur de manips ou d'oubli de paramétrage.....etc. Pour le moment j'ai travaillé avec trois joueurs systématiques et je dois travailler pour le choix du jeu à 2 ou 3 joueurs.

Il ne restera plus qu'à torturer ce jeu pour voir si toutes les conditions sont réunies et qu'elles remplissent bien le cahier des charges puis à travailler sur une présentation un peu "fun" avec les moyens mais néanmoins limités qu'offre Excel !
Encore un peu de travail mais cela avance bien.
Par avance merci ...
A+
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
26 janv. 2015 à 08:24
Salut,

Je vais regarder l'erreur dans la fonction de changement de couleur. Ce ne doit pas être trop compliqué à résoudre.

Pour le bouton, plusieurs choix.
- tu utilises un bouton de type Contrôle ActiveX. Le code sera donc :
'Bouton de commande type ActiveX
Private Sub CommandButton1_Click()
Init
End Sub

- tu utilises un bouton de type formulaire, après l'avoir dessiné, tu lui affectes la macro Feuil1!Init
- de la même façon, tu peux affecter une macro à une forme (cf exemple)
EXEMPLE
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
26 janv. 2015 à 08:53
Re-

Voici le fichier.
Je n'ai pas tout testé mais cela devrait convenir...

Pour le reste de tes questions, si tu veux un coup de main, faudra me filer ton fichier de travail.
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
26 janv. 2015 à 17:06
Bonjour pijaku
Je n'étais pas loin de la solution. En fait je pensais que le INIT() ne pouvait se mettre sur un bouton puisque c'est une initialisation de la feuille. J'avais copié le texte de la macro sous le Privat Sub_CommandButton_Click ce qui me semblait peu probable mais je teste. Si cela marche tant mieux sinon j'essaie autre chose mais au bout d'un moment je suis au pied du mur. Je vais maintenant regarder le delta ente cette nouvelle écriture et la dernière que tu m'avais fournie pour corriger mon adaptation. J'ai testé ta dernière écriture. comme je m'en doutais, l'erreur a l'air d'être bien corrigée.
Et bien sûr encore une fois merci ! Je me mets au travail !
A+
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
27 janv. 2015 à 07:47
Salut,

Le "delta" entre les deux versions se trouve à deux endroits :

Dans la
Private Sub Worksheet_SelectionChange

Tu avais ceci :
Chemin = Colore(Target, 1, 0, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul
'Colore la ligne
Chemin = Colore(Target, 0, 1, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul
'colore la diagonale \
Chemin = Colore(Target, 1, 1, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul
'colore la diagonale /
Chemin = Colore(Target, -1, 1, Coul)
If Chemin <> "" Then Range(Chemin).Interior.ColorIndex = Coul

Maintenant tu as :
'Colore La Colonne
Chemin = Colore(Target, 1, 0, Coul)
'Colore la ligne
Chemin = Colore(Target, 0, 1, Coul)
'colore la diagonale \
Chemin = Colore(Target, 1, 1, Coul)
'colore la diagonale /
Chemin = Colore(Target, -1, 1, Coul)


Et dans la
Function Colore(RngJoue As Range, pasH As Integer, PasV As Integer, Couleur As Integer) As String


Tu avais ceci :
'si le drapeau est levé, cela veut dire qu'on a rencontré la couleur du joueur
    'donc on enregistre le "chemin" réalisé
    If Flag = True Then Colore = CheminTemp & Colore Else CheminTemp = ""

Et maintenant tu as :
 'si le drapeau est levé, cela veut dire qu'on a rencontré la couleur du joueur
    'donc on enregistre le "chemin" réalisé
    If Flag = True Then Range(CheminTemp & Colore).Interior.ColorIndex = Couleur: CheminTemp = "": Flag = False Else CheminTemp = ""


Autrement dit, le changement de couleur ne se fait plus dans la Sub Worksheet_Change, mais dans la Function Colore.

Je vais te faire, dans la journée, une réponse complète expliquant le déroulement de ce code, ce sera plus clair ainsi, je pense.
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1
25 févr. 2015 à 17:22
Bonjour pijaku,
Me revoilà. Non je n'ai pas abandonné. Mais j'ai fait une pause pendant un certain temps pour me vider la tête de ce jeu que j'essaie de refaire en vba. Voilà où j'en suis. J'ai fais quelques essais. Tout n'est pas parfait. Il reste encore des choses à faire mais où je bloque comme l'interdiction de cliquer sur une case déjà coloriée par un joueur.... le timer de la partie où je ne suis pas sûr du chrono que j'ai essayé de programmer .... et certainement des bugs à corriger que l'on rencontrera certainement lors de diverses parties. je travaille sur un 21 pouces alors je ne sais s'il sera en plein écran à son ouverture sur tous les écrans.

Voici le lien pour le fichier :
https://www.cjoint.com/c/EBzrzZk47uN

Dis moi ce que tu en penses. Tu vas certainement rigoler de mon code qui doit être sûrement perfectionné. Mais j'ai fait avec ce que je sais ou avec ce que j'essaies de savoir... encore beaucoup de travail.
A+
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
26 févr. 2015 à 12:34
Salut moussaillon!
Je regarde ton fichier ce midi et reviens te donner des news.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
26 févr. 2015 à 13:03
Avant d'aller plus loin, il convient que tu corriges ceci. Il faut préciser, en VBA, le type de chacune des variables.
Exemple : Dans le Module de ta feuille Accueil tu déclares :
Private Sub acces_jeu_Click()
Dim a, b, c, d, col, fin, i, j, l, x, y, compteur, reponse As Integer
Dim ligne As Long
Dim nom, nom_joueur1, nom_joueur2, nom_joueur3, nom_joueurlist As String

En procédant de la sorte, les variables non typées (a, b, c, d,..., nom, nom_joueur1,...) sont considérées comme Variant et non pas String ou Integer...
Il te faut modifier en remplaçant par :
Private Sub acces_jeu_Click()
Dim a As Integer, b As Integer, c As Integer, d As Integer, col As Integer
Dim fin As Integer, i As Integer, j As Integer, l As Integer, x As Integer
Dim y As Integer, compteur As Integer, reponse As Integer
Dim ligne As Long
Dim nom As String, nom_joueur1 As String, nom_joueur2 As String
Dim nom_joueur3 As String, nom_joueurlist As String


Et ceci pour toutes tes procédures ou cela se produit.....
0
mousaillon Messages postés 53 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 1 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
2 avril 2015 à 10:51
Bonjour pijaku
Tout d'abord je m'excuse de n'avoir pu répondre plus tôt. D'une part je n'ai pas vu ta réponse car pas d'avertissement dans ma boîte mail et d'autre part parce que je suis pas mal occupé en ce moment. Je vais éplucher ce que tu m'as présenté et faire ce que tu m'as demandé. Merci
0