LE NEWSMAGAZINE Nº1 DES NOUVELLES TECHNOLOGIES
131 utilisateurs connectés

question sur un prog VBA ? [résolu]

demandeinfos le 26 février 2009 à 19h22
Bonjour,

Quand je tape ce programme qui permet de calculer le poids idéal, tout fonctionne, le résultat me dit bien si je dois perdre ou prendre du poids :

Sub poids2()
Dim genre, pa, pi, nbk As Integer

genre = Range("F3")
ta = Range("F6")
pa = Range("F9")

If genre = 2 Then
pi = Int((ta - 100) - ((ta - 140) / 2))
Else
pi = Int((ta - 100) - ((ta - 150) / 4))
End If

nbk = Abs(pi - pa)

If pi > pa Then
MsgBox "Vous devez prendre " & CStr(nbk) & " kilos!"
Else
If pi < pa Then
MsgBox "Vous devez perdre " & CStr(nbk) & " kilos !"
Else
MsgBox "Gardez vos habitudes alimentaires"
End If
End If

End Sub

par contre, quand je remplace les cellules F6 et F9 par boîtes (MsgBox), systématiquement, le résultat me dit bien que je dois perdre du poids :


Sub poids2()
Dim genre, pa, pi, nbk As Integer

genre = Range("F3")
ta = InputBox("saisir votre taille en cm")
pa = InputBox("saisir votre poids en kg")


If genre = 2 Then
pi = Int((ta - 100) - ((ta - 140) / 2))
Else
pi = Int((ta - 100) - ((ta - 150) / 4))
End If

nbk = Abs(pi - pa)

If pi > pa Then
MsgBox "Vous devez prendre " & CStr(nbk) & " kilos!"
Else
If pi < pa Then
MsgBox "Vous devez perdre " & CStr(nbk) & " kilos !"
Else
MsgBox "Gardez vos habitudes alimentaires"
End If
End If

End Sub

Etant un grand débutant sous VBA, qlq1 pourrait-il m'éclairer sur ce qu'il se passe ?

merci d'avance et @+





-->Message édité par demandeinfos le 28/02/2009 17:15:00<--
the_jbt le 26 février 2009 à 19h55
En fait la valeur renvoyer par inputbox est un type chaine => ajouter un cast pour convertir en int :
pa=cint(InputBox("saisir votre poids en kg"))
demandeinfos le 27 février 2009 à 08h17
Bonjour,

Merci beaucoup pour l'info, je ne vois pas bien encore à quoi ça correspond mais je creuserai la question (je débute depuis peu sous VBA, et je recopie plus que je ne comprends dans l 'attente de progresser ...).

Il me reste à compléter une chose que je ne sais pas du tout faire : le résultat que j'obtiens s'affiche actuellement sur une fenêtre, est-t'il possible de conserver cet affichage du résultat et à la fois d'aller l'inscrire dans une cellule ?

Merci d'avance pour l'info
the_jbt le 27 février 2009 à 08h37
La valeur est contenue dans la variable nbk. Il suffit juste d'assigner la valeur à une cellule.
demandeinfos le 27 février 2009 à 11h41
ok, ça doit être range qlq ?

MsgBox "Vous devez prendre " & CStr(nbk) & " kilos!" = Range("F12") ?

the_jbt le 27 février 2009 à 11h49
non
et puis range, n'est pas à utiliser pour des cellules simple, mais uniquement pour un ensemble de cellule

Cells(12,6).value = cstr(nbk)
demandeinfos le 27 février 2009 à 13h18
:bien: super !
un grand merci !
demandeinfos le 27 février 2009 à 15h16
J'aurai une dernière question svp, sur le programme ci-dessous, je voudrais que quand "genre" est différent de 2, les "Inputbox" ne soient pas lancées, mais que le programme s'arrêté pour que le choix de genre soit refait.



Sub poids2()
Dim genre, pa, pi, nbk As Integer

If genre = 2 Then
pi = Int((ta - 100) - ((ta - 140) / 2))
Else
MsgBox "Vous n'avez pas chosi le bon genre, essayez de nouveau"
End If

ta = CInt(InputBox("saisir votre taille en cm"))
pa = CInt(InputBox("saisir votre poids en kg"))
genre = Range("F3")

nbk = Abs(pi - pa)

If pi > pa Then
MsgBox "Vous devez prendre " & CStr(nbk) & " kilos!"
Else
If pi < pa Then
MsgBox "Vous devez perdre " & CStr(nbk) & " kilos !"
Else
MsgBox "Gardez vos habitudes alimentaires !"
End If
End If

End Sub
-->Message édité par demandeinfos le 27/02/2009 15:16:56<--
the_jbt le 27 février 2009 à 15h58
1) ton prog ne peut pas fonctionner, tu utilises des variables avant quelles soient initialisées (si genre = 2 )

2) Si le genre est toujours dans une cellule (et non pas une popup demandant le genre), tu peux bloquer la valeur de la cellule à 1 ou 2 (validation des données)

Ensuite, il te reste le cas ou la cellule est vide. Dans ce cas, tu fais un test
si cells(3,6).value = 0 et tu fais un "exit sub"
demandeinfos le 27 février 2009 à 19h17
:bien: super !

en fait c'est la fonction "exit sub" que je cherchais

encore merci
demandeinfos le 27 février 2009 à 20h21
puis-je abuser svp .... pas de soucis déjà, tout fonctionne depuis le début ...

donc là si c'est "genre=1" le programme s'arrête, si c'est "genre=2", les fenêtres s'ouvrent,

ce que je voudrais ajouter, c'est une fenêtre qui s'ouvre en 1er, et dans laquelle on impose ce qui doit être écrit pour passer à la suivant ?

merci d'avance




Sub Soja()
Dim produit, ta, pa, pi, nbk As Integer

produit = Range("O6")

If produit = 2 Then
pi = Int((ta - 100) - ((ta - 140) / 2))
Else
MsgBox "Vous n'avez pas choisi le bon produit"
Exit Sub
End If

ta = CInt(InputBox("saisir votre taille en cm"))
pa = CInt(InputBox("saisir votre poids en kg"))


nbk = Abs(pi - pa)

If pi > pa Then
MsgBox "Vous devez prendre " & CStr(nbk) & " kilos!"
Else
If pi < pa Then
MsgBox "Vous devez perdre " & CStr(nbk) & " kilos !"
Else
MsgBox "Gardez vos habitudes alimentaires !"
End If
End If

Cells(12, 6).Value = CStr(nbk)

End Sub
the_jbt le 27 février 2009 à 20h28
IL te faut faire une boucle

do
ta=...
loop while ta < 100
demandeinfos le 28 février 2009 à 04h38
Bonjour j'ai essayé ça mais ça ne fonctionne pas ?
Merci pour votre coup de pouce sur ce point, je n'y suis pas arrivé ...



Sub Soja()
Dim produit, ta, pa, pi, nbk As Integer
produit = Range("O6")

If produit = 2 Then
pi = Int((ta - 100) - ((ta - 140) / 2))
Else
MsgBox "Vous n'avez pas choisi le bon produit"
Exit Sub
End If

Do
ta = CInt(InputBox("saisir votre taille en cm"))
Loop While ta = 100


pa = CInt(InputBox("saisir votre poids en kg"))


nbk = Abs(pi - pa)

If pi > pa Then
MsgBox "Vous devez prendre " & CStr(nbk) & " kilos!"
Else
If pi < pa Then
MsgBox "Vous devez perdre " & CStr(nbk) & " kilos !"
Else
MsgBox "Gardez vos habitudes alimentaires !"
End If
End If

Cells(12, 6).Value = CStr(nbk)

End Sub
-->Message édité par demandeinfos le 28/02/2009 13:48:56<--
the_jbt le 28 février 2009 à 14h02
tu es en train de dire : tant que ta=100 je boucle ... donc forcément, si tu ne renseigne pas 100 dans la boite, il ne la représentera pas ...
demandeinfos le 28 février 2009 à 14h10
en fait ce n'est pas ce que je voudrais faire, c'est un exemple,


