Explication code VBA

Résolu
snakyball Messages postés 8 Statut Membre -  
snakyball Messages postés 8 Statut Membre -
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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. snakyball Messages postés 8 Statut Membre
     
    Et bien, merci pour cette réponse ! Nous allons désormais essayer de bien comprendre, mais c'est déjà plus clair !
    0