Message box (urgent...)

Résolu
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009 - 18 juin 2007 à 23:39
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009 - 19 juin 2007 à 22:57
Bonjour à tous,

je débute en VB et j'ai créé une boite de dialogue qui propose de saisir un nom d'utilisateur que je veux afficher dans la feuille suivante (en bas à gauche).
j'ai 2 pb:
* je n'arrive pas à saisir quoi que ce soit (mais je passe bien à la feuile suivante en cliquant sur ok)
* j'ai 30 checkbox et je veux afficher un pourcentage (en clikant sur calculer, pour un calcul d'objectifs) suivant le nb de case cochées et il m'affiche tjs 0. (je voulias faire une boucle for pour les check mais ca marche pas)
du genre: for i = 1 to 30 if check(i).value=vbchecked then x = x+1

voici en gros ce que j'ai:

Private Sub Check1_Click()If Check1.Value vbChecked Then x x + 1
End Sub


Private Sub Command1_Click()
lblcalcul.Caption = x / 30 * 100
End Sub

merci pour votre aide

PS:je ne sais pas trop non plus à quoi sert le module

26 réponses

flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 11:38
text1.text = a car je voulais rentrer la saisie dans une variable a.
en cherchant un peu dansdes bouquins, je pense avoir trouvé (grace aussi à tes conseils) pour récupérer l'info saisie par l'utilisateur.
par contre je ne comprend toujours pas pourquoi mon curseur apparait bien mais impossible de taper quoi que ce soit. j'ai beau tapper ce que je veux, il n'affiche rien quand l'utilisateur écrit qqch.
je vais essayer ce soir ce que j'ai trouvé. (en déclarant ma variable nom dans le module).
*********
Est-ce qu'on est obligé de laisser "explicit" dans le module?
*********
Public x As Integer
Dim i As Long
For i = 1 To 30    If Me.Controls("Check" & i).Value vbChecked Then x x + 1
Next i

=> est ce que je doit tout mettre dans le module ou seulement la déclaration?
je n'ai pas saisi non plus ce que c'est Me.Controls
"Me" c'est un exemple? mais je ne comprend pas.


Merci
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2007 à 19:41
Dans frmDialog :

Private Sub OKButton_Click()
Form1.Show
Form1.lblNom.Caption = Text1.Text
'
ici en gros, tu lances Form1, et tu lui dis avant de fermer la form Dialog, que
le Caption _
du label
lblNom de Form1 doit contenir le texte du contrôle Text1 _
de la form
Dialog
Unload Me
End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2007 à 20:47
Private Sub Check1_Click()If Check1.Value vbChecked Then x x + 1
End Sub
^^
Ca tu le vires, aucun code dans le Click de tes CHeck.
(car si tu décoches et recoches, t'auras encore un + 1)

Utilise ma boucle For i comme je te l'ai montré, tu mets cette boucle dans l'évènement Click de ton bouton Calculer.

Vois Format(TaValeur, "#.00") pour l'affichage à 2 digit apres la vurgule

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2007 à 22:29
Comme tu le dis, tu n'arrives pas à "réinitialiser" le résultat. Par évidence, que faut-il faire vu qu'il garde la valeur précédante ?
Remettre le résultat (donc la variable x) à 0 :

Private Sub Command1_Click()
x = 0 
For i = 1 To 30If Me.Controls("Check" & i).Value vbChecked Then x x + 1
Next i
varx = x
lblcalcul.Caption = Format(varx / 30, "##.##")
End Sub

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 22:36
je ne comprend pas car j'avais essayé... c'était peut-etre la mauvaise variable que j'initialisais...

MERCI...

j'étais loin d'y arriver avec mon livre.

je posterai un autre sujet pour l'amélioration de mon programme
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 juin 2007 à 23:51
Salut,

pour ton 2, soit tu indexes tes ChackBox, c'est à dire, qu'ils ne doivent pas s'appeler Check1, Check2, etc..  mais Check1(1), Check1(2), Check1(3) etc..
Ou alors, utilise la collection Controls de Ta Form.

Pour ton 1 tu dis :
* je n'arrive pas à saisir quoi que ce soit (mais je passe bien à la feuile suivante en cliquant sur ok)
Beh c'est cool, mais si tu ne nous dit pas un minimum (ton code, quels controles tu utilises, enfin ce genre de choses) on ne pourrra pas t'aider..

Donc Urgent ou pas, une question bien posée est question qui aura plus facilement des réponses)

