Excel VBA

Résolu/Fermé
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 6 juil. 2009 à 14:30
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 - 7 juil. 2009 à 15:11
Bonjour,
Je dois créer une fonction sous excel qui selon la valeur de 3 cellules me retourne un résultat.
en gros voila ce que j'ai pour le moment mais bien entendu cela ne fonctionne pas:
il s'agit de l'affichage d'une valeur pour les 3 conditions(il y aura 12 valeurs en tout)
Function caf()

If [J21] < 19513 Then
If [H21] = 1 Then
If [K21] = O Then
Range(F16).Value = 441.63
Next
Next
Next



End Function

si quelqu'un aurait une idée je suis preneur.
Merci par avance
A voir également:

15 réponses

remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
6 juil. 2009 à 15:07
pour etre peut etre un peu plus clair voila ce qu'il me fait en faisant varier la première condition de 1 à 3 donc du coup 3 fois ça.
mais ca ne fonctionne pas

Function caf()

    If Cells.Value = 1 Then
        If Cells.Value < 19513 Then
            If Cells.Value = O Then
                caf = 441.63
            Else
                If Cells.Value = N Then
                    caf = 220.82
                Next
            Next
        Else
        If Cells.Value > 19513 And Cells.Value < 43463 Then
            If Cells.Value = O Then
                caf = 278.48
            Else
                If Cells.Value = N Then
                    caf = 139.27
                Next
            Next
        Else
        If Cells.Value > 43463 Then
            If Cells.Value = O Then
                caf = 167.07
            Else
                If Cells.Value = N Then
                    caf = 83.54
                Next
            Next
        Next
    Next




End Function

merci d'avance
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
6 juil. 2009 à 16:13
bonjour,

c'est une nonne idée d'utiliser une fonction.
mais la formulation est incorrecte.
j'utiliserai un passage de paramètres...
comme ça.
ensuite tu pourras adapter les valeurs des arguments
par exemple tu mets x=caf(range("H11"),range("J11"),Range("K11"))


Sub test()
X = caf(19513, 1, "O")
End Sub

Function caf(arg1 As Variant, arg2 As Integer, argr3 As String) As Variant
mavaleur = "OK" 'pour tester
If arg1 < 19513 Then
'cas ou arg1 <19513

If arg2 = 1 Then
'arg2 =1
If arg3 <> "O" Then
'arg3 ne contient pas O
'je fais ceci cela
caf = mavaleur
Else
'arg3 contient "O"
'idem pour le boulot
caf = mavaleur
End If

Else
'arg2 a une autre valeur
If arg3 <> "O" Then
'arg3 ne contient pas O
caf = mavaleur
Else
'arg3 contient "O"
caf = mavaleur
End If
End If
ElseIf arg1 > 19513 And arg1 < 43363 Then
'cas ou est supérieur à 19513 et inférieur ...
If arg2 = 1 Then
'arg2 =1
If arg3 <> "O" Then
'arg3 ne contient pas O
caf = mavaleur
Else
'arg3 contient "O"
caf = mavaleur
End If

Else
'arg2 a une autre valeur
If arg3 <> "O" Then
'arg3 ne contient pas O
caf = mavaleur
Else
'arg3 contient "O"
caf = mavaleur
End If

End If



Else
'les autres cas ici
If arg2 = 1 Then
'arg2 =1
If arg3 <> "O" Then
'arg3 ne contient pas O
caf = mavaleur
Else
'arg3 contient "O"
caf = mavaleur
End If
Else
'arg2 a une autre valeur
If arg3 <> "O" Then
'arg3 ne contient pas O
caf = mavaleur
Else
'arg3 contient "O"
caf = mavaleur
End If
End If

End If




End Function
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
6 juil. 2009 à 18:12
merci pour ta réponse
je vois biens ce que tu veux me faire voir cependant je ne vois pas comment je fai appel à ma fonction dans ma feuille ???
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
6 juil. 2009 à 19:40
up please
lorsque je met "=caf(les 3 cellules)"
je n'ai pas de valeur
merci
0

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

Posez votre question
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
6 juil. 2009 à 21:06
up please
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
6 juil. 2009 à 21:28
une macro pour tester
Sub test()
' x: variable qui reçoit le résultat de la fonction : 1 résultat et 1 seul.
'X=caf(un variant,un entier,une chaine)
'si les différentes tests donne une solution alors caf prend la valeur d'un variant (chaine ou chiffre)
'dans mon cas je lui retourne ok mais tu pourrais avoir 88.5 ou vrai
X = caf(19513, 1, "O")
'les cellules que tu testes sont en H, J, K
'tu as donc le droit d'écrire
X=caf(range("H11"),range("J11"),Range("K11"))

End Sub

Dans la fonction, je n'ai fait que t'écrire les différents cas possibles Mais dans tous les cas elle renvoie OK , en fait c'est à toi d'adapter.
Si tu as besoin de plus d'infos....
tu le dis.
A+
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
6 juil. 2009 à 23:04
j'arrive à voir le message ok a l'aide d'une msgbox mais je vois pas comment faire apparaitre ok dans la cellule desirée
merci
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
6 juil. 2009 à 23:07
c bon pas de souci g resolu le probleme par contre je sais pas comment
merci pour tout
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
7 juil. 2009 à 08:15
bonjour,
je vois que tu travailles tard.
pour écrire dans une cellule...tu fais.
range("M11").value=caf(range("H11"),range("J11"),Range("K11"))
tout simplement.
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
7 juil. 2009 à 12:40
voila j'ai fini de mettre toute les valeurs dont j'ai besoin mais lorsque j'utilise ma fonction dans ma feuille j'ai une erreur me disant bloc if sans end if et quand je met les endif il me dit if sans else

