Excel VBA
Résolu
remousse
Messages postés
299
Date d'inscription
Statut
Membre
Dernière intervention
-
Bidouilleu_R Messages postés 1181 Date d'inscription Statut Membre Dernière intervention -
Bidouilleu_R Messages postés 1181 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Excel VBA
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
15 réponses
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
End Function
merci d'avance
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
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
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
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 ???
je vois biens ce que tu veux me faire voir cependant je ne vois pas comment je fai appel à ma fonction dans ma feuille ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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+
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+
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
merci
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.
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.
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é)
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
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
chaque cellule fai donc reference à chaque arg du code vba
merci
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
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