Problème pour créer une fonction sous excel - VB/VBA/VBS - Programmation
Marsh Posté le 02-06-2010 à 10:51:39
On va pas faire ton exo à ta place. Donc soit tu expliques ce que tu as fait et où tu bloques précisément soit tu t'abstiens.
Marsh Posté le 02-06-2010 à 13:13:15
Inutile d'être aussi agressif.
Ce n'est pas un exercice mais une partie de celui-ci. J'ai réussi à faire le reste toute seul, mais là je suis bloquée : je ne vois absolument pas comment faire. Bien entendu, j'ai fait une recherche google pour trouver comment faire, mais, dans la mesure où je n'ai rien trouvé, je me suis permise de poster ici.
Voilà ce que j'ai essayé de faire, mais je suis pratiquement certaine que ce n'est absolument pas bon :
Code :
|
Voilà, merci à ceux qui accepterait de m'aider, et encore une fois, je ne demande pas qu'on me fasse l'exercice, juste à ce qu'on m'aide...
Marsh Posté le 02-06-2010 à 13:22:25
JessicaPOP a écrit :
|
Pas de problème mais comprends bien que d'après ton 1er post on dirait que tu veux qu'on te fasse l'exo vu que tu n'expliques pas ce que tu as fait.
JessicaPOP a écrit : Voilà ce que j'ai essayé de faire, mais je suis pratiquement certaine que ce n'est absolument pas bon |
Tu ne peux pas tester pour voir si ça marche ou pas ? Ca serait plus facile pour nous si tu disais où ça plante/marche pas.
Et mets ton code entre les balises [ code=vb] ... [ /code] (sans les espaces) ça sera plus lisible.
Ta 1ere boucle For ne va pas déjà. Tu ne vérifies que si la 1ere lettre est T. De plus si tu trouves un truc bon il faut sortir de la boucle pour éviter de remettre la variable à False à l'itération suivante.
Marsh Posté le 02-06-2010 à 13:52:26
Ok merci !
J'ai testé, et le compteur me donne toujours 0 en résultat, quoi que j'écrive.
Citation : Ta 1ere boucle For ne va pas déjà. Tu ne vérifies que si la 1ere lettre est T. De plus si tu trouves un truc bon il faut sortir de la boucle pour éviter de remettre la variable à False à l'itération suivante. |
Qu'entends-tu par là ? Comment sortir de la boucle ?
Je pense qu'il faudrait que je reprenne toute la question car ce que j'ai fait ne me semble pas bon. Vous ne savez pas où je pourrais trouver un cour simple sur la réalisation de ce type de question ?
PS : j'ai édité mon post pour que cela soit plus lisible.
Marsh Posté le 02-06-2010 à 14:03:39
JessicaPOP a écrit : 1° Qu'entends-tu par là ? Comment sortir de la boucle ? |
1° En gros (je remplace par un autre exemple) la boucle teste chaque caractère pour savoir si il y a un A dans un mot. Si il en trouve un il met la variable à TRUE mais il continue de tester le caractère suivant ça sera pas un A donc il remettra un FALSE par dessus.
Il faut faire un "Exit For" pour sortir si on a trouvé. Et à mon avis il doit bien exister un méthode style "contains" pour voir si une lettre est contenue dans une chaine de caractères.
2° C'est de la programmation en général ce problème, c'est plus de l'algorithmie qu'un problème particulier. Donc il n'y aura pas de cours qui traite exactement de ce sujet.
Marsh Posté le 02-06-2010 à 14:12:36
Hmm ok. Je vois le problème mais je ne sais pas comment le résoudre.
Dieu soit loué, je ne me dirige pas vers des études en progammation... C'est le dernier exercice que je dois faire (probablement de ma vie )
Marsh Posté le 02-06-2010 à 14:32:39
Ah ! Je pense que pour résoudre mon problème, il me faudrait savoir comment indiquer : "Le mot doit contenir la lettre X"
Comment réaliser cette tâche ?
Edit : c'est un peu ce que tu viens de m'expliquer en fait... Où je met le Exit for ? Si je le met à la place du for, ça va m'indiquer une erreur.
Marsh Posté le 02-06-2010 à 14:45:59
Code :
|
A la syntaxe près.
Mais pour le "contient" : http://silkyroad.developpez.com/VB [...] eres/#LI-E
InStr retourne 0 s'il ne trouve pas.
Marsh Posté le 02-06-2010 à 15:20:44
Wha 68 lignes pour une reduction... Font pas rire les exos !
Comme le dit Deamon le souci n'est qu'algorithmique. Vu ton code tu as deja quelques bases. Ca ne devrait pas etre si compliqué si tu poses bien ton algo.
Si les indices ne sont que des indices et pas une obligation, ce que j'espère...
(Deux booleens pour tester l'existence de deux lettres... Excelent... Heureusement qu'il n'y a pas 15 lettres a tester...
Pis alors le mid() pour voir si une lettre est dans une chaine... Ca ne se fait plus depuis 2000...)
Code :
|
Explications :
ligne 2 : on le definit de base vu que si aucune de nos conditions est remplie, c'est 2
ligne 4 : ici on est deja dans le Si du test sur "T" est ok. Donc cette ligne c'est forcement pour "T" ET "W". Deux Si imbriqués.
ligne 6 : ici on est aussi dans le Si du test sur "T", mais pour le PAS ok. Donc cette ligne c'est forcement QUE "W"
ligne 8 : c'est clair je pense. On aurait pu le mettre au debut ca n'aurait rien changé. Meme si Neant a un "T". Avec nos Si imbriqués, pas de souci, ca ne serait pas passé dedans.
ligne 10 : on donne a la fonction la valeur du resultat, reduction effectuée, pour qu'elle la renvoit.
Le "est dans" se 'traduit' comme l'a dit Deamon par InStr<>0
Marsh Posté le 02-06-2010 à 16:27:47
Un grand merci pour votre aide !
J'ai pratiquement finit, une 2 dernières petites questions :
-Je n'ai pas compris comment utiliser InStr<>0 pour traduire le "est dans". Par exemple, si je cherche la lettre x, il faut écrire quoi ? InStr = x ?
-Pour le nom de la fonction, j'ai pas compris ce que je devais écrire.
Marsh Posté le 02-06-2010 à 16:41:13
Regarde dans le lien que j'ai mis :
Citation : Utilisez la fonction InStr |
Marsh Posté le 02-06-2010 à 17:35:28
J'ai bien vu ton lien mais je n'ai pas compris comment l'utiliser :
Code :
|
Pourriez-vous m'indiquer directement ce que je dois mettre, car là... j'avoue que je bloque.
Marsh Posté le 02-06-2010 à 17:37:55
Pas compliqué pourtant. InStr renvoie la position de l'élément donc faut tester si ça renvoie 0, si c'est le cas ça voudra dire qu'il ne l'a pas trouvé dedans. Donc If InStr(x, "w" ) = 0 Then ... Else ...
Marsh Posté le 02-06-2010 à 17:55:32
Je t'ai envoyé des infos en message privé JessicaPOP
Attention tout de meme, avec l'exemple de Deamon ca ne marchera pas, InStr tient compte de la casse.
Si tu ne veux pas tenir compte de la casse, et donc chercher sur "w" ou sur "W" il faut ajouter comme dernier parametre "vbTextCompare"
Et je prefere mettre 1 comme premier parametre. Ca specifie que tu commences a regarder des le 1er caractere... Question d'habitude pour ma part.
avec ton exemple ca donnerait plus ceci :
Code :
|
Marsh Posté le 03-06-2010 à 08:51:12
Bonjour, en fait je ne sais pas si cest la que je dois ma question, mais je ne trouve pas dsl.
en fait j'ai un petit examen de EXCEL la semaine prochaine et donc la je "revise un peu": j'aimerai pouvoir enfait inclure les fonction "SI" "ET" et "OU" dans une meme fomrule. jai passé la nuit a la chercher sur internet mais je trouve pas.
je n'ai pas su comment vous montrer directement mon tableau ca serai facile pour vous mais bon.
en fait jai un tableau ou il ya une liste d'etudiant avec des note et des coeficient. je devais calculer les moyennes, ce qui etait facile, mais aussi je dois faire en sorte que dans une meme formule que j'appliquerai a toute la colone, donner des apreciation du style : Si la moyenne de letudiant < 8 : REFUSE ,// si la moyenne >8 et <10 OU SI la moyenne >10 mais une note de letudiant <5 : RATRAPAGE /// SI la moyenne est >10 avec Aucune note <5 : ADMIS .
tout cas dans une meme formule, je ne sais meme pas si c'est possible.
si quelqu'un peut me donner un coup de main je pourrais lui envoyé le classeur directement par mail ..
et dsl pour les erreur dorthographe, , depuis 4h du matin je me bat avec cette formule
merci davance
ps : au fait je suis nouveau donc je ne sais pas vraiement quel sont les regle ici, merci
Marsh Posté le 03-06-2010 à 08:55:53
re salut: je reviens pour tenter de copier seulement le classeur: Le but est d'appliquer la formule sur la cellule F6
NOM /Matière stat éco math moyenne résultat
Coefficient 2 3 1 sur 20 -
DUPONT Henri 12 14 12 13 F6
GRILLE Georges 19 4 15 10,83333333 -
MARTEL Pascale 10 12 7 10,5 -
BRUNEL Paul 8 10 12 9,666666667 -
TARTER Georges 2 11 8 7,5 -
KIMBER Stef 15 13 19 14,66666667 -
ROULEX Paul 14 19 14 16,5 -
PIERRELLE Delphin 3 18 9 11,5 -
SANTISE Corinne 14 15 11 14 -
WINCK Venus 17 12 13 13,83333333 -
Marsh Posté le 03-06-2010 à 10:12:20
Reply
Marsh Posté le 02-06-2010 à 09:50:33
Bonjour, je dois créer des fonctions en VBA, mais je n'arrive pas du tout à la faire fonctionner...
Voici l'intitulé de la question :
(Le code de réduction fait 4 chiffres)
Faire une fonction REDUCTION qui reçoit un paramètre en entrée : le code de réduction. La fonction retourne un entier compris entre 0 et 100 qui correspondra au pourcentage de réduction. Le pourcentage de réduction est calculé de la façon suivante :
si le code est égal à "NEANT", le pourcentage est nul ; si le code contient la lettre W (en majuscule) sans la lettre T (en majuscule), le pourcentage est 10 ; si le code contient les lettres W et T (en majuscules), le pourcentage est 15 ; dans les autres cas, le pourcentage est 2.
Indices : faire une boucle For permettant d'examiner les caractères du code de réduction ; utiliser une variable booléenne (initialisée à FALSE avant la boucle) indiquant la présence d'un W et une variable booléenne (initialisée à FALSE avant la boucle) indiquant la présence d'un T ; on rappelle que Mid(mot, i, 1) permet d'obtenir le caractère situé à la position i dans la chaîne mot.
Pourriez-vous m'aider ?
Merci
Message édité par JessicaPOP le 02-06-2010 à 10:10:52