Excel VBA

Résolu
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. 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
    1. 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
      1. 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
        1. up please
          lorsque je met "=caf(les 3 cellules)"
          je n'ai pas de valeur
          merci
          0
          1. 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
            1. 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
              1. c bon pas de souci g resolu le probleme par contre je sais pas comment
                merci pour tout
                0
                1. 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
                  1. 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
                    1. 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. arg3 tu avais écris argr3.
                        donc comme tu utilisais arg3 ...mauvaise pioche il restait vide car jamais renseigné
                        0
                    2. 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
                      1. merci pour tout ca fonctionne comme je le voulais
                        un grand merci bidouilleur
                        0
                        1. tu penses à mettre en résolu ou signale - le à un modérateur... il le fera.
                          merci
                          Bonne journée.
                          R
                          0