Problème comptage pions Puissance 4

Fermé
Dzani - Modifié le 19 avril 2017 à 19:18
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 21 avril 2017 à 21:53
Bonjour,

Je code un jeu de puissance 4 sur vba, il est presque fini mais j'ai un problème pour le comptage des pions afin de déterminer le vainqueur. En effet la macro détecte bien les 4 pions alignés à l'horizontal et à la vertical et en diagonal "descendante" (dernier pion joué le plus bas dans la grille) mais pas en diagonal "montante" et je ne comprend pas du tout pourquoi...
j'espère avoir été clair et merci par avance pour toute aide.
Je vous copie/colle la partie du code permettant de déterminer le vainqueur.

For Each Z_Cel In Range([C3], [I8])
    If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
       + Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
       + Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
       + Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
             
            MsgBox "Jaune vainqueur"
            Exit Sub
    End If
    If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
       + Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
       + Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
       + Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
            MsgBox "rouge vainqueur"
            Exit Sub
    End If
Next Z_Cel

EDIT : Ajout des BALISES DE CODE

A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 avril 2017 à 19:32
Bonjour,

Il te manque visiblement quelques combinaisons...
Regarde ce que ça donne :
Sub toto()
Dim z_cel As Range
For Each z_cel In Range([C3], [I8])

Debug.Print "cellule regardee :" & z_cel.Address
Debug.Print "---------------------------------"
Debug.Print z_cel.Offset(0, 1).Address
Debug.Print z_cel.Offset(0, 2).Address
Debug.Print z_cel.Offset(0, 3).Address

Debug.Print "---------------------------------"
Debug.Print z_cel.Offset(1, 0).Address
Debug.Print z_cel.Offset(2, 0).Address
Debug.Print z_cel.Offset(3, 0).Address

Debug.Print "---------------------------------"
Debug.Print z_cel.Offset(1, 1).Address
Debug.Print z_cel.Offset(2, 2).Address
Debug.Print z_cel.Offset(3, 3).Address

Debug.Print "---------------------------------"
Debug.Print z_cel.Offset(-1, 1).Address
Debug.Print z_cel.Offset(-2, 2).Address
Debug.Print z_cel.Offset(-3, 3).Address

Next
End Sub


0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 avril 2017 à 19:49
Essaye ça :
Function checkHoriz(rngorigine As Range) As Double
    checkHoriz = rngorigine.Interior.ColorIndex + rngorigine.Offset(0, 1).Interior.ColorIndex + rngorigine.Offset(0, 2).Interior.ColorIndex + rngorigine.Offset(0, 3).Interior.ColorIndex
End Function

Function checkVerti(rngorigine As Range) As Double
    checkVerti = rngorigine.Interior.ColorIndex + rngorigine.Offset(1, 0).Interior.ColorIndex + rngorigine.Offset(2, 0).Interior.ColorIndex + rngorigine.Offset(3, 0).Interior.ColorIndex
End Function

Function checkDiagBas(rngorigine As Range) As Double
    checkDiagBas = rngorigine.Interior.ColorIndex + rngorigine.Offset(1, 1).Interior.ColorIndex + rngorigine.Offset(2, 2).Interior.ColorIndex + rngorigine.Offset(3, 3).Interior.ColorIndex
End Function

Function checkDiagHaut(rngorigine As Range) As Double
    checkDiagHaut = rngorigine.Interior.ColorIndex + rngorigine.Offset(-1, 1).Interior.ColorIndex + rngorigine.Offset(-2, 2).Interior.ColorIndex + rngorigine.Offset(-3, 3).Interior.ColorIndex
End Function

Sub verif()
  Dim z_cel As Range
  Dim result As String
  'On Error Resume Next
  For Each z_cel In Range([C4], [I8])
    If checkHoriz(z_cel) = 24 Or checkVerti(z_cel) = 24 Or checkDiagBas(z_cel) = 24 Or checkDiagHaut(z_cel) = 24 Then
      result = "Jaune"
      Exit For
    ElseIf checkHoriz(z_cel) = 12 Or checkVerti(z_cel) = 12 Or checkDiagBas(z_cel) = 12 Or checkDiagHaut(z_cel) = 12 Then
      result = "Rouge"
      Exit For
    End If
  Next
  If result <> "" Then MsgBox result & " vainqueur !"
End Sub
0
Bonjour,