voilà, ce que je souhaiterai faire :
1 - il faut choisir le bon genre
2 - une fois le bon genre sélectionné, je voudrais qu'une box apparaisse pour demander une mot qui doit être rentrée exactement pour passer à la suite ?

je sais pas si je suis clair ? :/


-->Message édité par demandeinfos le 28/02/2009 14:11:18<--
the_jbt le 28 février 2009 à 14h34
Do
genre = 0
retour = InputBox("entrer votre genre: ""H"" pour homme, ""F"" pour femme")
If retour = "h" Or retour = "H" Then
genre = 1
ElseIf retour = "f" Or retour = "F" Then
genre = 2
End If
Loop While genre = 0
demandeinfos le 28 février 2009 à 15h09
ok, encore super :bien: et :chapo: , ça fonctionne très bien, j'ai juste adapté à ce que je voulais faire (cf en dessous en rouge), la macro est pas encore finie (pour l'instant elle pas trop de sens), mais c'est dans l'esprit de ce que je souhaiterai faire au final ...

Il me reste un petit détail à régler, que je n'ai pas réussi à améliorer, quand la box "entrer le nom de la Directive choisie" apparaît, quand je clique sur "Annuler" elle ne veut pas disparaître, comment peut-on faire ?

encore merci d'avance pour le coup de main ... :)


Sub Soja()

On Error GoTo suite

Dim produit, ta, pa, pi, nbk As Integer
produit = Range("G6")

If produit = 2 Then
pi = Int((ta - 100) - ((ta - 140) / 2))
Else
MsgBox "Vous n'avez pas choisi le bon produit"
Exit Sub
End If

Do
produit = 0
retour = InputBox("entrer le nom de la Directive choisie")
If retour = "CE/2000/36" Then
produit = 2
End If
Loop While produit = 0


ta = CInt(InputBox("saisir votre quantité de protéines"))

nbk = Abs(pi - pa)

If pi > pa Then
MsgBox "Vous devez prendre " & CStr(nbk) & " kilos!"
Else
If pi < pa Then
MsgBox "Vous devez perdre " & CStr(nbk) & " kilos !"
Else
MsgBox "Gardez vos habitudes alimentaires !"
End If
End If

Cells(12, 6).Value = CStr(nbk)

suite:
Exit Sub

End Sub
nonaseb le 28 février 2009 à 17h07
Re,

Do
produit = 0
retour = InputBox("entrer le nom de la Directive choisie")
If retour = "CE/2000/36" Then
produit = 2
End If
Loop While produit = 0


Modifie comme ceci

Do
produit = 0
retour = InputBox("entrer le nom de la Directive choisie")
If retour = "CE/2000/36" Then
produit = 2
Else
Exit Sub

End If
Loop While produit = 0
demandeinfos le 28 février 2009 à 17h13
Excellent :bien: , encore une fois de plus merci !
bonne soirée
:salut:
nonaseb le 28 février 2009 à 17h18
Encore de rien :jap:

Bonne soirée également

:salut:
demandeinfos le 28 février 2009 à 17h21
J'insiste, mille mercis !! :bien: :chapo:
@+


À PROPOS DU FORUM MICRO HEBDO

LES FORUMS THÉMATIQUES ET TECHNIQUES

LES FORUMS GÉNÉRAUX

ARCHIVES DU FORUM

publicité
01Informatique
01 INFORMATIQUE
L'hebdo de référence des décideurs informatiques.
Micro Hebdo
MICRO HEBDO
L'hebdo qui vous simplifie la micro
et Internet.
L'Ordinateur Individuel
L'ORDINATEUR INDIVIDUEL
Le mensuel informatique qui vous informe et vous conseille.
Nous contacter  |  Charte de confiance  |  Voir notice légale

01net.  -  01men  -  RMC  -  BFM Radio  -  BFM TV  -  TousLesPodcasts  -  01informatique.fr  -  Association RMC-BFM
Tous droits réservés © 1999 - 2009 Internext - 01net.