Transformer une fonction si en vba

didlicia - 24 févr. 2013 à 16:42
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 - 24 févr. 2013 à 18:31
bonjour,
je suis nouveau dans le forum, merci de m'accueillir et de m'aider pour le problème suivant:
j'utilise la fonction si pour trouver un nom et lorsque ce nom est vrai je met dans la cellule un nombre exemple:
si dans la cellule B2 ce trouve le nom NME mettre la valeur 72; pour RXN mettre 52 etc..
j'ai une 30 de sigles donc plutot que faire un formule super longue je voulais développer un code en vba.
voici un exemple de la formule =SI(Feuil2!B2="NME";72;SI(Feuil2!B2="RXN";52;SI(Feuil2!B2="TOTO";45;0)))

de plus mes sigles seront toujours dans la colonne B et je peu avoir jusqu'a 4000 lignes je voudrais que la macro balaye toute la colonne et quel mette dans la colonne A le nombre associé au sigle.

merci d'avance pour votre aide

didier.

6 réponses

cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
24 févr. 2013 à 17:01
Bonjour,

La fonction SI ne supporte que 7 comparaisons.
Utilises alors une fonction personnalisée.
Dans ta fonction tu te sert de Select Case qui te retournera une valeur en fonction du nom.
Ou bien tu planques tes valeurs dans une plage de ta feuille et tu utilises la fonction RECHERCHE.

Cheyenne
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 févr. 2013 à 17:46
Bonjour,
je chercherais personnellement la flexibilité. J'entends par là la possibilité de faire évoluer les références et leurs valeurs.
Tu en as aujourd'hui 30 ? on va prévoir la possibilité d'en avoir 1000
Pour y parvenir: === >>
1) je dédierais une feuille à cette fin (nommons-la "lexique")
En colonne A de cette feuille : mes références
En colonne B de cette feuille : leur valeur
2)à le trierais cette feuille lexique sur sa colonne A (important)
3) sur ma feuille à traiter , maintenant :
Dans cet exemple : on met dans la colonne B la valeur des références trouvées en colonne A (A toi de modifier ces colonnes et la formule comme tu l'entends)
Je mettrais en cellule B1 la formule suivante :
 =SI(ESTERREUR(RECHERCHEV(A1;lexique!A$1:B$1000;2));"";RECHERCHEV(A1;lexique!A$1:B$1000;2))

formule que j'étirerais vers le bas en tant que de besoin
Dès lors : toute référence apparaissant en colonne A et connue sur feuille lexique provoquera l'affichage, en colonne B, de la valeur qui lui correspond.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 févr. 2013 à 17:54
Salut

"NME mettre la valeur 72"
La mettre où ?
Y a-t il un lien entre B2 et la cellule dans laquelle tu dois mettre ce chiffre (cellule de droite, à la colonne X) ?

Comme le dit Cheyenne, une simple fonction :
Dans un module et en Public, obligatoirement, tu crées une fonction comme celle là :
Public Function xxx(maCellule As Range) As Long
    Select Case maCellule.Text
        Case "NME":    xxx = 72
        Case "RXN":    xxx = 52
        Case "TOTO":   xxx = 45
        Case Else:     xxx = 0
    End Select
End Function
et dans ta feuille, en supposant que ce chiffre aille dans la cellule située dans la colonne C (à droite de la B) et sur la même ligne, tu colles cette instruction d'appel :
= xxx(LC(-1))

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 févr. 2013 à 17:56
Ah, encore mieux ça, ucfoutu.
C'est vrai qu'il vaut mieux avoir un "dictionnaire" plutôt que du code.
Bien vu.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 févr. 2013 à 18:10
salut, jack,
Oui, bien sûr,
on va d'ailleurs perfectionner la formule, ainsi :
=SI(ESTERREUR(RECHERCHEV(A1;lexique!A$1:B$12;2;FAUX));"";RECHERCHEV(A1;lexique!A$1:B$12;2;FAUX))

ce qui permettra d'ignorer des références qui n'existeraient pas sur la feuille lexique.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
24 févr. 2013 à 18:31
> Jack, bonjour, c'est exactement le code auquel pensais.

> ucfoutu, bonjour, c'est également ce que j'envisageais avec la fonction RECHERCHE.

Mais, évidemment, question flexibilité en cas d'ajout de références, il est plus rapide de remplir des cellules que d'écrire du code avec des Select Case et de plus RECHERCHEV est sûrement plus véloce que le traitement de la fonction personnalisée.

Bonne soirée,

Cheyenne
0
Rejoignez-nous