Explication code VBA
Résolu
snakyball
Messages postés
8
Statut
Membre
-
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.
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.
Auriez vous des pistes car nous avons réussi à +/- tout expliquer mais pas cette dernière "macro".
Merci par avance
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
-
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 -
Et bien, merci pour cette réponse ! Nous allons désormais essayer de bien comprendre, mais c'est déjà plus clair !