kelk1 Fou/Folle
Age : 29 Niveau de folie : 4389 Messages : 307 Lieu : à la taverne !!
| Sujet: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 16:38 | |
| Bonjour, je viens ici car je sais pas trop où aller ^^' j'ai un programme vba à réaliser et j'ai comme qui dirait un pitit problème ^^' si quelqu'un peut m'aider à le résoudre :/ J'explique mon travail : il s'agit de réaliser une sorte de démineur sur excel. A la différence du démineur classique, ici, on part de la case en haut a gauche de la grille pour tenter d'aller en bas a droite de la grille, on ne peut se deplacer que d'une case à la fois. Afin que le programme attende l'action du changement de case j'ai vu sur internet qu'on pouvait mettre un Doevents. Je ne sais cependant pas à quoi ça sert (enfin comment ça marche :/) je vous montre mon programme : (il y a surement beaucoup plus simple et je pense qu'il y a des lignes en trop mais a force de le refaire j'ai peut etre des trucs qui servent à rien) il y a la macro de départ qui met en place le jeu (cadre, fond, ...) il appelle cette macro : - Code:
-
Sub Etude_Cellule(L As Integer, C As Integer, X As Integer, Y As Integer, Mine As Integer, message As String) Cells(L, C).Activate Cells(L, C).Interior.ColorIndex = 2 Call M_MineAlentour.mine_alentour(L, C, Mine, message) Call M_CoordonnéeCellules.Coordonnée_Cellules(X, Y) While X = L And Y = C Call Coordonnée_Cellules(X, Y) If message = "Perdu" Then X = -1 Y = -1 End If If X = 12 And Y = 12 Then L = -1 C = -1 End If DoEvents Wend Call M_CoordonnéeCellules.Coordonnée_Cellules(X, Y) L = X C = Y If L = 12 And C = 12 Then Call M_MineAlentour.mine_alentour(L, C, Mine, message) If message <> "Perdu" Then MsgBox "Gagné" message = "Gagné" End If End If End Sub
Ce Doevents me permets d'activer une autre macro (par des boutons placés sur la feuille excel) - Code:
-
Sub Bouton_Bas() Dim X As Integer Dim Y As Integer Dim L As Integer Dim C As Integer Dim Mine As Integer Dim message As String Call M_CoordonnéeCellules.Coordonnée_Cellules(X, Y) Cells(X + 1, Y).Select L = X + 1 C = Y Call M_EtudeCellule.Etude_Cellule(L, C, X, Y, Mine, message) End Sub Je vois que le doevents arrete la macro etude de cellule, ce qui me laisse le loisir d'activer par exemple la macro bouton bas, cependant a la fin de l'execution de bouton il reviens sur la macro etude de cellule, cependant les variables ont changer de valeur. du coup lorsque j'ai gagné (voir perdu mais c'est moins grave) il me mets en boucle le message "gagné" ... puisqu'il retourne toujours dans la boucle alors que je veut qu'il finnisse le programme. je vous mets egalement les 2 macro qui sont appelées : - Code:
-
Sub mine_alentour(L As Integer, C As Integer, Mine As Integer, message As String) Mine = 0 If Cells(L, C).Value = "X" Then MsgBox "Perdu" message = "Perdu" Range("C3:L12").Interior.ColorIndex = 2 Else If Cells(L - 1, C - 1).Value = "X" Then Mine = 1 + Mine End If If Cells(L - 1, C).Value = "X" Then Mine = 1 + Mine End If If Cells(L - 1, C + 1).Value = "X" Then Mine = 1 + Mine End If If Cells(L, C - 1).Value = "X" Then Mine = 1 + Mine End If If Cells(L + 1, C + 1).Value = "X" Then Mine = 1 + Mine End If If Cells(L, C + 1).Value = "X" Then Mine = 1 + Mine End If If Cells(L + 1, C - 1).Value = "X" Then Mine = 1 + Mine End If If Cells(L + 1, C).Value = "X" Then Mine = 1 + Mine End If Cells(L, C).Value = Mine Cells(L, C).Font.ColorIndex = 5 If Mine = 0 Then Cells(L, C).Value = "" End If End If End Sub - Code:
-
Sub Coordonnée_Cellules(X As Integer, Y As Integer) Y = ActiveCell.Column X = ActiveCell.Row End Sub si quelqu'un pouvait m'en apprendre plus sur le Doevents et pourquoi il me ramène toujours dans ma boucle ... voir si possible me dire comment resoudre ce problème ... Merci beaucoup !! |
|
Circé Snow Queen
Age : 46 Niveau de folie : 11464 Messages : 3064 Lieu : In the Cold
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 17:35 | |
| Si j'avais excel je me serais amusée à essayer de comprendre tout ça... mais j'ai pas excel :/ Désolée de pas pouvoir aider :/ Y'a pas de forums spécialisés qui parlent d'excel, tu trouverais sans doute ton bonheur sur certains d'entre eux. |
|
Invité Invité
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 17:37 | |
| je n'y connais rien en vba ^^ mais j'ai des notions en code et c'est toujours la même logique bref tout ça pour dire que je ne suis pas sur à 100% ^^ tout d'abord: dans ton code principal, il y a un if (à la fin) et ton while qui ne sont pas fermés, est ce normal? édit: j'ai rien dit ton while est bien fermé mais il manque quand même un "end if " à la fin es tu sur d'appeler ton Doevents au bon endroit? je vais plus me pencher dessus, j'comprend pas tout pour le moment ^^ édit: tu appelles ton Doevents dans ton while, du coup si tu ne sors pas du while c'est que tu correspond toujours aux critères (X = L And Y = C) pour que tu sortes de cette boucle il faudrait que tu rajoutes dans ton Doevents une ligne qui ferait que X soit différent de L ou que Y soit différent de C |
|
kelk1 Fou/Folle
Age : 29 Niveau de folie : 4389 Messages : 307 Lieu : à la taverne !!
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 18:00 | |
| grace à ce que tu m'a dis j'ai compris qu'en réalité je n'avais plus besoin de ma boucle while ^^' ! du coup ça marche bien je n'ai plus le message gagné a l'infini ^^ cependant desormais j'ai comme un clignotement perpetuel de la feuille excel puisque il attend/cherche fin fait quelque chose ^^ de plus j'ai 2 fois le message perdu ou le message gagné mais bon ... ça je peux m'en débrouiller je pense :/ |
|
Invité Invité
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 18:06 | |
| tant mieux si j'ai réussi à t'aider un peu ^^ (même si je comprend toujours pratiquement rien à ton code ) - Kelk1 a écrit:
- j'ai comme un clignotement perpetuel de la feuille excel puisque il attend/cherche fin fait quelque chose ^^
il attend peut être que tu fermes ton if à la fin ^^ |
|
kelk1 Fou/Folle
Age : 29 Niveau de folie : 4389 Messages : 307 Lieu : à la taverne !!
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 19:32 | |
| C'est bon j'ai résolu le problème et par la meme occasion j'ai fini mon démineur |
|
Invité Invité
| |
kelk1 Fou/Folle
Age : 29 Niveau de folie : 4389 Messages : 307 Lieu : à la taverne !!
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 19:43 | |
| merci a vous pour votre aide eh oui je te vouvoie et les modadmines peuvent fermer ce sujet ... |
|
Invité Invité
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA Mer 24 Avr 2013 - 19:48 | |
| je t'ai pas vraiment aidé ^^ c'est toi qui a compris ton erreur tout seul si tu continues à me vouvoyer je te tronçonne en deux |
|
Contenu sponsorisé
| Sujet: Re: [Résolu][Aide Informatique] Programme VBA | |
| |
|