VBA : Saisir une valeur et afficher résultat

Résolu
ph.souchal Messages postés 14 Date d'inscription   Statut Membre -  
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   -
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,
Configuration: Windows XP
Firefox 3.0.15

15 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. ph.souchal Messages postés 14 Date d'inscription   Statut Membre 1
     
    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
  3. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bien joué tompols,
    j'adore ces posts où on cherche ensemble
    A bientôt, j'espère, pour de nouvelles aventures :-)
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  7. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  8. ph.souchal Messages postés 14 Date d'inscription   Statut Membre 1
     
    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
  9. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Bonjour
    Ok, je vois mais ça ne répond pas à ma question : quelle est le calcul à faire (quelle formule) ?
    0
  10. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  11. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    héhé, je pensais aussi à du vbs, reste encore à savoir quel calcul appliquer.... ;)
    0
  12. ph.souchal Messages postés 14 Date d'inscription   Statut Membre 1
     
    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
  13. ph.souchal Messages postés 14 Date d'inscription   Statut Membre 1
     
    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
  14. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  15. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  16. ph.souchal Messages postés 14 Date d'inscription   Statut Membre 1
     
    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