Problème comptage pions Puissance 4

Dzani -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
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

3 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  2. dzani
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  3. dzani
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Par ce que quand j'ai fait mes essais j'ai pas pris la meme plage... tu la changes et c est bon
      0