Excel VBA

Résolu
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -  
Bidouilleu_R Messages postés 1209 Statut Membre -
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

15 réponses

  1. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    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
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  3. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    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
  4. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    up please
    lorsque je met "=caf(les 3 cellules)"
    je n'ai pas de valeur
    merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    up please
    0
  7. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  8. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    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
  9. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    c bon pas de souci g resolu le probleme par contre je sais pas comment
    merci pour tout
    0
  10. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  11. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    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
  12. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    je regarde.
    0
  13. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    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
    1. Bidouilleu_R Messages postés 1209 Statut Membre 296
       
      arg3 tu avais écris argr3.
      donc comme tu utilisais arg3 ...mauvaise pioche il restait vide car jamais renseigné
      0
  14. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  15. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    merci pour tout ca fonctionne comme je le voulais
    un grand merci bidouilleur
    0
  16. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    tu penses à mettre en résolu ou signale - le à un modérateur... il le fera.
    merci
    Bonne journée.
    R
    0