IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Etendre une formule sur lignes et colonnes multiples [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut 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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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)

    Anyone help please ?

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

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je ne comprends pas ce que tu veux. Où se trouvent les calculs "à la main" ? Si c'est le calcul de E4 qui te manque, qu'est-ce qui t'empêche de tirer la cellule vers la droite ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Les calculs à la mains sont sur la feuille "TabCatégorie1" et se trouvent dans la cellule :
    B4 --> étendu jusqu'à la fin = OK
    C4 et B4 sont faites à la main également, puis étendues
    Mais je n'arrive pas à étendre vers à droite (D4, E4, etc) car la formule ne prends plus les bonnes données.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bizarre; en re-tirant la formule, ça redevient correct...
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Les résultats sont corrects en tirant vers le bas.
    Mais en tirant vers la droite ça ne fonctionne pas, en tout cas quand je le fais

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    En E5, par exemple, j'obtiens ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Rémunération($A5;Catégorie1!F$5;Catégorie1!G$5;Catégorie1!H$5;Catégorie1!I$5;Catégorie1!J$5)
    Qu'est-ce qui ne va pas ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Je me suis mal exprimé je pense

    En B4 j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Rémunération($A6;Catégorie1!D$7;Catégorie1!E$7;Catégorie1!F$7;Catégorie1!G$7;Catégorie1!H$7)

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Vérifie cette formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Rémunération(DECALER(TabCatégorie1!$D$1;COLONNE()+1;0);DECALER(TabCatégorie1!$E1;COLONNE()+1;0);DECALER(TabCatégorie1!$F1;COLONNE()+1;0);Catégorie1!F$4;DECALER(TabCatégorie1!$G1;COLONNE()+1;0);DECALER(TabCatégorie1!$H1;COLONNE()+1;0))
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Merci Daniel c'est ce que je cherchais !

    Il me manque toutefois une étape :
    J'étends la formule vers le bas sans problème car j'ai un nombre de lignes fixe dans la feuille TabCat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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")
    Ensuite je dois étendre vers un nombre de colonne variable "Nbr"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nbr = Range("Cat1!B4").End(xlUp).Offset(1, 0)
    Range("B4:B404").Select
        Selection.AutoFill Destination:=Range("C4:" & Nbr)
    Ma syntaxe n'est pas bonne

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    J'ai un problème avec les deux codes; peux-tu mettre ton classeur actuel en PJ ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Voici, et merci d'avance !

    http://www.2shared.com/file/kGXPIe1h/Test5.html

    (Attention à bien cliquer sur le petit bouton download en bas et non pas le gros (pub))


    Par la suite, je souhaite créer un graphique pour ces données sur l'onglet "CCat1".
    J'ai tenter d'utiliser DECALER, mais je n'arrive pas à ce qu'il prenne mon nombre variable de colonnes dans "TabCat1"

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 763
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Est-ce que par hasard tu ne ferais pas référence à des cellules contenues dans un tableau croisé dynamique.
    Si c'est le cas, il faudrait sans doute voir du côté de cette fonction LIREDONNEESTABCROISDYNAMIQUE
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  13. #13
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Quel résultat dois-tu obtenir dans la variable "Nbr" ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  14. #14
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Dans la variable Nbr j'aimerais "TabCat1!AJ" (pour le cas du fichier Test5.xlm

    Le but étant, depuis la sélection de première colonne de calculs ("B4:B404"), d'étendre le calcul jusqu'à "AJ" (donc "AJ4:AJ404" dans ce cas d'exemple)

    Je regarde la fonction de Philippe en parallèle.

  15. #15
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Sheets("TabCat1").Select
        nbr = Sheets("Cat1").Cells(Rows.Count, 1).End(xlUp).Row - 2
        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")
        Range("B4:B404").Select
        Selection.AutoFill Destination:=Range("B4:B404").Resize(, nbr)
    Ensuite, ôte les "Select" qui ralentissent l'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  16. #16
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Impeccable !

    Il reste une colonne de "0" en "AK" après la dernière colonne utile "AJ" mais le code est nickel.

    Merci encore !

  17. #17
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Je reviens sur le sujet car ce bout de code ne fonctionne plus !
    j'ai réessayé : il incrémente mais les résultats restent comme celui de la première cellule...

    Ceci est le cas également sur mes anciennes versions de mon fichier

  18. #18
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Tout va bien, l'option "calcul automatique" s'était désactivée, je ne sais pas la raison...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Etendre une formule sur une plage filtrée
    Par sophie_2525 dans le forum Excel
    Réponses: 5
    Dernier message: 07/12/2016, 11h45
  2. Réponses: 2
    Dernier message: 19/03/2014, 14h47
  3. Etendre une formule une ligne sur deux
    Par youss_kkk dans le forum Excel
    Réponses: 4
    Dernier message: 14/06/2011, 09h44
  4. Recopier une formule sur x lignes
    Par marco361020 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/01/2008, 10h07
  5. Réponses: 4
    Dernier message: 10/07/2007, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo