[Aide] Programme VBA exercices

Programme VBA exercices [Aide] - VB/VBA/VBS - Programmation

Marsh Posté le 29-10-2007 à 08:31:07    

Bonjour à tous,
 
Voilà, nous venons d'amorçer le VBA et plus précisément le VBE en cours et le prof nous a donné une dizaine d'exos à faire mais il y en a deux que j'ai du mal à réaliser, pourriez-vous m'aider je vous prie ?
 
Ex 2.8
Ex : Soit un entier n, donner un algorithme pour dire si il est divible par 9.
 
Je pense qu'il faut le réaliser avec l'opérateur mod (que l'on n'a pas encore vu en cours mais je suppose que c'est celui-ci) du genre:
If n mod 9 = 0 then
 
Et là je souhaiterais faire une action mais ne sait pas laquelle genre une msgbox disant si oui ou non n est divisible par 9 et faut-il faire évoluer n dans une boucle ?
 
 
Ex 2.9
Donner un algorithme qui recupere une valeur réelle en cells(1,1) et la décompose en une partie entière et une partie décimale
 
Là si je comprends bien, il faut écrire une valeur dans une cellule d'excel puis dire au programme de lire la valeur et de la décomposer en partie entière et partie décimale ? Quelles sont les fonctions permettant de séparer le nombre de cette façon ?
 
Merci d'avance de votre aide et excusez mon très faible niveau, je vais y travailler mais je cherche pour l'instant un bouquin correct sur le sujet

Reply

Marsh Posté le 29-10-2007 à 08:31:07   

Reply

Marsh Posté le 29-10-2007 à 09:28:34    

As-tu le droit d'utiliser des notions non vues en cours ?
Le mod n'est pas indispensable à l'exercice 2.8 : il suffit que le résultat soit un nombre entier ; on retombe alors sur le même type de travail que pour le 2.9.
 
Dans l'exercice 2.9, obtenir la partie décimale ça n'est jamais que soustraire la partie entière au nombre d'origine. Si tu sais obtenir cette partie entière, tu as résolu l'exercice.

Reply

Marsh Posté le 29-10-2007 à 10:20:18    

Tout d'abord merci pour ta réponse

 

Et oui on a tout à fait le droit mais je ne vois absolument pas comment résoudre l'exercice 2.8 avec le principe du 2.9 ?


Message édité par Paul92300 le 29-10-2007 à 10:25:08
Reply

Marsh Posté le 29-10-2007 à 10:40:12    

Pour résoudre le 2.8, il suffit de comparer le résultat de nombre / 9 à sa partie entière.
exemple : 85 est-il divisible par 9 ?
85 / 9 =  9,44444444444444
partie entière = 9
9 <>  9,44444444444444 donc 85 n'est pas divisible par 9
Tout le problème se trouve donc concentré dans la question de savoir comment récupérer la partie entière d'un nombre.
Et ça te servira directement pour le 2.9
edit : mais si tu peux utiliser mod, ne te gêne surtout pas !


Message édité par tegu le 29-10-2007 à 10:42:13
Reply

Marsh Posté le 29-10-2007 à 14:51:10    

Alors...
Déjà, un concept algorithmique de base, c'est de bien séparer le fonctionnel de l'affichage (Là, je t'accorde volontiers que pour une ligne de code dans la fonction, c'est pas indispensable)
Du coup, pour le 2.8, j'aurais fait une procédure qui gère la partie interaction utilisateur, et une fonction booléene
VBA est un langage évolué, du coup, tu peux directement affecter une expression à ta fonction
J'ai fait un exemple vite fait d'un exemple de structure (de toute façon, tu avais déjà trouvé qu'il fallait se servir du modulo)
Là dedans, reste à faire une petite gestion d'erreur, ou des tests sur ce qui est entré par l'utilisateur pour que ça soit vraiment clean
 
Public Sub ex_2_8()
Dim nombre As Integer
    nombre = CInt(InputBox("Nombre à tester ?" ))
    MsgBox IIf(isDivisiblePar9(nombre), "Divisible par 9", "Non divisible par 9" )
End Sub
 
Private Function isDivisiblePar9(n As Integer) As Boolean
    isDivisiblePar9 = n Mod 9 = 0
End Function
 
Pour le 2.9, il doit y avoir plusieurs façons de faire
L'une d'ellle serait par exemple  de convertir ton réel en chaine de caractère (fonction CStr), et de récupérer la partie avant le séparateur décimal, et après
Là encore, plusieurs façons de faire, soit tu parcours caractère par caractère, soit tu affectes à un tableau en séparant sur le séparateur décimal à l'aide de la fonction split
Et comme un exemple vaut parfois toutes les explications :
 
Sub test()
Dim tbl() As String
Dim nbStr As String
    nbStr = CStr(2.000868)
    tbl() = Split(nbStr, "," ) 'Séparateur décimal à déterminer
    MsgBox tbl(0) 'renvoie 2
    MsgBox tbl(1) 'renvoie 000868
End Sub
 
En espérant que ça ait pu t'aider !

Reply

Marsh Posté le 29-10-2007 à 16:07:33    

devil, on n'est pas vraiment là pour faire les exercices hein  :non:  
on donne des idées, la fonction à étudier, mais si on commence à filer l'exo tout fini, on est parti pour faire du "fais moi ci, fais moi ca"... d'ac ?

Reply

Marsh Posté le 29-10-2007 à 17:10:59    

Ils sont pas faits ses exos
Le principe du 2.8 était compris d'après son premier post, le but était juste d'expliquer quelques notions d'algorithmique
Pour le 2.9, comme ma pédagogie est limitée, j'ai mis un exemple de code pour illustrer ce que je tentais vainement d'expliquer
En gros, je tentais de mettre à disposition des outils qui lui permettront de faire ses exercices correctement, parceque mine de rien, quand on débute, les fonctions on les devine pas
 
Bref, desolé si je t'ai froissé :spamafote:

Reply

Marsh Posté le 29-10-2007 à 21:43:48    

Merci beaucoup pour votre aide. Je conçois et suis tout à fait d'accord sur le fait qu'il ne faut pas faire les exos pour lesquels on demande de l'aide et mon but n'est pas de me tourner les pouces en me disant que tout sera résolu ici.  
Je commence le VBA et compte bien faire tous les exercices nécessaires pour arriver à un niveau appréciable.
 
Quoiqu'il en soit merci beaucoup pour votre aide précieuse, devil_k je vais essayer de faire sans la fonction booléenne qui est pour l'instant trop élaborée pour moi mais merci beaucoup de ton aide.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed