Explication code VBA

Résolu/Fermé
snakyball Messages postés 7 Date d'inscription jeudi 14 novembre 2013 Statut Membre Dernière intervention 8 janvier 2014 - Modifié par snakyball le 8/01/2014 à 10:25
snakyball Messages postés 7 Date d'inscription jeudi 14 novembre 2013 Statut Membre Dernière intervention 8 janvier 2014 - 8 janv. 2014 à 14:40
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
A voir également:

2 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 257
Modifié par eriiic le 8/01/2014 à 10:51
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
snakyball Messages postés 7 Date d'inscription jeudi 14 novembre 2013 Statut Membre Dernière intervention 8 janvier 2014
8 janv. 2014 à 14:40
Et bien, merci pour cette réponse ! Nous allons désormais essayer de bien comprendre, mais c'est déjà plus clair !
0