Pour finir, un Module sert à stocker des procédures, fonctions, et déclarations, dans la plupart du temps Public, c'est à dire accessible à tout ton programme.

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 00:21
merci de la reponse, je ne sais pas si ca pourra aider mais voici tout mon code:
*dialog:
Option Explicit


Private Sub CancelButton_Click()
End
End Sub


Private Sub Form_Load()
End Sub


Private Sub OKButton_Click()
Form1.Show
Dialog.Hide
End Sub


Private Sub Text1_Change()
Dim nom As TextBox, a As String
Text1.Text = a
End Sub

* form:

Private Sub MultiPage1_Change()


End Sub


Private Sub Frame1_DragDrop(Source As Control, x As Single, Y As Single)


End Sub


Private Sub Check1_Click()If Check1.Value vbChecked Then x x + 1
End Sub


Private Sub Command1_Click()
lblcalcul.Caption = x / 30 * 100
End Sub


Private Sub lblnom_Click()
lblnom.Caption = nom
End Sub


Private Sub menuaideinfo_Click()
frmSplash.Show
End Sub


Private Sub menufichierquitter_Click()
End
End Sub

*********
en fait, j'ai une boite de dialogue qui demande le nom de l'utilisateur (pour l'afficher dans la feuille suivante) puis une seconde feuille (form) avec un menu (ouvrir, enregistrer, imprimer, quitter) et un controle comprenant 3 onglet comprenant au total 30 checkbox.
quand je clique sur le bouton calculer, il me calcul les objectifs en pourcentage.

j'espere avoir été assez clair (je ne connais pas non plus les commandes pour imprimer mais ca c'est pas urgent, c'est pour l'ameliorer, je veux d'abbord que ca marche)

merci
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2007 à 00:37
Alors, dans ta Form Dialog, y-at-il au moins un controle TextBox (te permettant la saisie d'un nom) ?
Dans tout les cas, place une variable Public dans ton Module :
Public NomUtilisateur As String

Puis, dans
Private Sub OKButton_Click()
Form1.Show
Dialog.Hide
End Sub

Rajoute
NomUtilisateur = LeNomDuTextbox.Text
et remplace
Dialog.Hide par Unload Me

Autre chose, pourquoi :

Private Sub Text1_Change()
Dim nom As TextBox, a As String
Text1.Text = a
End Sub

Tu utilises Dim nom As TextBox, a As String  ???
tu ne te sers pas de nom, pis c'est déclaré au niveau procédure, donc dès que tu en sors, tu perds la valeur. Ensuite tu déclares a en tant que String, mais sans valeur (donc il est null).
Bref, autant ne pas le déclarer et mettre Text1.Text = vbNullString

Dans
Private Sub menufichierquitter_Click()
End
End Sub

remplace End aussi par Unload Me. Il ne faut utiliser End que dans l'évènement Load de la Form de démarrage.

Pour tes checkBox, je vois que t'as pas cherché avec les infos que je t'ai donnée..

Place donc la déclaration de x tout en haut de tes codes de la Form : Public x As Integer
Dim i As Long
For i = 1 To 30    If Me.Controls("Check" & i).Value vbChecked Then x x + 1
Next i

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 juin 2007 à 11:58
Bonjour flmancy,

Je voudrais que tu comprennes quelques petites chose (que tu y réfléchisses, en tout état de cause).

1) L'événement change est un événement qui se déclenche à chaque tois qu'intervient une modification du texte de ta textbox (y compris donc lorsque l'utilisateur frappe une lettre).
2) dire que text1.text = a donne au texte text1.text la valeur de a et pas à a la valeur de text1.text

Tu ne peux pas te tancer utilement ainsi "à l'aveuglette" en développement sous VB6 (ou sous n'importe quel autre langage) ! Il te faut nécessairement en apprendre les fondements (au moins).

Je te conseille une longue lecture afin de t'impreigner de ce que sont les contrôles, les événements qu'ils subissent, les méthodes qui leur sont applicables, leurs propriétés, etc... ainsi que ce que sont les variables, leurs différents types, etc...
C'est là un minimum qu'il te fut connaître avant de te lander...
Amitiés et bonne étude (mais étudie, s'il te plait).
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 18:32
merci pour ton post, ca m'aide à mieux comprendre (pour le "a", mais comment attribuer ce qui est saisi à ma variable?).

si je me suis lancé dans VB c'est que j'ai déja eus des cours poussés en C (j'ai juste perdu le fil sur les pointeurs et structures).
j'avais déja lu 250 pages du livre qui en fait 900 mais j'ai arrété en septembre car j'ai repris les études d'ingénieur par apprentissage et ça me prend bcp de tps.
ce programme me sert justement à calculer mes objectifs.
par la suite, je veux que le résultat affiché soit écrit en rouge si ce n'est pas atteint et vers dans le cas contraire.
****
sinon le programme compile sans pb sauf que je n'ai pas forcément le résultat voulu.
*Par ex,  je coche quelque cases, et il m'affiche tjs 0
*le nom d'utilisateur ne s'affiche pas (normal vu qu'impossible de saisir => le curseur reste en place mais rien!)
****

merci pour votre aide
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2007 à 18:38
faut faire l'inverse, c'est ta variable qui est égal à quelque chose (là, c'est de la logique) !

Private Sub Text1_Change()
Dim nom As TextBox<strike>, a As String</strike>
<strike>Text1.Text = a</strike>
a = Text1.Text
End Sub

Pis renseigne toi sur la Portée des variables...
si tu déclares dim a as string dans la Sub, tu ne pourras pas y accéder depuis d'autres procédures.

@++

<hr size ="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 19:09
merci,

apparement ça marche mais je cliquer dessus pour qu'il s'affiche puis la ligne de code:
** Dim nom as TextBox ne sert à rien on dirait.

il me reste le pb d'affichage de mon résultat (tjs 0)
***

comment faire pour réinitialiser ma variable contenant le résultat (en %) à afficher ?

****
quelque fois, il est marqué "option explicite" dans le module de code, ça veut dire quoi? il faut le laisser tout le temps?
Quelle est la différence entre "Public nom as string" et "Dim nom as string" dans le module?

merci
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2007 à 19:23
oui, Dim nom as TextBox ne sert à rien

Allez, un petit cours made by mortalino :

Option Explicit t'oblige à déclarer toutes tes variables. Tu peux l'enlever mais je te conseille de le laisser, car c'est souvent grâce à lui tu peux corriger des erreurs ou en déclarant des variables que tu as omis.

Portée des variables :

Exemple 1, dans une Form, portée locale :

Option Explicit

Sub Test()
    Dim a As String
    ' déclarer dans la Sub Test, donc la valeur ne sera accessible
qu'ici
    
a = "coucou"
MsgBox a
End Sub

Private Sub Form_Load()
MsgBox a
' là t'auras que dalle, car la portée de ~a~ n'est que dans la Sub
Test
End Sub

~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

Exemple 2, dans une Form, portée générale à la Form :

Option Explicit

    Private a As String
    ' déclarer dans les
déclarations de la Form, _
    donc la valeur sera accessible partout dans la
Form, _
    une fois la
variable initialisée

Private Sub Form_Load()
a = "coucou"
MsgBox a
' Au Load, la MsgBox t'affiche
bien coucou
End Sub

Sub Test()
MsgBox a
' beh là aussi ça va s'afficher, car la portée est générale pour
la Form
End Sub

~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

Exemple 3, dans un Module, portée locale :
Voir Exemple 1

Exemple 4, dans un Module, portée générale au Module :
Voir Exemple 2

Dernier Exemple, dans un Module, portée générale au projet :
Remplace
Option Explicit

    Private a As String
par
Option Explicit

    Public a As String

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 19:34
merci (je vois que j'ai encore bcp de progés à faire)

ça m'aide déja à y voir un peu plus clair.
par contre la saisie du nom d'utilisateur ne se fait par la ligne de commande msgbox mais par une première frm (dialog.frm).
ca marche bien mais faut que je clik à l'endroit où ça doit s'afficher. Je voudrais que s'affiche tout seul dès le chargement de ma feuille form1.frm.
Si tu m'as répondu, j'ai peut-etre pas tout compris.
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 19:54
ça marche...!!!!! UN GRAND MERCI
1er PB résolu (j'ai remplacé Text1.Text par nom car j'avais stocké la saisie dans cette variable ;-) )


Pour mon 2eme pb, quelqu'un a une solution?


si besoin, je peux faire un rappel (c'est concernant l'initialisation de mon resultat, avec la boucle for et mes checkbox......)


 
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 20:42
Bonsoir à tous,

Rappel du 2nd pb: (1er résolu)

j'ai 30 checkbox et je veux faire un affichage du pourcentage du nb de case cochées en cliquant sur le bouton "calculer". j'ai eus une proposition de boucle for que je ne maitrise pas et ne sais pas où la mettre mais je vais la tester.
Sans boucle for, j'ai (pour 1 checkbox):
***
Private Sub Check1_Click()If Check1.Value vbChecked Then x x + 1
End Sub

Private Sub Command1_Click()
lblcalcul.Caption = x / 30 * 100
End Sub
***

j'ai testé que pour une checkbox et ça m'afficheque des "3". Normal mais comment faire pour limiter l'affichage à 2 chiffres apres la virgule
j'ai mis le type "variant" pour x

Ensuite, j'ai apparement un 1er résultat correct mais lorsque je réappuie sur "calculer", il me prend pas en compte le fait d'avoir décoché une ou plusieurs checkbox. il y a donc certainement une réinitialisation à faire mais comment

je dois tapper la meme ligne de code pour toutes mes checkbox ou vous avez un petit code à me proposer

Merci à ceux qui ont pris le temps de m'aider et qui m'aideront aussi...
Sans eux, j'y serait encore et le fait d'avoir de l'aide me donne de + en + de gout à programmer...
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 21:25
ok,

ça marche à peu près sauf que lorsque j'appuie plusieurs fois sur "calculer" sans rien changer, le résultat change tjs.
je vois pas pk.

pour le format à 2 chiffres apres virgule, je trouve ça où?
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 21:33
 message d'erreur car il veut un "=" apres le code format

voici mon code:

module:
Option Explicit


Public x As Integer
Dim i As Long
Public a As String
Public nom As String
Public varx As Variant

form1:

Private Sub Command1_Click()
For i = 1 To 30If Me.Controls("Check" & i).Value vbChecked Then x x + 1
Next i
varx = x
Format(varx, "#.00")
lblcalcul.Caption = varx / 30
End Sub
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 21:51
j'ai trouvé!!!
voici le code:

Private Sub Command1_Click()
For i = 1 To 30If Me.Controls("Check" & i).Value vbChecked Then x x + 1
Next i
varx = x
lblcalcul.Caption = Format(varx / 30, "##.##")
End Sub
********************

par contre, chaque fois que j'appuie sur le bouton, le résultat se multiplie par 2 environ.
comment faire pour annuler cela
0
flamcy Messages postés 58 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
19 juin 2007 à 22:21
Arfff...!!!
tout marche nikel sauf que j'arrive pas à réinitialiser mon bouton calculer...!!!
il garde en mémoire ma valeur précédente!

quelqu'un peut m'aider
0
Rejoignez-nous