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
A voir également:
- Explication code VBA
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Scanner qr code pc - Guide
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.
eric
PS: version correctement indentée :
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
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