Aide pour écrire une fonction SI à plusieurs conditions

bonjour,

je n'arrive pas à aboutir à l'écriture d'une fonction SI car j'ai trop d'arguments apparemment.

y aurait-il une solution svp ?

mon besoin est le suivant : calculer un nb de jours en fonction d'un CA et d'un client

si Client = 1, si CA<5000 alors jour = 8, si CA compris entre 5000 et 15000 alors jour = 20, sinon jour = 25

si client = 2, si CA<4500 alors jour = 7, sinon jour = 15

si client = 3, si CA<1000 alors jour =3, si CA compris entre 1000 et 2000 alors jour =5, si CA compris entre 2000 et 3000 alors jour =8, si CA compris entre 3000 et 5000 alors jour = 10, sinon jour = 5000

merci d'avance

Bonjour,

Avec un petit fichier en PJ tu auras surement une réponse

voici un petit fichier test

merci d'avance.

Re,

A tester

super ca fonctionne

est ce je peux rajouter encore des conditions ?

si client = 4 ou 5, jour = 5

si client différent de 1,2,3,4,5, ne pas calculer jour

merci beaucoup

Bonjour,

Une nouvelle proposition avec une fonction personnalisée (VBA°.

Cdlt.

Public Function NBJC(Client, CA As Double) As Long
    NBJC = 0
    Select Case Client
        Case 1
            Select Case CA
                Case Is < 5000: NBJC = 8
                Case Is < 15000: NBJC = 20
                Case Else: NBJC = 25
            End Select
        Case 2
            NBJC = IIf(CA < 4500, 7, 15)
        Case 3
            Select Case CA
                Case Is < 1000: NBJC = 3
                Case Is < 2000: NBJC = 5
                Case Is < 3000: NBJC = 8
                Case Is < 5000: NBJC = 10
                Case Else: NBJC = 5000
            End Select
    End Select
End Function

Re,

A tester

merci beaucoup pour votre réactivité

cela fonctionne parfaitement.

Re,

Avec une petite modification de la fonction.

Cdlt.

Public Function NBJC(Client, CA As Double) As Long

    If Client = "" Or CA = 0 Then
        NBJC = 0
        Exit Function
    End If

    Select Case Client
        Case 1
            Select Case CA
                Case Is < 5000: NBJC = 8
                Case Is < 15000: NBJC = 20
                Case Else: NBJC = 25
            End Select
        Case 2
            NBJC = IIf(CA < 4500, 7, 15)
        Case 3
            Select Case CA
                Case Is < 1000: NBJC = 3
                Case Is < 2000: NBJC = 5
                Case Is < 3000: NBJC = 8
                Case Is < 5000: NBJC = 10
                Case Else: NBJC = 5000
            End Select
        Case 4, 5
            NBJC = 5
    End Select
End Function

Petite contribution avec recherchev

j'utiliserai bien la fonction vba mais je ne sais absolument pas comment l'intégrer au fichier ? je ne l'ai jamais fait.

de plus ce fichier doit ensuite générer un TCD, est ce possible s'il contient une fonction vba ?


A bernard 22, ca a l'air assez simple d'écriture mais je ne comprends pas la syntaxe, besoin d'explication sur la fonction recherchev.

merci

Re,

Peux tu joindre ton classeur?

Cdlt.

A M12,

finalement je privilégie la fonction SI car je ne maîtrise pas vba ou la fonction recherchev.

cependant mes conditions sont au total plus nombreuses :

si Client = 1, si CA<5000 alors jour = 8, si CA compris entre 5000 et 15000 alors jour = 20, sinon jour = 25

si client = 2, si CA<4500 alors jour = 7, sinon jour = 15

si client = 3, si CA<1000 alors jour =3, si CA compris entre 1000 et 2000 alors jour =5, si CA compris entre 2000 et 3000 alors jour =8, si CA compris entre 3000 et 5000 alors jour = 10, sinon jour = 13

si client = 4, si CA <1500 alors jour =4, si CA compris entre 1500 et 5000 alors jour =8, si CA compris entre 5000 et 10000 alors jour =15, sinon ne pas calculer jour

si client = 5, si CA <1000 alors jour =10, si Ca compris entre 1000 et 3000 alors jour = 15, sinon jour =20

si client = 6, si CA<5000, jour = 5, sinonCA compris entre 5000 et 15000 alors jour = 15, sinon jour = 25

si client = 7 ou 8, jour = 5

si client différent, ne pas calculer jour

attention client n'est pas une zone numérique

j'ai compris la formule mais je crains d'oublier des parenthèses, pouvez vous m'aider M12 svp ? merci

M12, un fichier test

a M12

quand je saisi la formule de votre dernier fichier, j'ai le message : impossible d'entrer la formule spécifiée car elle utilise plus de niveaux d'imbrication que ne l'autorise le fichier actuel

?

C'est le limite d'excel.

La solution de Jean-Eric est de loin la plus performante. Il faudrait s'y pencher... Pas de soucis pour de TCD.

Ma solution elle, ressemble à de la "bricole".

Il n'y a pas photos entre les 3 solutions.

Re,

Avec des SI tu es limité et cela devient vite usine à gaz

Privilégie la fonction de JEAN ERIC avec ce mode d'emploi

1 ouvre ton classeur

2 ALT F11 pour ouvrir le développeur

3 clic droit sur Feuil1 par exemple et Insertion/Module (voir + bas)

4 enregistrer le classeur au format *. xlsm (pour prise en charge des macros)

5 copie en A2 la formule à recopier vers le bas

=SIERREUR(nbjc(A2;B2);"")

Option Explicit

Public Function NBJC(Client, CA As Double) As Long
    NBJC = 0
    Select Case Client
        Case 1
            Select Case CA
                Case Is < 5000: NBJC = 8
                Case Is < 15000: NBJC = 20
                Case Else: NBJC = 25
            End Select
        Case 2
            NBJC = IIf(CA < 4500, 7, 15)
        Case 3
            Select Case CA
                Case Is < 1000: NBJC = 3
                Case Is < 2000: NBJC = 5
                Case Is < 3000: NBJC = 8
                Case Is < 5000: NBJC = 10
                Case Else: NBJC = 13
            End Select
         Case 4
            Select Case CA
                Case Is < 1500: NBJC = 4
                Case Is < 5000: NBJC = 8
                Case Is < 10000: NBJC = 15
                Case Is < 5000: NBJC = 10
                Case Else: NBJC = ""
            End Select
          Case 5
            Select Case CA
                Case Is < 1000: NBJC = 10
                Case Is < 3000: NBJC = 15
                Case Else: NBJC = 20
            End Select
          Case 6
            Select Case CA
                Case Is < 5000: NBJC = 5
                Case Is < 15000: NBJC = 15
                Case Else: NBJC = 25
            End Select
          Case 7
            Select Case CA
                Case Is > 0: NBJC = 5
            End Select
          Case 8
            Select Case CA
                Case Is > 0: NBJC = 5
            End Select
     End Select
End Function

merci mais je galère.

j'ai un fichier existant dans un classeur excel qui plus complexe que le fichier test que j'ai indiqué. j'ai juste résumé pour avoir la solution pour mes conditions.

quand j'ouvre le développeur, j'ai une fenêtre, je clique sur une feuille vierge, j'insère module, j'ai une fenêtre qui s'ouvre ds vba

je comprends où copier la formule ?

où mettre =SIERREUR ...?

pourquoi vos noms NBJC, CLIENT, CA ne sont pas identiques aux noms des colonnes du fichier que je vous ai envoyé ?

désolée beaucoup de questions?

merci

re

depuis le dévellopeur sur une feuille , n'impore laquelle

clic droit sur Feuil1 par exemple et Insertion/Module (voir + bas)

et c'est dans le module créé que tu copie le code

après copie simplement la formule

=SIERREUR(nbjc(A2;B2);"") dans la cellule C2 que tu recopie vers le bas

pour le nom nbjc, c'est une fonction tout comme SI, SOMME mais une fonction créée.

j'ai copier le code dans la fenetre et maintenant ?

comment mon fichier de base, enfin la feuille du classeur avec mes données, reconnait la fonction et l'associe à la colonne où j'ai besoin d'afficher le nombre de jours ??

Rechercher des sujets similaires à "aide ecrire fonction conditions"