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!