|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Bonjour!
J'aurais besoin dans mon projet Vba d'une variable (un entier) accessible a toutes les procedures et modifiable a tout moment. Je l'ai declaré de cette facon dans la partie "General" d'un module standard: Et je l'initialise a l'ouverture du workbook: Code :
Ensuite dans des boutons d'userforms, j'ai des incrementations du type i = i + 1 Je lance ce userform, je clique sur le bouton, c'est bon la valeur de i a bien ete incrementee de 1. Jusque la je suis heureux. C'est ensuite que ca se corse. Je relance le userform, je reclique sur le bouton, et pouf! le i s'est mis a zero, comme ca tout seul, sans qu'on lui aie rien dit. En regardant la valeur de i a chaque etape, j'ai vu que c'est sur la ligne " Private Sub Userform_initialize() " que i se met a 0, alors qu'il n'y a aucune action de realisee! Etant loin d'etre une superstar du Vba, je fais appel a votre experience et vos competences pour m'aider. Merci d'avance et bon week end! PS: n'ayant pas Internet le we je ne pourrais vous repondre avant Lundi... -- Flo [Edit] bbil : Penser à rajouter les balises de codes, utiliser le bouton
|
||
|
|
00
|
|
|
#2 |
![]() ![]() |
rajout une ligne
en haut de tes modules... cela t'obligeras à déclarer les variables.. et évitera des erreurs à des endroits ou tu crois avoir déclaré une variable et celle ci est hors de portée...
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Oui mais je veux que cette variable soit utilisable dans tout le projet donc il faut que la declare qu'une seule fois non? Parce que le Option explicit il sert a quoi exactement? Moi je croyais qu'il rendait une variable utilisable dans toute une procedure.
|
|
|
00
|
|
|
#4 |
![]() ![]() |
Option explicit, "t'oblige" à déclarer toutes tes variables.. donc si tu en utilise une dans un endroit ou elle n'est pas accessible ... tu as un message d'erreur ... et VB.. ne te "génére" pas tout seul cette variable (sans aucun lien avec une autre variable de même nom)
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Alors j'ai essayé de mettre "Option Explicit" dans les modules ou j'utilisais mon i mais cela ne change rien. Penses tu que je m'y prend correctement pour declarer cette variable globale?
|
|
|
00
|
|
|
#6 | |
|
Membre du Club
![]() Inscription : mai 2006 Messages : 151 ![]() |
Citation:
Peux etre que tu fais appel a une fonction qui met i à 0? Tu utilise peux etre le i dans une boucle for d'une fonction appelé dans " Private Sub Userform_initialize() "? Vérifie tous ça!! |
|
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Sorry mais je n'ai nulle part dans mon projet l'instruction "i=0". Voici ce qu'il y a dans mon Userform_Initialize() :
Code :
Donc je ne sais vraiment pas quoi penser. |
||
|
|
00
|
|
|
#8 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Pour déclarer une variable globale, ce n'est pas "Globale" mais "Public"
Ne change rien à ton premier code et mets donc Public à la place de globale |
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Merci c'est ce que j'avais fait au debut, et voyant que ca ne marchait pas j'ai essayé "Global"...La je viens de reessayer avec Public, et c'est pareil, il y a toujours ce satané i qui retombe a 0 comme une bouse!
|
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : mai 2006 Messages : 151 ![]() |
dans tes "togglebuttons" tu n'as pas de fonction :
là ou il y aurait évantuellement ton "i" remis à 0? |
|
|
00
|
|
|
#11 | ||
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Oui, alors j'ignore dans quelle version de VBA tu es mais pour ce qui me concerne, je mets toujours (VBA97)
Code :
|
||
|
|
00
|
|
|
#12 | |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Citation:
J'ai lance une recherche dans tout mon projet de la variable i et elle n'est que la ou je pensais qu'elle etait! |
|
|
|
00
|
|
|
#13 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Tu as essayé mon code ?
|
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Merci Ouskel'n'or pour ton code j'ai essaye mais le i que j'utilise dans le bouton de mon userform est "non declare". Il semblerait que le "Public i As Integer" a cet endroit la ne soit pas valable pour tout le projet... Et je voulais te demander ca sert a quoi la ligne:
Code :
ActiveWorkbook.RunAutoMacros Which:=xlAutoOpen Merci de votre aide |
|
|
00
|
|
|
#15 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Je le mets dans un module du classeur (Insertion -> Module) non dans thisworkbook
Quant à ActiveWorkbook.RunAutoMacros Which:=xlAutoOpen, ça sert à la compatibilité des versions mais ne nuit pas si ce n'est pas nécessaire A+ |
|
|
00
|
|
|
#16 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Mais c'est juste le "Public i As Integer" que tu mets dans un module ou tout ton code? Parce que j'imagine que le "Private Sub Workbook_open()" il va dans "ThisWorkbook" non?
|
|
|
00
|
|
|
#17 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Non ! Je le mets dans le même module, après la déclaration.
L'ouverture du classeur entraîne l'exécution de la macro Workbook_Open Si tu as un userform à ouvrir, tu mets le code dans "Sub Auto_open()" Tu dis |
|
|
00
|
|
|
#18 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2006 Messages : 68 ![]() |
Rhaaaaaaa..... Toujours une remise a 0 incomprehensible apres le premier lancement du userform en question...
|
|
|
00
|
|
|
#19 | ||
|
Membre du Club
![]() Inscription : mai 2006 Messages : 151 ![]() |
fait des point d'arret dans chaque ligne et chaque fonction utilisé dans le fonction "Private Sub UserForm_Initialize()" et tu mets des espions un peu partout surtout sur "i"
si il n'y a que ça à faire! c'est long mais au moin tu poura voir à quel moment et où il passe à 0! en [Vba-E] c'est "F5"!! au passsage je m'excuse ! je me suis trompé "F8" pas à pas! mais je voulais dire de mettre des point d'arret et de relancé entre chaque point d'arret avec "F5"! Je suis désolé Citation:
si vous voulez je met des points d'arret au point statégique et je relance avec "F5" autrement dit avec "run" et effectivement "F8" c'est bien du pas à pas! Je m'en excuse encore une fois! |
||
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Inscription : septembre 2005 Messages : 1 016 ![]() |
C'est pas F8 plutot que F5 ?
__________________
Avant de poster, et http://www.developpez.com/sources/N'oubliez pas le ![]() Vous une brute ? faites voir |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com