Pb function en VBA excel

Fermé
Patosh31 Messages postés 4 Date d'inscription vendredi 7 septembre 2012 Statut Membre Dernière intervention 5 avril 2019 - 2 nov. 2016 à 18:49
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 3 nov. 2016 à 08:27
Bonjour,

Je souhaite utiliser une fonction dans excel en vba, sauf que je n'arrive pas à appeler cette fonction.

est ce que je peux la mettre dans un programme en sub puis exit sub?

je cale.

Merci de votre aide.

Cordialement

Function MaSomme(un As Integer, deux As Integer, trois As Integer, quatre As Integer, cinq As Integer) As Integer

' déclaration des variables
Dim un As Integer
Dim deux As Integer
Dim trois As Integer
Dim quatre As Integer
Dim cinq As Integer
Dim somme As Integer
' découpage lettre à lettre
nom1 = Mid(Range("b1"), 1, 1)
nom2 = Mid(Range("b1"), 2, 1)
nom3 = Mid(Range("b1"), 3, 1)
nom4 = Mid(Range("b1"), 4, 1)
nom5 = Mid(Range("b1"), 5, 1)
'définition d'un score s'il y a correspondance ou pas
If nom1 = "T" Then un = 0.5 Else un = -0.25
If nom2 = "G" Then deux = 0.5 Else deux = -0.25
If nom3 = "T" Then trois = 0.5 Else trois = -0.25
If nom4 = "A" Then quatre = 0.5 Else quatre = -0.25
If nom5 = "A" Then cinq = 0.5 Else cinq = -0.25


MaSomme = un + deux + trois + quatre + cinq

Range("a15") = MaSomme



End Function


A voir également:

2 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 258
2 nov. 2016 à 19:15
Bonjour,

Ben oui, si tu écris n'importe quoi ça ne risque pas de fonctionner.
Il faut te renseigner et apprendre au minimum les bases.
Il y a tellement d'erreurs et d'incongruités qu'il faudrait 3 page pour t'expliquer.
Voilà à quoi elle pourrait ressembler :
Function MaSomme(nom As Range) As Double
' déclaration des variables
Dim un As Double
Dim deux As Double
Dim trois As Double
Dim quatre As Double
Dim cinq As Double
Dim somme As Double
' découpage lettre à lettre
nom1 = Mid(Range("b1"), 1, 1)
nom2 = Mid(Range("b1"), 2, 1)
nom3 = Mid(Range("b1"), 3, 1)
nom4 = Mid(Range("b1"), 4, 1)
nom5 = Mid(Range("b1"), 5, 1)
'définition d'un score s'il y a correspondance ou pas
If nom1 = "T" Then un = 0.5 Else un = -0.25
If nom2 = "G" Then deux = 0.5 Else deux = -0.25
If nom3 = "T" Then trois = 0.5 Else trois = -0.25
If nom4 = "A" Then quatre = 0.5 Else quatre = -0.25
If nom5 = "A" Then cinq = 0.5 Else cinq = -0.25
MaSomme = un + deux + trois + quatre + cinq
End Function

A mettre dans un module Standard
Et dans une cellule :
=masomme(B1)

eric
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 258
3 nov. 2016 à 08:27
edit oubli :
remplacer :
nom1 = Mid(Range("b1"), 1, 1)
nom2 = Mid(Range("b1"), 2, 1)
nom3 = Mid(Range("b1"), 3, 1)
nom4 = Mid(Range("b1"), 4, 1)
nom5 = Mid(Range("b1"), 5, 1)
par :
nom1 = Mid(nom, 1, 1)
nom2 = Mid(nom, 2, 1)
nom3 = Mid(nom, 3, 1)
nom4 = Mid(nom, 4, 1)
nom5 = Mid(nom, 5, 1)
Heureusement que JvDo a l'oeil ;-)
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
3 nov. 2016 à 00:41
Bonsoir à tous,

Sauf si tu dois absolument utiliser ta fonction avec les Mid et les If, tu peux envisager de faire des économies de caractères :
Function MaSomme_bis(nom As Range) As Double
    MaSomme_bis = -1.25 - 0.75 * ((nom Like "T*") + (nom Like "?G*") + (nom Like "??T*") + (nom Like "???A*") + (nom Like "????A"))
End Function

Pour le reste, tu suis les indications de eriiic.

Cordialement
0