Je bloque sérieusement sur un problème, j'ai beau chercher une solution, au bout d'un moment cella ne fonctionne pas

Voilà mon histoire:
J'ai une image ou est dessiner un tableau ou chaque cellule fais 7 / 7 en interne sans compter les borts car les cellules se touchent
Quand je clique sur mon image, la cellule cliquer deviens rouge (Je redessine l'image en remplissant la cellule de rouge), s'il a déjà une cellule sélectionné, je la remplie de blanc, bref
Je voudrais calculer dans quel cellule c'est produit le clique en X et en Y égale à mon tableau mais j'y arrive pas !
C'est surement tout bête comme solution mais je coince

Quand je clique, je renvoie la position du clique en X et en Y dans cette image, il faut alors convertir ça en X et Y de la cellule cliquer = à mon tableau
Je sais pas comment expliquer

Le mieux est de vous passer le code, même s'il est long, vous pourrez le tester par vous même et vous rendre compte de mon problème
Vous verrez que quand je clique sur l'image, la cellule deviens rouge et la position de la cellule par un calcule est renvoyer.
ça fonctionne pendent un moment mais au bout d'un moment ça ne fonctionne plus à cause de l'arrondis je suppose car des fois
suivent ou on clique dans la cellule, des résultats différents peuvent apparaitre !
J’espère que vous pourrez m'aider, le code n'est pas fini

Code : Tout sélectionner
Procedure.l IsMouseOverGadget(Gadget)
Protected.i SourisPosX, SourisPosY, GadgetPosX, GadgetPosY, GadgetLargeur, GadgetHauteur, FenetreActive
FenetreActive = GetActiveWindow()
If IsWindow(FenetreActive)
GadgetPosX = GadgetX(gadget,#PB_Gadget_WindowCoordinate)
GadgetPosY = GadgetY(gadget,#PB_Gadget_WindowCoordinate)
GadgetLargeur = GadgetWidth(gadget)
GadgetHauteur = GadgetHeight(gadget)
SourisPosX = WindowMouseX(FenetreActive)
SourisPosY = WindowMouseY(FenetreActive)
Else
ProcedureReturn #False
EndIf
If SourisPosX < GadgetPosX
ProcedureReturn #False
EndIf
If SourisPosX >= (GadgetPosX+GadgetLargeur)
ProcedureReturn #False
EndIf
If SourisPosY < GadgetPosY
ProcedureReturn #False
EndIf
If SourisPosY >= (GadgetPosY+GadgetHauteur)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Procedure RoundStep(Nombre.i, Pas.i)
Protected Retour.i
Retour = (Nombre / Pas) * Pas
If Nombre % Pas > Pas / 2
Retour + Pas
EndIf
ProcedureReturn Retour
EndProcedure
Procedure.s CalculePositionCellule(CliqueX, CliqueY)
ClearDebugOutput()
Debug "X = " + Str(CliqueX)
Debug "Y = " + Str(CliqueY)
Debug "----------"
CliqueX = CliqueX - 1
CliqueY = CliqueY - 1
Debug "----------"
Debug Str(CliqueX + 1) + " - 1 = " + Str(CliqueX)
Debug Str(CliqueY + 1) + " - 1 = " + Str(CliqueY)
OpperationX1 = Int(CliqueX / 7)
OpperationY1 = Int(CliqueY / 7)
Debug "----------"
Debug Str(CliqueX) + " / 7 = " + Str(OpperationX1)
Debug Str(CliqueY) + " / 7 = " + Str(OpperationY1)
OpperationX2 = CliqueX - OpperationX1
OpperationY2 = CliqueY - OpperationY1
Debug "----------"
Debug Str(CliqueX) + " - " + Str(OpperationX1) + " = " + Str(OpperationX2)
Debug Str(CliqueY) + " - " + Str(OpperationY1) + " = " + Str(OpperationY2)
OpperationX3 = Int(OpperationX2 / 7)
OpperationY3 = Int(OpperationY2 / 7)
Debug "----------"
Debug Str(OpperationX2) + " / 7 = " + Str(OpperationX3)
Debug Str(OpperationY2) + " / 7 = " + Str(OpperationY3)
If OpperationX3 < 0
OpperationX3 = 0
EndIf
If OpperationY3 < 0
OpperationY3 = 0
EndIf
Debug "----------"
Debug "Résultat finale X = " + Str(OpperationX3)
Debug "Résultat finale Y = " + Str(OpperationY3)
Debug "----------"
If CliqueX => 0 And CliqueY => 0
Else
ProcedureReturn "Aucune"
EndIf
ProcedureReturn ""
EndProcedure
; Procédure pour dessiner un tableau
Procedure.l DessinerTableau(Array Tableau.l(2))
Fenetre = OpenWindow(#PB_Any, 0, 0, 794, 616, "Aperçus du Tableau", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
WindowBounds(Fenetre, 253, 201, 9999, 9999)
SmartWindowRefresh(Fenetre, 1)
MenuSysteme = CreatePopupImageMenu(#PB_Any, #PB_Menu_ModernLook)
MenuItem(1, "Ouvrir" +Chr(9)+"Ctrl+O")
MenuItem(2, "Enregistrer" +Chr(9)+"Ctrl+S")
MenuItem(3, "Enregistrer sous"+Chr(9)+"Ctrl+R")
MenuItem(4, "Fermer" +Chr(9)+"Ctrl+F")
PanelGadget = PanelGadget(#PB_Any, 1, 1, 794, 615)
AddGadgetItem(PanelGadget, 1, "Valeur Celule", 0, 0)
TextGadgetInformationValeurCelule = TextGadget(#PB_Any, 5, 5, 100, 15, "X: 0, Y: 0, T: 0")
AddGadgetItem(PanelGadget, 0, "Tableau", 0, 0)
SetGadgetState(PanelGadget, 0)
ScrollAreaGadget = ScrollAreaGadget(#PB_Any, 0, 0, GadgetWidth(PanelGadget) - 8, GadgetHeight(PanelGadget) - 27, 8162, 8162, 10, #PB_ScrollArea_Flat)
ImageGadget = ImageGadget(#PB_Any, 0, 0, 8162, 8162, 0)
CloseGadgetList()
ImageTableau = CreateImage(#PB_Any, 8162, 8162, 24, RGB(255, 255, 255))
; Création des celules du tableau en les dessinant sur l'image
StartDrawing(ImageOutput(ImageTableau))
DrawingMode(#PB_2DDrawing_Outlined)
For X = 0 To ArraySize(Tableau.l(), 1)
For Y = 0 To ArraySize(Tableau.l(), 2)
Box(X * 8 + 1, Y * 8 + 1, 9, 9, RGB(200, 200, 200))
Next
Next
StopDrawing()
SetGadgetState(ImageGadget, ImageID(ImageTableau))
Repeat
Event = WaitWindowEvent()
If IsMouseOverGadget(ImageGadget) And Event = 516
InterupteurCliqueDroitImageGadget = 1
ElseIf IsMouseOverGadget(ImageGadget) And (Event = 517 And InterupteurCliqueDroitImageGadget = 1)
InterupteurCliqueDroitImageGadget = 0
DisplayPopupMenu(MenuSysteme, WindowID(Fenetre))
ElseIf Not IsMouseOverGadget(ImageGadget) And (Event = 517 And InterupteurCliqueDroitImageGadget = 1)
InterupteurCliqueDroitImageGadget = 0
EndIf
If IsMouseOverGadget(ImageGadget) And Event = 513
InterupteurCliqueGaucheImageGadget = 1
SauvegardeCliqueX = WindowMouseX(Fenetre) - 5 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_X)
SauvegardeCliqueY = WindowMouseY(Fenetre) - 25 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_Y)
ElseIf IsMouseOverGadget(ImageGadget) And (Event = 514 And InterupteurCliqueGaucheImageGadget = 1)
InterupteurCliqueGaucheImageGadget = 0
CliqueX = WindowMouseX(Fenetre) - 5 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_X)
CliqueY = WindowMouseY(Fenetre) - 25 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_Y)
If (CliqueX > 1 And CliqueY > 1) And (CliqueX = SauvegardeCliqueX And CliqueY = SauvegardeCliqueY)
StartDrawing(ImageOutput(ImageTableau))
CouleurClique = Point(CliqueX,CliqueY)
StopDrawing()
If CouleurClique <> RGB(200, 200, 200)
SauvegardePrecedentClique$ = Str(CliqueX) + ", " + Str(CliqueY)
If IsImage(ImageTableauCopie)
FreeImage(ImageTableauCopie)
EndIf
ImageTableauCopie = CopyImage(ImageTableau, #PB_Any)
StartDrawing(ImageOutput(ImageTableauCopie))
FillArea(Val(StringField(SauvegardePrecedentClique$, 1, ", ")), Val(StringField(SauvegardePrecedentClique$, 2, ", ")), -1, RGB(255, 255, 255))
FillArea(CliqueX, CliqueY, -1, RGB(255, 0, 0))
StopDrawing()
SetGadgetState(ImageGadget, ImageID(ImageTableauCopie))
SetGadgetText(TextGadgetInformationValeurCelule, CalculePositionCellule(CliqueX, CliqueY) + ", T: " + Str(TableauTaille))
EndIf
EndIf
ElseIf Not IsMouseOverGadget(ImageGadget) And (Event = 514 And InterupteurCliqueGaucheImageGadget = 1)
InterupteurCliqueGaucheImageGadget = 0
EndIf
Select Event
Case 512 ; Déplacement de la souris sur la fenêtre
If IsMouseOverGadget(ImageGadget)
EndIf
Case 161
If IsImage(ImageTableauCopie)
SetGadgetState(ImageGadget, ImageID(ImageTableauCopie))
SetGadgetText(TextGadgetInformationValeurCelule, CalculePositionCellule(CliqueX, CliqueY) + ", T: " + Str(TableauTaille))
Else
If IsImage(IsImage(ImageTableau))
SetGadgetState(ImageGadget, ImageID(ImageTableau))
SetGadgetText(TextGadgetInformationValeurCelule, "X: 0, Y: 0, T: 0")
EndIf
EndIf
Case 513 ; Bouton gauche appuiler avec la souris sur la fenêtre
Case 514 ; Bouton gauche relacher avec la souris sur la fenêtre
Case 515 ; Double clique gauche avec la souris sur la fenêtre
Case 516 ; Bouton droit appuiler avec la souris sur la fenêtre
Case 517 ; Bouton droit relacher avec la souris sur la fenêtre
Case 518 ; Double clique droit avec la souris sur la fenêtre
Case #PB_Event_Gadget
Select EventGadget()
Case 1
EndSelect
Case #PB_Event_SizeWindow
ResizeGadget(PanelGadget, #PB_Ignore, #PB_Ignore, WindowWidth(Fenetre), WindowHeight(Fenetre) - 1)
ResizeGadget(ScrollAreaGadget, #PB_Ignore, #PB_Ignore, GadgetWidth(PanelGadget) - 8, GadgetHeight(PanelGadget) - 27)
If IsImage(ImageTableauCopie)
SetGadgetState(ImageGadget, ImageID(ImageTableauCopie))
SetGadgetText(TextGadgetInformationValeurCelule, CalculePositionCellule(CliqueX, CliqueY) + ", T: " + Str(TableauTaille))
Else
If IsImage(IsImage(ImageTableau))
SetGadgetState(ImageGadget, ImageID(ImageTableau))
SetGadgetText(TextGadgetInformationValeurCelule, "X: 0, Y: 0, T: 0")
EndIf
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
EndProcedure
; Mini = 85, 65
; Maxi = 1019, 1019
Dim MonTableau.l(1019, 1019)
DessinerTableau(MonTableau.l())