VBA : Saisir une valeur et afficher résultat

Résolu/Fermé
ph.souchal Messages postés 17 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 21 décembre 2009 - 21 déc. 2009 à 10:34
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 - 21 déc. 2009 à 15:18
Bonjour,

Je voudrais mettre en place une petite application VBA qui permettrait de faire la chose suivante :

- Démarrer l'application en affichant uniquement la boite de dialogue mais pas excel.
- Saisir une valeur à 12 chiffres dans un champ de la boite de dialogue.
- Lancer l'execution en cliquant sur un bouton "Calcul".
- Appliquer une formule excel à cette valeur et afficher le résultat dans la même boîte de dialogue.
(Résultat = La valeur + le résultat de la formule).

Problème : ce projet est un peu trop ambitieux pour mes modestes compétences en VBA....

Quelqu'un aurait t-il la gentillesse de me mettre sur la voie ou de me montrer un classeur exemple ?

Merci d'avance pour votre aide, et bonne fêtes de fin d'année à tous,

Sslts,

15 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
21 déc. 2009 à 12:28
je regarde ça après la pause déj' (à moins que michel_m ne le fasse avant ;)

mais non, rassure-toi , je te laisse le bébé !!! ;-)
jpourrais faire un tite sieste
2
ph.souchal Messages postés 17 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 21 décembre 2009 1
21 déc. 2009 à 13:20
Merci infiniment à tout les deux (et bon appétit !).

Je fait le test avec la formule dans le code de michel_m.

Pour la formule (bien vu tompols !) :

Somme des nombres en position Pair x 3
Somme des nombres en position Impair.
Somme des deux résultats (1)
Enfin : (2) soustraction du résultat de son arrondi supérieur à la dizaine !

Si le résultat (1) est 82 alors le résultats final (2) est donc : 90 - 82 = 8.

Merci à tout les deux je vous tiens informé du résultat (si j'en obtient un en ajoutant la formule ! ;-) )
1
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
21 déc. 2009 à 14:39
Re,
ça ferait donc un truc comme ça :
'boucle de controle du nombre saisie
do while flag=false
nombre=inputbox("intoduire un nombre de 12 chiffres")
if isempty(nombre) then
wscript.quit 0
end if
if isnumeric(nombre) and len(nombre)=12 then
flag=true
else
msgbox "saisie erronée"
end if
loop

'la somme des nombre en position impaire
for i = 1 to 11 step 2
	somimpair = somimpair + cint(mid(nombre,i,1))
next 

'la somme des nombre en position paire
for i = 2 to 12 step 2
	sompair = sompair + cint(mid(nombre,i,1))
next

'opération intermédiaire (1)
res = (sompair *3) + somimpair

'on détermine si multiple de 10, si oui resultat = 0 sinon on arrondi et on soustrait le nombre 
if right(res,1) <> 0 then 
    arr = (int(res/10) + 1) * 10
    result = arr- res
else result = 0
end if

msgbox "nombre entré : " & nombre & vbcrlf & "résultat : " & result

voilà, à copier/coller dans le bloc note puis enregistrer en modifiant l'extension en .vbs .... pour l'execution, double click sur le fichier....
Un ptit merci en passant à michel_m pour la boucle de controle du nombre saisi ;)
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
21 déc. 2009 à 15:00
Bien joué tompols,
j'adore ces posts où on cherche ensemble
A bientôt, j'espère, pour de nouvelles aventures :-)
1

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

Posez votre question
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
21 déc. 2009 à 15:18
re,
c'est sur que sans les boucles ou autres "astuces" c'est un peu plus long mais ça marche qd meme ;)
Excellentes fêtes de fin d'année à toi également (et à tous ceux qui passeront par là ;) )
1
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
21 déc. 2009 à 10:48
Bonjour,
Je ne comprends pas bien pourquoi utiliser Excel dans ce cas ? La formule appliquée se base-t-elle sur des données présentes dans une feuille ? quelle est la formule que tu veux appliquer ?
0
ph.souchal Messages postés 17 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 21 décembre 2009 1
21 déc. 2009 à 10:52
Bonjour,

Avant tout merci pour cette réponse rapide.

Je pense à cette solution car les données ne seront pas présentes dans une feuille.

Le calcul devra être fait au cas par cas et de façon ponctuelle mais répétée pour des valeurs non connues à l'avance.

L'idée est que l'utilisateur n'ai qu'a ouvrir l'application et saisir son chiffre pour pouvoir disposer du résultat....

Je ne sais pas si je suis assez clair....
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
21 déc. 2009 à 11:08
Bonjour
Ok, je vois mais ça ne répond pas à ma question : quelle est le calcul à faire (quelle formule) ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
21 déc. 2009 à 11:36
bonjour,
Comme Tompols, j'ai du mal à comprendre... pourquoi Excel

Peut-être pourrais tu utiliser un vbscript comme ci dessous

 do while flag=false
nombre=inputbox("introduire un nombre de 12 chiffres")
 if isnumeric(nombre) and len(nombre)=12 then
 flag=true
 else
 msgbox "saisie erronée"
end if
 loop
 nombre=nombre + 200
 msgbox nombre


dans ce code, l'utilisateur est obligé de rentrer un nombre à 12 chiffres pour sortir de la procédure mais si tu veux annuler si erreur, on peut trouver autre chose
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
21 déc. 2009 à 11:39
héhé, je pensais aussi à du vbs, reste encore à savoir quel calcul appliquer.... ;)
0
ph.souchal Messages postés 17 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 21 décembre 2009 1
21 déc. 2009 à 11:51
Oups excusez moi je suis à la traine !

J'ai la formule en version excel (comme vous l'aurais compris je suis plus formuliste que VBiste ! ;-) ) :

=(ARRONDI.SUP((((STXT(A1;2;1)+STXT(A1;4;1)+STXT(A1;6;1)+STXT(A1;8;1)+STXT(A1;10;1)+STXT(A1;12;1))*3)+(STXT(A1;1;1)+STXT(A1;3;1)+STXT(A1;5;1)+STXT(A1;7;1)+STXT(A1;9;1)+STXT(A1;11;1)))/10;0)*10)-(((STXT(A1;2;1)+STXT(A1;4;1)+STXT(A1;6;1)+STXT(A1;8;1)+STXT(A1;10;1)+STXT(A1;12;1))*3)+(STXT(A1;1;1)+STXT(A1;3;1)+STXT(A1;5;1)+STXT(A1;7;1)+STXT(A1;9;1)+STXT(A1;11;1)))

A1 étant vous l'aurez compris la valeur saisie et le résultat étant A1 et le résultat de la formule.

Je précise également à toute fin utile qu'il n'est pas nécessaire de "sauvegarder" le résultat mais uniquement de l'afficher.

Merci encore pour votre aide à tout les deux,
-1
ph.souchal Messages postés 17 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 21 décembre 2009 1
21 déc. 2009 à 11:58
Autre précision je n'ai rien contre une autre solution mais j'ai besoin d'être sûr que cette petite application pourra être utilisée sur n'importe quel poste.... c'est ce qui m'a fait envisager excel, de plus je ne maitrise pas très bien la nuance entre VBS et VBA et ce la même chose mais sans passer par excel ?
-1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
21 déc. 2009 à 12:06
Merci Tompols, je me sens moins seul dans ce monde ingrat! :-d

petite amélioration pour sortir pat annuler ou la croix
do while flag=false
nombre=inputbox("intoduire un nombre de 12 chiffres")
if isempty(nombre) then
wscript.quit 0
end if
if isnumeric(nombre) and len(nombre)=12 then
flag=true
else
msgbox "saisie erronée"
end if
loop
nombre=nombre + 200
msgbox nombre


pour la formule (hé bé...pas simple), faut voir si la traduction en anglais est admise par vbscript...normalement oui mais...

pour ph.souchai: que désires tu faire comme transformation de ton nombre initial car la logique est différente en prog que par formule

edit ;VBS est de la m^me famille que VBA Excel mais on peut pas normalement utiliser les fonctions excel

j'ai testé ta formule sur XL avec le nombre 123456789012 et j'ai comme résultat 8 c'est cela ?
-1
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
21 déc. 2009 à 12:19
re :)
pour la formule, à ce que je vois, stocker en variable la somme des nombre en position pair et la somme des nombres en position impair puis faire tes addtions/multiplications soustractions....je regarde ça après la pause déj' (à moins que michel_m ne le fasse avant ;) )
-1
ph.souchal Messages postés 17 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 21 décembre 2009 1
21 déc. 2009 à 15:06
Whaouh !!!

Pour info : J'avais commencé la transformation de ma formule en VBA et je ne butais plus que sur le problème d'arrondi supérieur lorsque la décimale était inférieure à 0.5 ! Ce qui donnait a peu près ceci :

(Round((((Val(Mid(nombre, 2, 1)) + Val(Mid(nombre, 4, 1)) + Val(Mid(nombre, 6, 1)) + Val(Mid(nombre, 8, 1)) + Val(Mid(nombre, 10, 1)) + Val(Mid(nombre, 12, 1))) * 3) + Val((Mid(nombre, 1, 1)) + Val(Mid(nombre, 3, 1)) + Val(Mid(nombre, 5, 1)) + Val(Mid(nombre, 7, 1)) + Val(Mid(nombre, 9, 1)) + Val(Mid(nombre, 11, 1)))) / 10, 0) * 10) - (((Val(Mid(nombre, 2, 1)) + Val(Mid(nombre, 4, 1)) + Val(Mid(nombre, 6, 1)) + Val(Mid(nombre, 8, 1)) + Val(Mid(nombre, 10, 1)) + Val(Mid(nombre, 12, 1))) * 3) + (Val(Mid(nombre, 1, 1)) + Val(Mid(nombre, 3, 1)) + Val(Mid(nombre, 5, 1)) + Val(Mid(nombre, 7, 1)) + Val(Mid(nombre, 9, 1)) + Val(Mid(nombre, 11, 1))))

J'étais très fier de moi jusqu'a ce que je vois ton post ! Je constate donc comme attendu mais avec un grand respect qu'une traduction ne remplacera jamais une bonne maitrîse du code : cela semble tellement simple présenté comme ça !!!

Un grand grand merci à tout les deux pour votre aide, en vous souhaitant à l'occasion d'excellentes fêtes de fin d'année !
-1