Merci pour ta réponse, j'ai essayé de l'inclure dans mon programme mais le problème est que cela ne met pas de message "X vainqueur" quand les 4 pions sont alignés, il faut clicker sur la forme à laquelle la macro est affectée pour obtenir le message"
De plus je ne comprends pas pourquoi je ne peux pas ajouter une ligne à mon code prenant en compte les cases (-x,x) (j'ai essayé ça me colore tout le "paragraphe" de code en jaune...)

je mets mon code en entier
Les macros ColX sont affectées à des flèches positionnées au dessus de chaque colonne.

Merci par avance





Sub Débuter()


Range("c11") = 0
Range("C3:C8,D3:D8,E3:E8,F3:F8,G3:G8,H3:H8,I3:I8").Interior.ColorIndex = 33

End Sub


Sub Prc_Col1()
Dim Z_Lig As Integer
Dim Z_Cel As Range

Range("C4").Select
Do While Selection.Interior.ColorIndex = 33
ActiveCell.Offset(1, 0).Select
Loop

Z_Lig = ActiveCell.Row
If Cells(Z_Lig - 1, 3).Interior.ColorIndex <> Cells(5, 13).Interior.ColorIndex And Cells(Z_Lig - 1, 3).Interior.ColorIndex <> Cells(6, 13).Interior.ColorIndex Then
If Range("c11") Mod 2 = 0 Then
Cells(Z_Lig - 1, 3).Interior.ColorIndex = Cells(5, 13).Interior.ColorIndex
Else
Cells(Z_Lig - 1, 3).Interior.ColorIndex = Cells(6, 13).Interior.ColorIndex
End If
Range("C11") = Range("C11") + 1
Else
MsgBox ("Colonne remplie")

End If

For Each Z_Cel In Range([C3], [I8])
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(-1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then

MsgBox "Jaune vainqueur"
Exit Sub
End If
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
MsgBox "rouge vainqueur"
Exit Sub
End If
Next Z_Cel


End Sub



Sub Prc_Col2()
Dim Z_Lig As Integer
Dim Z_Cel As Range

Range("D4").Select
Do While Selection.Interior.ColorIndex = 33
ActiveCell.Offset(1, 0).Select
Loop

Z_Lig = ActiveCell.Row

If Cells(Z_Lig - 1, 4).Interior.ColorIndex <> Cells(5, 13).Interior.ColorIndex And Cells(Z_Lig - 1, 4).Interior.ColorIndex <> Cells(6, 13).Interior.ColorIndex Then

If Range("c11") Mod 2 = 0 Then
Cells(Z_Lig - 1, 4).Interior.ColorIndex = Cells(5, 13).Interior.ColorIndex

Else
Cells(Z_Lig - 1, 4).Interior.ColorIndex = Cells(6, 13).Interior.ColorIndex

End If
Range("C11") = Range("C11") + 1
Else
MsgBox ("Colonne remplie")
End If
For Each Z_Cel In Range([C3], [I8])
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
MsgBox "Jaune vainqueur"
Exit Sub
End If
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
MsgBox "rouge vainqueur"
Exit Sub
End If
Next Z_Cel

End Sub


Sub Prc_Col3()
Dim Z_Lig As Integer
Dim Z_Cel As Range

Range("E4").Select
Do While Selection.Interior.ColorIndex = 33
ActiveCell.Offset(1, 0).Select
Loop

Z_Lig = ActiveCell.Row

If Cells(Z_Lig - 1, 5).Interior.ColorIndex <> Cells(5, 13).Interior.ColorIndex And Cells(Z_Lig - 1, 5).Interior.ColorIndex <> Cells(6, 13).Interior.ColorIndex Then

If Range("c11") Mod 2 = 0 Then
Cells(Z_Lig - 1, 5).Interior.ColorIndex = Cells(5, 13).Interior.ColorIndex

Else
Cells(Z_Lig - 1, 5).Interior.ColorIndex = Cells(6, 13).Interior.ColorIndex

End If
Range("C11") = Range("C11") + 1
Else
MsgBox ("Colonne remplie")
End If
For Each Z_Cel In Range([C3], [I8])
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
MsgBox "Jaune vainqueur"
Exit Sub
End If
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
MsgBox "rouge vainqueur"
Exit Sub
End If
Next Z_Cel

End Sub

Sub Prc_Col4()
Dim Z_Lig As Integer
Dim Z_Cel As Range

Range("F4").Select
Do While Selection.Interior.ColorIndex = 33
ActiveCell.Offset(1, 0).Select
Loop

Z_Lig = ActiveCell.Row

If Cells(Z_Lig - 1, 6).Interior.ColorIndex <> Cells(5, 13).Interior.ColorIndex And Cells(Z_Lig - 1, 6).Interior.ColorIndex <> Cells(6, 13).Interior.ColorIndex Then

If Range("c11") Mod 2 = 0 Then
Cells(Z_Lig - 1, 6).Interior.ColorIndex = Cells(5, 13).Interior.ColorIndex

Else
Cells(Z_Lig - 1, 6).Interior.ColorIndex = Cells(6, 13).Interior.ColorIndex

End If
Range("C11") = Range("C11") + 1
Else
MsgBox ("Colonne remplie")
End If
For Each Z_Cel In Range([C3], [I8])
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
MsgBox "Jaune vainqueur"
Exit Sub
End If
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
MsgBox "rouge vainqueur"
Exit Sub
End If
Next Z_Cel

End Sub


Sub Prc_Col5()
Dim Z_Lig As Integer
Dim Z_Cel As Range

Range("G4").Select
Do While Selection.Interior.ColorIndex = 33
ActiveCell.Offset(1, 0).Select
Loop

Z_Lig = ActiveCell.Row

If Cells(Z_Lig - 1, 7).Interior.ColorIndex <> Cells(5, 13).Interior.ColorIndex And Cells(Z_Lig - 1, 7).Interior.ColorIndex <> Cells(6, 13).Interior.ColorIndex Then

If Range("c11") Mod 2 = 0 Then
Cells(Z_Lig - 1, 7).Interior.ColorIndex = Cells(5, 13).Interior.ColorIndex

Else
Cells(Z_Lig - 1, 7).Interior.ColorIndex = Cells(6, 13).Interior.ColorIndex

End If
Range("C11") = Range("C11") + 1
Else
MsgBox ("Colonne remplie")
End If
For Each Z_Cel In Range([C3], [I8])
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
MsgBox "Jaune vainqueur"
Exit Sub
End If
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
MsgBox "rouge vainqueur"
Exit Sub
End If
Next Z_Cel


End Sub

Sub Prc_Col6()
Dim Z_Lig As Integer
Dim Z_Cel As Range

Range("H4").Select
Do While Selection.Interior.ColorIndex = 33
ActiveCell.Offset(1, 0).Select
Loop

Z_Lig = ActiveCell.Row

If Cells(Z_Lig - 1, 8).Interior.ColorIndex <> Cells(5, 13).Interior.ColorIndex And Cells(Z_Lig - 1, 8).Interior.ColorIndex <> Cells(6, 13).Interior.ColorIndex Then

If Range("c11") Mod 2 = 0 Then
Cells(Z_Lig - 1, 8).Interior.ColorIndex = Cells(5, 13).Interior.ColorIndex

Else
Cells(Z_Lig - 1, 8).Interior.ColorIndex = Cells(6, 13).Interior.ColorIndex

End If
Range("C11") = Range("C11") + 1
Else
MsgBox ("Colonne remplie")
End If
For Each Z_Cel In Range([C3], [I8])
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
MsgBox "Jaune vainqueur"
Exit Sub
End If
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
MsgBox "rouge vainqueur"
Exit Sub
End If
Next Z_Cel


End Sub

Sub Prc_Col7()
Dim Z_Lig As Integer
Dim Z_Cel As Range

Range("I4").Select
Do While Selection.Interior.ColorIndex = 33
ActiveCell.Offset(1, 0).Select
Loop

Z_Lig = ActiveCell.Row

If Cells(Z_Lig - 1, 9).Interior.ColorIndex <> Cells(5, 13).Interior.ColorIndex And Cells(Z_Lig - 1, 9).Interior.ColorIndex <> Cells(6, 13).Interior.ColorIndex Then

If Range("c11") Mod 2 = 0 Then
Cells(Z_Lig - 1, 9).Interior.ColorIndex = Cells(5, 13).Interior.ColorIndex

Else
Cells(Z_Lig - 1, 9).Interior.ColorIndex = Cells(6, 13).Interior.ColorIndex

End If
Range("C11") = Range("C11") + 1
Else
MsgBox ("Colonne remplie")
End If
For Each Z_Cel In Range([C3], [I8])
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
MsgBox "Jaune vainqueur"

Exit Sub
End If
If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
+ Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
+ Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
+ Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
MsgBox "rouge vainqueur"
Exit Sub
End If
Next Z_Cel


End Sub

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
21 avril 2017 à 17:39
Tu utilises plusieurs fois le même bout de code que tu répètes à plusieurs endroits...
moi je te l'ai découpé en fonctions ...


Il suffit d'appeller la sub verif() dans tes différentes sub Prc_Col pour savoir si il y a un vainqueur ou non... partout ou toi tu as écrit tes
For Each Z_Cel In Range([C3], [I8])
    If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
       + Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 24 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
       + Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 24 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
       + Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 24 Then
            MsgBox "Jaune vainqueur"
   
            Exit Sub
    End If
    If Z_Cel.Interior.ColorIndex + Z_Cel.Offset(0, 1).Interior.ColorIndex _
       + Z_Cel.Offset(0, 2).Interior.ColorIndex + Z_Cel.Offset(0, 3).Interior.ColorIndex = 12 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 0).Interior.ColorIndex _
       + Z_Cel.Offset(2, 0).Interior.ColorIndex + Z_Cel.Offset(3, 0).Interior.ColorIndex = 12 Or _
       Z_Cel.Interior.ColorIndex + Z_Cel.Offset(1, 1).Interior.ColorIndex _
       + Z_Cel.Offset(2, 2).Interior.ColorIndex + Z_Cel.Offset(3, 3).Interior.ColorIndex = 12 Then
            MsgBox "rouge vainqueur"
            Exit Sub
    End If
Next Z_Cel


il suffit de remplacer par :
call verif
0
Super merci !
par contre je ne comprends pas pourquoi il faut, dans la macro verif, mettre de C4 à I8 alors que mon tableau va de C3 à I8 car du coup cela ne marche pas si les 4 pions sont alignés dans la derniere ligne du tableau, mais si je corrige la fonction qui verifie les diagonales montantes ne marche pas (Surlignée en jaune)

Merci !
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
21 avril 2017 à 21:53
Par ce que quand j'ai fait mes essais j'ai pas pris la meme plage... tu la changes et c est bon
0