question bouton et click

D

dIDIER 2

Guest
bonjour le forum

Voila mon prblms
J'ai un classeur nomé "planning" et sur une des feuilles de ce classeur,
J'ai un bouton (non pas sur le nez !!!),qui active une macro de création de (classeur1)jusque là ça va.
Donc se simple bouton actionne cette macro et bien d'autre en chaine.

Le probleme est que si je rappuis sur ce bouton il me recreer bien un classeur mais appelez classeur2. Et alors la ,je ne suis plus d'accord du tout.
Toute mes macro sont basées sur le nom du classeur1, (qui par la suite change de nom et s'enregistre sur le disque automatiquement, pour la petite histoire puis se ferme).

Donc J'aimerais un compteur de click sur le bouton qui s'incremente dans
le classeur "planning" sur une feuille dans une cellule. Cela je ne sais pas faire.
A la fermeture ou lors de l'enregistrement je reinitialise la cellule a zéro. Pour que l'or de la prochaine ouverture du classeur le bouton reparte a zero.

Apres en reprenant la valeur de la cellule avec if then else je pense arriver a me débrouiller pour sauter la macro création du classeur1

vous remerciant par avance
Didier2
 

Pièces jointes

  • test.xls
    18.5 KB · Affichages: 65
  • test.xls
    18.5 KB · Affichages: 73
  • test.xls
    18.5 KB · Affichages: 71
V

Valérie

Guest
coucou le forum,
Slt Didier

Pour que ta valeur s'incrémente il faut que lors de la déclaration de variable tu n'utilise pas Dim mais Static

ce qui te donne

Static cpteur As Byte
' Byte car je doute que tu appuis plus de 255 fois
cpteur = cpteur + 1

Mais de la même façon tu aurais pu créer une variable dans la partie Générale qui contiendrait le nom de ton classeur et tu n'as plus besoin de compter...

@ bientôt
Valérie
 
D

dIDIER 2

Guest
bonjour valerie
Aprés mainte recherche j'ai trouvé ça :

J'ai colé cette macro a mon bouton

Sub PourBouton()
zz = Sheets("planning prévision").Range("a121").Value
zz = zz + 1
Sheets("planning prévision").Range("a121") = zz
aa = Sheets("planning prévision").Range("a121").Value
If aa = 1 Then Call créationNoméPlacéFichier Else MsgBox "IMPOSSIBLE d'effectuer cette action, vous avez déja validé votre proposition "

end sub

et j'ai mis dans
thisworkbook

Private Sub Workbook_Open()
Sheets("planning prévision").Range("a121").Value = 0
End Sub

Mafoi cela fonctionne,et je m'epate car la macro je l'ai ecrit avec mes petits doigts.
si tu ou vous constaté des améliorations possibles, merci de me les comuniquer, et surtout de me les commantés pour que je comprenne.

Un vieux bon proverbe chinois dit a peut prés cela :

Donnait un poison a un homme démuni et il mangera ce jour
Expliquer au même homme comment pecher, et il mangera toujours.

cordialement
au plaisir de vous lire
Didier
 
V

Valérie

Guest
Slt Didier et les autres bien sûr

Pour ce qui est de ton code ta variable zz ne sert à rien, tu peux directement appliquer le +1 à ta cellule

Sheets("planning prévision").Range("a121") = Sheets("planning prévision").Range("a121") + 1

Je ne met pas le .Value par faineantise et parceque c'est la propriété par défaut (si y'en a pas EXCEL fait comme si tu l'avais mis) ->J'ai pas bu ce matin mais je me sens pas très claire dans mes explications...
Si tu comprends pas C pas vital.....

En revanche je te conseille en tant que PURISTE de déclarer tes variables pour éviter les pb d'encrasement de mémoire (c pas très technique ça!!). Et puis moi j'aurai pas mis de variable !! Ce qui donne :

Sub PourBouton()

Sheets("planning prévision").Range("a121") = Sheets("planning prévision").Range("a121") + 1
If Sheets("planning prévision").Range("a121") = 1 Then
créationNoméPlacéFichier
Else
MsgBox "IMPOSSIBLE d'effectuer cette action, vous avez déja validé votre proposition "
End If

end sub

Voilà ce que j'aurai écrit.
Quant à la seconde elle est PARFAITE : NE CHANGE RIEN

Je félicite tes petits doigts bien vaillants! Et Bravo pour ton code aussi

@ Bientôt
Valérie
 
T

Ti

Guest
Attention Valérie, je respecte ton apparente phobie des variable, mais je ne l'approuve pas. Si tu es dans un projet un tant soit peu complexe, et qu'en particulier tu fais grand usage du débogueur, alors tu pourras constater que l'emploi de variables, qui ne pénalisent pas la rapidité des traitements (puisqu'en interne le compilateur créera, lui, des variables temporaires, même si n'en mets pas) te faciliteron grandement la vie par la possibilité qu'elles offrent de placer des espions. Si ce sont des variables objets, bien utilisées, elles accélèrent même le traitement.
Ce n'est d'ailleurs pas pour rien que dans les aides des langages compilés on te place des exemples quasi systématiquement avec des noms de variables, même si l'exemple fait 2 lignes.
Donc mon conseil à moi : continuez à mettre des variables (bien déclarées auparavant, je suis Valérie sur ce point), dans 6 mois, vous ne vous en porterez que mieux quand vous voudrez modifier un peu votre code.
Ceci dit Valérie, chacun ses techniques et cela ne veut pas dire que la mienne est forcément meilleure que la tienne :)
 
T

Ti

Guest
petite précision, à propos d'un travers des programmeurs C qui m'a toujours fait rigoler : le C permet de condenser en une ligne ce qui peut tenir en 10 lignes ou plus dans d'autres langages. Beaucoup croient qu'en programmant de cette façon condensée, le code assembleur résultant est lui aussi plus ramassé. Ce n'est pas toujours faux, mais c'est loin d'être systématiquement vrai. Et quand on doit se relire un peu plus tard, une ligne ou deux de plus permettront bien souvent de faciliter la compréhension du code...
 
V

Valérie

Guest
Slt Ti

Je serai ravie que tu notes mon post au dessus qui utilisait une variable déclarée en Static.

Je ne suis pas ANTI-VARIABLE mais sur des petit boût de code j'évite... Quant au variable objet je les utilise sans parcimonie!!

Je confirme Déclarez et n'hésitez pas à utilisez!!

@+
Valérie
 

Discussions similaires

Réponses
40
Affichages
2 K

Statistiques des forums

Discussions
314 645
Messages
2 111 530
Membres
111 190
dernier inscrit
clmtj