voila mon code (il est long désolé)

Function caf(arg1 As Variant, arg2 As Integer, argr3 As String) As Variant

If arg1 < 19513 Then
'cas ou arg1 <19513

    If arg2 = 1 Then
    'arg2 = 1 enfant

        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 220.82
        Else

        'arg3 = moins de 3 ans
        caf = 441.63
        End If
    End If


Else
If arg1 < 22467 Then
    If arg2 = 2 Then
    'arg2 = 2 enfants

        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 220.82
        Else

        'arg3 = moins de 3 ans
        caf = 441.63
        End If
    End If

    
Else
If arg1 < 26010 Then
    If arg2 = 3 Then
    'arg2 = 3 enfants

        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 220.82
        Else

        'arg3 = moins de 3 ans
        caf = 441.63
        End If
    End If

 
Else
If arg1 > 19513 And arg1 < 43363 Then
'cas ou est supérieur à 19513 et inférieur ...
    If arg2 = 1 Then
    'arg2 =1 enfant
        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 139.27
        Else

        'arg3 = moins de 3 ans
        caf = 278.48
        End If
    End If

    
Else
If arg1 > 22567 And arg1 < 49926 Then
    If arg2 = 2 Then
    'arg2 = 2 enfants
        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 139.27
        Else

        'arg3 = moins de 3 ans
        caf = 278.48
        End If
    End If

    
Else
If arg1 > 26010 And arg1 < 57801 Then
    If arg2 = 3 Then
    'arg2 = 3 enfants
        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 139.27
        Else

        'arg3 = moins de 3 ans
        caf = 278.48
        End If
    End If


Else
If arg1 > 43363 Then
'cas ou est supérieur à 43363
    If arg2 = 1 Then
    'arg2 =1 enfant
        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 83.54
        Else

        'arg3 = moins de 3 ans
        caf = 167.07
        End If
    End If

    
Else
If arg1 > 49926 Then
    If arg2 = 2 Then
    'arg2 = 2 enfants
        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 278.48
        Else

        'arg3 = moins de 3 ans
        caf = 139.27
        End If
    End If


Else
If arg1 > 57801 Then
    If arg2 = 3 Then
    'arg2 = 3 enfants
        If arg3 <> "O" Then
        'arg3 = pas moins de 3 ans
        caf = 278.48
        Else

        'arg3 = moins de 3 ans
        caf = 139.27
        End If
    End If

End If

End Function
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
7 juil. 2009 à 14:11
je regarde.
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
7 juil. 2009 à 14:25
en gros moi pour utiliser la fonction je me met sur ma cellule et ecrit: =caf(C10;E10;G10)
chaque cellule fai donc reference à chaque arg du code vba
merci
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
7 juil. 2009 à 14:34
arg3 tu avais écris argr3.
donc comme tu utilisais arg3 ...mauvaise pioche il restait vide car jamais renseigné
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
7 juil. 2009 à 14:32
il y avait des erreurs de syntaxe et une fautes d'hortographe
il faut ecrire
if condition then
elseif autre condition
elseif autre chose

endif
je n'ai pas de bug après correction
A toi de tester


Function caf(arg1 As Variant, arg2 As Integer, arg3 As String) As Variant

If arg1 < 19513 Then
'cas ou arg1 <19513

If arg2 = 1 Then
'arg2 = 1 enfant

If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 220.82
Else

'arg3 = moins de 3 ans
caf = 441.63
End If
End If


ElseIf arg1 < 22467 Then
If arg2 = 2 Then
'arg2 = 2 enfants

If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 220.82
Else

'arg3 = moins de 3 ans
caf = 441.63
End If
End If


ElseIf arg1 < 26010 Then
If arg2 = 3 Then
'arg2 = 3 enfants

If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 220.82
Else

'arg3 = moins de 3 ans
caf = 441.63
End If
End If


ElseIf arg1 > 19513 And arg1 < 43363 Then
'cas ou est supérieur à 19513 et inférieur ...
If arg2 = 1 Then
'arg2 =1 enfant
If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 139.27
Else

'arg3 = moins de 3 ans
caf = 278.48
End If
End If


ElseIf arg1 > 22567 And arg1 < 49926 Then
If arg2 = 2 Then
'arg2 = 2 enfants
If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 139.27
Else

'arg3 = moins de 3 ans
caf = 278.48
End If
End If


ElseIf arg1 > 26010 And arg1 < 57801 Then
If arg2 = 3 Then
'arg2 = 3 enfants
If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 139.27
Else

'arg3 = moins de 3 ans
caf = 278.48
End If
End If

ElseIf arg1 > 43363 Then
'cas ou est supérieur à 43363
If arg2 = 1 Then
'arg2 =1 enfant
If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 83.54
Else

'arg3 = moins de 3 ans
caf = 167.07
End If
End If


ElseIf arg1 > 49926 Then
If arg2 = 2 Then
'arg2 = 2 enfants
If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 278.48
Else

'arg3 = moins de 3 ans
caf = 139.27
End If
End If


ElseIf arg1 > 57801 Then
If arg2 = 3 Then
'arg2 = 3 enfants
If arg3 <> "O" Then
'arg3 = pas moins de 3 ans
caf = 278.48
Else

'arg3 = moins de 3 ans
caf = 139.27
End If
End If

End If
End Function
0
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
7 juil. 2009 à 14:59
merci pour tout ca fonctionne comme je le voulais
un grand merci bidouilleur
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
7 juil. 2009 à 15:11
tu penses à mettre en résolu ou signale - le à un modérateur... il le fera.
merci
Bonne journée.
R
0