Etendre une formule sur lignes et colonnes multiples

Bonjour à toutes et à tous,

Voici mon problème :

J'ai une formule qui me permet de calculer la rémunération d'un salarié en fonction de son chiffre d'affaire et de différents critères.

Public Function Rémunération(CA, Smin, Smax, Hmin, Hmax, Taux As Single) As Single
Dim Rému As Single

If CA <= Hmin Then
    Rému = Smin
ElseIf ((CA >= Hmin) And (CA < Hmax)) Then
    Rému = Smin + Taux * (CA - Hmin)
Else:
    Rému = Smax
End If

    Rémunération = Rému

End Function

Avec :

Ca = Chiffre d'Affaire

Smin = salaire min

Smax = salaire max

Hmin = Chiffre d'affaire min de déclenchement de la part variable du salaire

Mmax = Chiffre d'affaire max à partir duquel on atteint le plafond de rémunération

Taux = coefficient de la part variable.

La fonction fonctionne, le problème provient de l'application automatique de cette fonction à X cellules et Y colonnes.

J'ai X salariés, chacun ayant des Smin, Smax, Hmin... différents.

Pour chaque salarié, je souhaite avoir l'évolution de sa rémunération en fonction de son Chiffre d'affaire.

Sur la feuille "Catégorie1" son listés en lignes chaque salarié (cellules vides) avec leurs coefficients respectifs.

Sur la feuille "TabCatégorie1" son listé en colonnes chaque salarié avec l'évolution de leur rémunération calculée avec la fonction "Rémunération"

Mon souci : je n'arrive pas à automatiser ce process

(Sur le document, j'ai fait à la main les trois premiers)

De façon pratique ça donne ceci (sur le fichier Test) :

En B4 j'ai :

=Rémunération($A4;Catégorie1!D$4;Catégorie1!E$4;Catégorie1!F$4;Catégorie1!G$4;Catégorie1!H$4)

En B5 :

=Rémunération($A5;Catégorie1!D$4;Catégorie1!E$4;Catégorie1!F$4;Catégorie1!G$4;Catégorie1!H$4)

En B6 :

=Rémunération($A6;Catégorie1!D$4;Catégorie1!E$4;Catégorie1!F$4;Catégorie1!G$4;Catégorie1!H$4)

etc...

En C4 :

=Rémunération($A4;Catégorie1!D$5;Catégorie1!E$5;Catégorie1!F$5;Catégorie1!G$5;Catégorie1!H$5)

etc...

En D4 :

=Rémunération($A4;Catégorie1!D$6;Catégorie1!E$6;Catégorie1!F$6;Catégorie1!G$6;Catégorie1!H$6)

etc...

Donc je veux en E4 :

=Rémunération($A4;Catégorie1!D$7;Catégorie1!E$7;Catégorie1!F$7;Catégorie1!G$7;Catégorie1!H$7)

En E5 :

=Rémunération($A5;Catégorie1!D$7;Catégorie1!E$7;Catégorie1!F$7;Catégorie1!G$7;Catégorie1!H$7)

En E6 :

=Rémunération($A6;Catégorie1!D$7;Catégorie1!E$7;Catégorie1!F$7;Catégorie1!G$7;Catégorie1!H$7)

Anyone help please ?

(j'ai déjà tenté l'enregistrement de macro, sans succès)

31test.xlsx (38.62 Ko)

Bonjour

Quitte à écrire une formule par cellule, pourquoi passer par une fonction personnalisée alors que tu peux avoir le résultat avec une formule unique

En B4, incrémentée sur tout le tableau de la Feuille TabCatégorie1

=SI($A4<=INDIRECT("Catégorie1!$F"&COLONNE()+2);INDIRECT("Catégorie1!$D"&COLONNE()+2);SI($A4>INDIRECT("Catégorie1!$F"&COLONNE()+2);MIN(INDIRECT("Catégorie1!$E"&COLONNE()+2);INDIRECT("Catégorie1!$D"&COLONNE()+2)+(($A4-INDIRECT("Catégorie1!$F"&COLONNE()+2))*INDIRECT("Catégorie1!$H"&COLONNE()+2)))))

Cordialement

Bonsoir Amadéus et le forum,

J'ai essayé d'appliquer cette formule (sans réussir à la comprendre, je l'avoue) à ma feuille Excel,

mais je n'ai qu'une erreur comme résultat.

Avez-vous essayé avec le document que j'avais joint ?

Bien cordialement

Bonjour

Avez-vous essayé avec le document que j'avais joint ?

Oui, évidemment

Voir fichier

Cordialement

41test.zip (21.38 Ko)

Merci Amadeus cela fonctionne !

Maintenant je bloque à l'étape d'après qui est d'étendre le calcul à toutes les lignes et colonnes (sauf quand il n'y a plus de données)

Première étape ok : j'étends la formule sur toute la colonne B dont le nombre de lignes est fixe

            Sheets("TabCat1").Select
    Range("B4").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC1<=INDIRECT(""Cat1!$F""&COLUMN()+2),INDIRECT(""Cat1!$D""&COLUMN()+2),IF(RC1>INDIRECT(""Cat1!$F""&COLUMN()+2),MIN(INDIRECT(""Cat1!$E""&COLUMN()+2),INDIRECT(""Cat1!$D""&COLUMN()+2)+((RC1-INDIRECT(""Cat1!$F""&COLUMN()+2))*INDIRECT(""Cat1!$H""&COLUMN()+2)))))"
    Range("B4").Select
    Selection.AutoFill Destination:=Range("B4:B404")

Deuxième étape pas ok : étendre la formule sur toutes les colonnes jusqu'au numéro de colonne Nbr variable

              Nbr = Range("Cat1!B4").End(xlUp).Offset(1, 0).Column
    Range("B4:B404").Select
    Selection.AutoFill Destination:=Range("C4", Range(Nbr))

Il s'agit probablement juste de la syntaxe de la dernière ligne de code...

Problème résolu.

Ci-dessous le code pour ceux qui pourraient être intéressés :

With Sheets("TabCat1")
    nbr = Sheets("Cat1").Cells(Rows.Count, 1).End(xlUp).Row - 2
    .Range("B4").FormulaR1C1 = _
        "=IF(RC1<=INDIRECT(""Cat1!$F""&COLUMN()+2),INDIRECT(""Cat1!$D""&COLUMN()+2),IF(RC1>INDIRECT(""Cat1!$F""&COLUMN()+2),MIN(INDIRECT(""Cat1!$E""&COLUMN()+2),INDIRECT(""Cat1!$D""&COLUMN()+2)+((RC1-INDIRECT(""Cat1!$F""&COLUMN()+2))*INDIRECT(""Cat1!$H""&COLUMN()+2)))))"
    .Range("B4").AutoFill Destination:=.Range("B4:B404")
    .Range("B4:B404").AutoFill Destination:=.Range("B4:B404").Resize(, nbr)
End With

Merci !

Rechercher des sujets similaires à "etendre formule lignes colonnes multiples"