Comme tu l'évoque, il faut utiliser la récursivité (une fonction ou une routine qui s'appelle elle-même).
Ecrit une fonction dans laquelle :
Le principe est de tester la case cliquer (est-ce que elle est vide et que l'on peut l'effacer). Et ensuite tu teste toutes les cases a côté (soit 8), et si un de ces 8 tests est positif, tu rapelle la fonction (alors que tu est déjà dans ta fonction).
Cette fonction ce déclenchera donc un nombre de fois plus ou moins important, et ainsi tu sera certain de passer en revue toutes les cases.
Voici une possibilité :
Attention le code découle aussi de la manière dont tu gère les choses. Moi j'avais des controles bouton groupé qui faisaient les cases. J'avais donc une fonction me permettant de passer du numéro d'index d'un bouton a des coordonnées x et y (CoordonnéesCaseJ), et une fonction inverse NoCaseJ. Xmap et Ymap sont les bords du jeu. IndiceY et IndiceX sont des variables me permettant de calculer en coordonnées les 8 cases adjacente d'une case (IndiceY(0)=0, IndiceX(0)=1,IndiceY(1)=1,IndiceX(1)=0,IndiceY(2)=0,IndiceX(2)=-1,...)
Private Sub Gangrène(No As Integer) ' procédure récurcive
' algo effacant ttes les cases vide conjointe lorsque le joueur
' clique sur l'une d'entre elles
Dim Cycle3 As Integer ' for
Dim t(1) As Integer ' contient les coordonnées 0=>y, 0=>x
Dim DécalageCaseTampon As Integer ' tampon contenant successivement les no des 4 cases cardinale adjacente a celle en cours d'analyse
For Cycle3 = 0 To 7
t() = CoordonnéesCaseJ(No, Xmap, Ymap) ' converti le no de case en coordonnées
t(0) = t(0) + IndiceY(Cycle3) ' coordonnées case adjacente en y
t(1) = t(1) + IndiceX(Cycle3) ' coordonnées case adjacente en x
DécalageCaseTampon = NoCaseJ(t(1), t(0), Xmap, Ymap) ' converti les coordonnées en n° de case
If DécalageCaseTampon <> -1 Then ' on est pas en dehors de la map
If ValeurCase(DécalageCaseTampon) = 0 And CaseJ(DécalageCaseTampon).Visible <> False Then ' une autre case conjointe est vide (sauf si c'est une case déjà effacé)
If Cycle3 <= 3 Then ' seulement les 4 coordonnées cardinales pour effacer les cases
CaseJ(DécalageCaseTampon).Visible = False ' rendre invisible le bouton
Call Gangrène(DécalageCaseTampon) ' appel récursif de la procédure
End If
Else
CaseJ(DécalageCaseTampon).Caption = ValeurCase(DécalageCaseTampon) ' affiche les chiffres dans les cases conjointes aux cases vides
End If
End If
Next Cycle3
End Sub
Bon courage !