Face à un problème avec fonction SI (trop longue)

Bonjour à tous,

Je viens vers vous car je suis face à une difficulté avec Excel et la fonction SI, je maitrise la fonction SI "simple", pour les choses simples mais là je suis face à un problème je me creuse la tête mais pas moyen de trouver la bonne formule, Excel me dit qu'elle est trop longue. Je débute dans Excel donc j'aimerais obtenir la bonne formule et surtout avoir les explications avec car le plus important est que je comprenne évidemment. Je vous joins une capture d'écran de mon tableau Excel, ceci n'est en rien un exercice noté mais j'aimerais simplement comprendre, il faut probablement utiliser les fonctions SI, OU, ET voire NON pour résoudre ce problème et éviter les formules interminables.

Merci par avance à vous tous.

excel

J'ai trouvé cela, dites-moi ce que vous en pensez, les résultats semblent corrects ;

Colonne Réduction/Frais de port offerts : =SI(ET(B4>70;C4="OUI");"Réduction et Frais de port offerts";SI(B4>70;"Frais de port offerts";SI(C4="OUI";"Réduction";"Rien")))

Colonne Total à payer : =SI(D4="Réduction";B4*(1-5%)+$H$4;SI(D4="Frais de port offerts";B4;SI(D4="Réduction et Frais de port offerts";B4*(1-5%);B4+$H$4)))

Sachant que j'ai ajouté les frais de port en H4.

Je pense que c'est bon même s'il y a probablement une façon de faire meilleure.

Tes formules sont justes, rien à dire. Mais on peut faire plus simple en supprimant la colonne-mémo "Réduction/Frais de port offert" et en utilisant une formule personnalisée. Elles sont d'une simplicité redoutable : 3 lignes de VBA.

Function REDUCTION(Anciennete As String, montant As Double) As Double
    REDUCTION = montant
    If Anciennete = "OUI" Then REDUCTION = REDUCTION * 0.95
    If montant >= 70 Then REDUCTION = REDUCTION - Range("$H$4")
End Function

Elles sont beaucoup plus facile à comprendre et à maintenir qu'une formule à rallonge.

9reduction.xlsm (17.18 Ko)

Bonjour,

Pour commencer merci à vous pour votre réponse.

Comme je l'ai dit je suis débutant sur Excel, j'ai bien essayé mais je dois bien admettre ne pas comprendre le ; =REDUCTION(C4;B4) dans "Total à payer".

J'avoue que j'aimerais bien la comprendre car cette façon de faire me semble plus simple et surtout davantage rapide.

=REDUCTION, est-ce une fonction ? Car je ne la trouve pas sur Excel.

Pourriez-vous m'expliquer dans les détails s'il vous plaît ? Cela serait vraiment très gentil.

Merci par avance à vous.

On peut donner le nom qu'on veut à une fonction personnalisée à condition de ne pas utiliser un mot réservé par Excel. PUISSANCE est un mot réservé, REDUCTION ne l'est pas. Comme pour toute fonction, on peut passer des paramètres de types différents. Ici, on en a deux : Anciennete qui est du type String (chaîne de caractères) et montant qui est un nombre à virgule flottante.
La fonction personnalisée (en colonne "D") passe le contenu des cellules B (le prix de vente) et C ("OUI" ou "NON"). En D7 tu peux lire =REDUCTION(C7;B7)

Cette fonction compte 3 lignes :

Ligne 1 - On affecte le prix de vente à REDUCTION comme s'il s'agissait d'une variable. Ce prix sera modifié dans les lignes 2 et 3 si les conditions sont remplies.
Ligne 2 - Si le paramètre Ancienneté contient "OUI", on multiplie le prix de vente par 0.95, ce qui correspond à une remise de 5%.
Ligne 3 - Si le montant est >= 70, on retranche de la nouvelle valeur de REDUCTION les frais de port qui se trouvent dans la cellule $H$4. En fin de traitement, la fonction REDUCTION retourne un nombre à virgule flottante correspondant au total à payer.

L'inconvénient du système (il n'a pas que des avantages) : si on change le montant des frais de port en H4 a posteriori, le rafraîchissement de la colonne "Total à payer" ne se fera pas : il faudra le gérer, mais c'est un autre problème.

Un grand merci à vous, je commence à mieux comprendre, j'ai reproduit tout cela sur mon tableau avec Alt +F11 et j'ai inséré le module.

Je vais tout de même avoir besoin d'un certain temps pour réussir et créer un nouveau code adapté à chaque tableau. Il faut prendre le coup.

Bonne soirée.

De rien, bonne continuation.

Bonsoir !

Une proposition avec formules !

J'ai appliqué le franco sur le montant "dépenses" et non sur le net.

@Optimix : Je pense que note ami considère que le port éventuel est à ajouter et non à retrancher du montant des dépenses.

4facturation.xlsx (11.83 Ko)

Tu as raison, la ligne 3 s'écrit :

If montant < 70 Then REDUCTION = REDUCTION + Range("$H$4")

Bonjour à vous deux,

En effet mais j'avais déjà modifié cela hier lorsque vous avez eu la gentillesse de me répondre.

Une nouvelle fois merci et bonne continuation à vous également.

Rechercher des sujets similaires à "face probleme fonction trop longue"