DEMINEUR SOUS EXCEL

Messages postés
291
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
13 mars 2015
- - Dernière réponse : klaston
Messages postés
1
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
19 août 2011
- 19 août 2011 à 10:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52860-demineur-sous-excel

Afficher la suite 
jjDai
Messages postés
291
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
13 mars 2015
-
Bonjour
Quelques remarques en vrac
------------------------------------------------------------------
Masquer les autre feuilles serait un +
feuil2.Visible=xlSheetVeryHidden
feuil3.Visible=xlSheetVeryHidden

------------------------------------------------------------------
renommer "feuil2" dans l'interface en "shJeu" par exemple permet
d'utiliser directement shJeu comme ojet feuille
shjeu.cells(1.1)= 99
c'est plus pratique que
Worksheets("JEU").cells(1.1)= 99

Il est possible de saisir des caractères dans les cellules, et surtout dans les cellules externes à la zone;
L'utilisation de la protection des cellules pourrait être mise à profit.
voir la restriction de la zone d'utilisation et la suppression des barres de défilement.

------------------------------------------------------------------
Pour effacer une zone il y a plus efficace qu'une double boucle:
Worksheets("MINES").Range("A1:Z50").ClearContents
ou
feuil2.Range("A1:Z50").ClearContents

------------------------------------------------------------------
quand un autre classeur est ouvert, impossible de basculer dessus.

--------------------------------------------------------------------

Pour le timer, une boucle sans fin n'est pas une bonne idée
l"utilisation de onTime est plus approprié
exemple

Sub testTimer()
Static h As Long

Application.OnTime Now + TimeValue("00:00:01"), "testTimer"
h = h + 1
Debug.Print "action-" & h
End Sub

L'exécution de cette fonction affichera le compteur h dans la fenêtre d'exécution toutes les seconde
Ça évite l'utilisation de doevents, et il n'y a pas de calcul de temps a faire.

ce qui pourrait être adapté comme ça pour le miner

Sub DemarrerTemps_start()
dateDebut = Now
Application.OnTime Now + TimeValue("00:00:01"), "DemarrerTemps"
TimerEnabled = True
End Sub

Sub DemarrerTemps()

Tps_Str = Format(Now - dateDebut, "mm:ss")
Worksheets("JEU").Shapes(4).TextFrame.Characters.Text = Tps_Str
End If
If TimerEnabled Then
Application.OnTime Now + TimeValue("00:00:01"), "DemarrerTemps"
End If
End Sub

--------------------------------------------------------------------
L'ajout de "Option Explicit" au début de chaque module permet de s'assurer que toutes les variable sont déclarées

--------------------------------------------------------------------
Y a pas mal de petites choses à améliorer, mais c'est un bon début
JJDAI
cs_ShayW
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46 -
Salut
ajoute une petite aide
comment je marque une mine ?
Si je marche sur une mine le jeu s'arretent alors dévoile toutes les mines
bonne prog
medjahedScript
Messages postés
14
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
7 mars 2011
-
Bon programmation
rtoukkys
Messages postés
11
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
23 mai 2011
-
JJDAI> Merci pour toutes tes remarques. Dès que j'aurai le temps, je ferai les rectification et l'amélioration du code.
SHAYW> Marquer la mine... J'y ai pensé aussi mais pas j'ai pas pu trouver comment gérer le Clic-droit de la souris. Pour montrer toutes les mines, ce n'est pas difficile à intégrer dans le code, ... dans la prochaine mise à jour peut-être. Sinon, je te remercie aussi!
medjahedScript> Merci pour le compliment
rtoukkys
Messages postés
11
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
23 mai 2011
-
JJDAI>Mmmmh, j'ai pas su qu'il y a l'évènement OnTime avec l'objet Application... C'est plus pratique, merci!
cs_ShayW
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46 -
Comme on dit "la critique est aisée mais l'art est difficile"
je suis sur qu'on peut gerer le "right click"
demande au forum (moi et vba on s'entend pas lol)
et aussi tu n'indiques pas combien de mines il faut déminer
je compare avec le demineur du windows
Bonne prog
jjDai
Messages postés
291
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
13 mars 2015
-
Bonjour
Le right click en vba c'est "Worksheet_BeforeRightClick"
dans l'objet feuille.
JJDAI
rtoukkys
Messages postés
11
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
23 mai 2011
-
Merci! J'ai pas remarqué! VBA, c'est nouveau pour moi, c'est la deuxième fois que j'ai fait quelque chose sur VBA! Merci tout le monde!
klaston
Messages postés
1
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
19 août 2011
-
quand tu fais un démineur personnalisé avec par exemple 40x40 pour 1700 mines (ce qui est volontaire) le jeu plante.
Une condition n'aurait pas été de trop sur le clic "nouveau jeu" pour eviter un ramage infini d'excel