Explication code VBA

Résolu
Bonjour,

Nous avons un projet qui est de traduire les codes VBA, nous sommes en Master Finance compta et donc ce n'est pas vraiment notre point fort.

Nous avions comme mission de traduire un jeu de mémory, mais nous avons du mal sur plusieurs parties du codes.

Nous ne comprenons pas l'appel de la fonction, et surtout a quoi elle sert
réellement ci dessous.

Function InRange(ByVal Range1 As Range, ByVal Range2 As Range) As Boolean
Dim InterSectRange As Range
Set InterSectRange = Application.Intersect(Range1, Range2)
InRange = Not InterSectRange Is Nothing
Set InterSectRange = Nothing
End Function

De plus ici nous faisons appel à la fonction précédente et on ne comprend pas réellement où est la ligne correspondant au fait que l'on perd ou non la partie.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If jeu = 1 Then
If InRange(Target, grille) Then
If memoriser_grille(Target.Row - Range("top").Row, Target.Column - Range("top").Column) = 1 Then
Target.Interior.ColorIndex = 10
'colorier la cellule indiquer
temp_count = 0
For i = 0 To taille
For j = 0 To taille
If (grille.Cells(i + 1, j + 1).Interior.ColorIndex = 10) Then temp_count = temp_count + 1
Next j
Next i
If temp_count = coloriage_cellule Then
jeu = 0
user_response = MsgBox("Vous avez gagné !!! " & vbCrLf & "Voulez vous rejouer une autre partie ?", vbYesNo + vbQuestion)
grille.Interior.ColorIndex = 2
Select Case user_response
Case vbYes
generer
Case vbNo

End Select
End If
Else
For i = 0 To taille
For j = 0 To taille
grille.Cells(i + 1, j + 1).Interior.ColorIndex = 2
If memoriser_grille(i, j) = 1 Then grille.Cells(i + 1, j + 1).Interior.ColorIndex = 10
Next j
Next i
jeu = 0
user_response = MsgBox("vous avez perdu !!!" & vbCrLf & "Voulez vous rejouer ?", vbYesNo + vbQuestion)
grille.Interior.ColorIndex = 2
'remettre la grille en blanc
Select Case user_response
Case vbYes
generer
Case vbNo
End Select
End If
End If
End If
End Sub

Auriez vous des pistes car nous avons réussi à +/- tout expliquer mais pas cette dernière "macro".

Merci par avance

2 réponses

  1. Et bien, merci pour cette réponse ! Nous allons désormais essayer de bien comprendre, mais c'est déjà plus clair !
    0
    1. Contributeur
      Bonjour,

      La Function InRange() te retourne True si tu as une intersection entre les 2 plages fournies, False Sinon.

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      ...
      If InRange(Target, grille) Then

      Si l'utilisateur a cliqué dans la grille on traite, sinon endif et fin de procédure (on quitte sans rien faire)

      Gagné-perdu.
      Il faut indenter correctement le code pour pouvoir le lire et mieux le comprendre.
      If memoriser_grille(Target.Row - Range("top").Row, Target.Column - Range("top").Column) = 1 Then
          'gagné
      else
          'perdu
      endif


      eric

      PS: version correctement indentée :
      Option Explicit
      
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Target.Cells.Count > 1 Then Exit Sub
          If jeu = 1 Then
              If InRange(Target, grille) Then
                  If memoriser_grille(Target.Row - Range("top").Row, Target.Column - Range("top").Column) = 1 Then
                      Target.Interior.ColorIndex = 10
                      'colorier la cellule indiquer
                      temp_count = 0
                      For i = 0 To taille
                          For j = 0 To taille
                              If (grille.Cells(i + 1, j + 1).Interior.ColorIndex = 10) Then temp_count = temp_count + 1
                          Next j
                      Next i
                      If temp_count = coloriage_cellule Then
                          jeu = 0
                          user_response = MsgBox("Vous avez gagné !!! " & vbCrLf & "Voulez vous rejouer une autre partie ?", vbYesNo + vbQuestion)
                          grille.Interior.ColorIndex = 2
                          Select Case user_response
                          Case vbYes
                              generer
                          Case vbNo
      
                          End Select
                      End If
                  Else
                      For i = 0 To taille
                          For j = 0 To taille
                              grille.Cells(i + 1, j + 1).Interior.ColorIndex = 2
                              If memoriser_grille(i, j) = 1 Then grille.Cells(i + 1, j + 1).Interior.ColorIndex = 10
                          Next j
                      Next i
                      jeu = 0
                      user_response = MsgBox("vous avez perdu !!!" & vbCrLf & "Voulez vous rejouer ?", vbYesNo + vbQuestion)
                      grille.Interior.ColorIndex = 2
                      'remettre la grille en blanc
                      Select Case user_response
                      Case vbYes
                          generer
                      Case vbNo
                      End Select
                  End If
              End If
          End If
      End Sub


      En plus du merci (si si, ça se fait !!!), penser à mettre en résolu lorsque c'est le cas (en haut vers votre titre).
      Merci
      1