XL 2019 Calcul majoration

julien1982

XLDnaute Occasionnel
Bonjour a toutes et a tous,
tout d'abord merci pour votre aide qui est tjs aussi efficace et rapide.
Je vous explique mon pb:

je suis en train de faire un fichier permettant de réaliser le pointage de mon équipe (fichier joint).

Dans ce fichier, avec pleins de formules assez simples, je n'arrive a recuperer les heures majorées.

dans la colonne AD, je souhaite que si dans la colonne I on retrouve le numéro de chantier qui est dans la colonne AB, alors il faut la somme de (($S$15+$S$22+$S$29+$S$36+$S$43)*0.25+($T$15+$T$22+$T$29+$T$36+$V$15+$V$22+$V$29+$V$36+$V$43+$T$43)*0.5+($W$15+$W$22+$W$29+$W$36+$W$43)*0.75+$X$15+$Z$15+$X$22+$Z$22+$X$29+$Z$29+$X$36+$Z$36+$X$43+$Z$43))

mais je ne comprend pas pourquoi cela ne marche pas.

J'ai essayé avec sommeprod mais cela ne marche pas.

Merci pour votre aide et vos explications.

Je suis preneur pour toutes amélioration si cela vous semble utile :) mon fichier n'est pas parfait j'en suis sur :)
 

Pièces jointes

  • Pointages 09-21 Remaniement ETAM - forum.xlsm
    90.7 KB · Affichages: 9

sousou

XLDnaute Barbatruc
Une fonction perso par exemple
=maj(AB13)

Function maj(k)
Application.Volatile
colmaj = Array(19, 20, 22, 23, 24, 26)
majoration = Array(0.25, 0.5, 0.5, 0.75, 1)
Set zone = k.Parent.Range("i9:i50")
For Each i In zone
If i.Value = k.Value Then

For ncol = 0 To UBound(colmaj) - 1
s = s + (k.Parent.Cells(i.Row, colmaj(ncol))) * majoration(ncol)

Next
End If
Next
maj = s
End Function
 

julien1982

XLDnaute Occasionnel
Une fonction perso par exemple
=maj(AB13)

Function maj(k)
Application.Volatile
colmaj = Array(19, 20, 22, 23, 24, 26)
majoration = Array(0.25, 0.5, 0.5, 0.75, 1)
Set zone = k.Parent.Range("i9:i50")
For Each i In zone
If i.Value = k.Value Then

For ncol = 0 To UBound(colmaj) - 1
s = s + (k.Parent.Cells(i.Row, colmaj(ncol))) * majoration(ncol)

Next
End If
Next
maj = s
End Function
Merci je vais essayer ca. C'est possible sans macro sinon?
 

julien1982

XLDnaute Occasionnel
Une fonction perso par exemple
=maj(AB13)

Function maj(k)
Application.Volatile
colmaj = Array(19, 20, 22, 23, 24, 26)
majoration = Array(0.25, 0.5, 0.5, 0.75, 1)
Set zone = k.Parent.Range("i9:i50")
For Each i In zone
If i.Value = k.Value Then

For ncol = 0 To UBound(colmaj) - 1
s = s + (k.Parent.Cells(i.Row, colmaj(ncol))) * majoration(ncol)

Next
End If
Next
maj = s
End Function
Par contre, je ne comprend pas comment ca fonctionne dsl :(
 

sousou

XLDnaute Barbatruc
Bonjour
Pas trop doué sur les formules c'est la raison pour laquelle je te propose cette fonction, Mais sur que quelqu'un va te proposer quelque-chose!
Comment cela fonctionne:?
k représente la valeur à rechercher ici n Chantier
Function maj(k)
Application.Volatile
colmaj = Array(19, 20, 22, 23, 24, 26) 'Colmaj représente un tableau définissant les colonne concernées par la 'majoration
majoration = Array(0.25, 0.5, 0.5, 0.75, 1) 'majoration est aussi un tableau en relation avec colmag
' exemple: la colonne 19 (s) sera majorée de 0.25, la 20 de 0.5

Set zone = k.Parent.Range("i9:i50")
For Each i In zone 'parcours de la colonne i pour chaque valeur de la zone....
If i.Value = k.Value Then ' si =à k variable passé dans la fonction(k)

For ncol = 0 To UBound(colmaj) - 1 ' on regarde toutes les colonnes concernées, et on fait la somme au 'faire et à mesure multiplier par la majoration.
s = s + (k.Parent.Cells(i.Row, colmaj(ncol))) * majoration(ncol)

Next
End If
Next
maj = s 'ici on renvoi la somme calculée
End Function
 

julien1982

XLDnaute Occasionnel
Bonjour
Pas trop doué sur les formules c'est la raison pour laquelle je te propose cette fonction, Mais sur que quelqu'un va te proposer quelque-chose!
Comment cela fonctionne:?
k représente la valeur à rechercher ici n Chantier
Function maj(k)
Application.Volatile
colmaj = Array(19, 20, 22, 23, 24, 26) 'Colmaj représente un tableau définissant les colonne concernées par la 'majoration
majoration = Array(0.25, 0.5, 0.5, 0.75, 1) 'majoration est aussi un tableau en relation avec colmag
' exemple: la colonne 19 (s) sera majorée de 0.25, la 20 de 0.5

Set zone = k.Parent.Range("i9:i50")
For Each i In zone 'parcours de la colonne i pour chaque valeur de la zone....
If i.Value = k.Value Then ' si =à k variable passé dans la fonction(k)

For ncol = 0 To UBound(colmaj) - 1 ' on regarde toutes les colonnes concernées, et on fait la somme au 'faire et à mesure multiplier par la majoration.
s = s + (k.Parent.Cells(i.Row, colmaj(ncol))) * majoration(ncol)

Next
End If
Next
maj = s 'ici on renvoi la somme calculée
End Function
Dacc je comprend mieux la. Du coup je met ça dans le vba et ensuite dans ma cellule je tape quoi? 🙄
 

julien1982

XLDnaute Occasionnel
Tu tapes ceci pour la ligne 13 par exemple et tu copie la formule comme tu leferai avec une formule classique
=maj(AB13)
C'est ce que e viens de faire mais cela ne fonctionne pas :(. Comme tu peux le voir entre I23 et I29 j'ai des heures de nuits mais celles ci ne sont pas comptabilisées...:(
 

Pièces jointes

  • Pointages 09-21 Remaniement ETAM - forum.xlsm
    91.8 KB · Affichages: 2

Statistiques des forums

Discussions
311 724
Messages
2 081 938
Membres
101 844
dernier inscrit
pktla