Salaires moyens
Bonjour à tous,
J'ai besoin de votre aide pour coder une macro.
Je pars d'une feuille de salaire, que je vous mets en copie, définit par âge et par année. Et à partir de cette feuille j'aimerais récupérer pour chaque âge et par année la moyenne de leur 25 meilleures années de salaire. Evidemment au début, personne n'auras 25 années de salaires, j'aimerais du coup faire la moyenne en diagonale à chaque fois des salaires.
J'espère avoir étais claire si jamais je mets dans le classeur excel un début d'exemple dans la feuille Salaire 25 de ce que j'aimerais obtenir avec un code VBA sachant que ma macro du premier classeur s'appelle Salaire(i,j).
Bonjour,
Pas sûr que ce soit clair pour tout le monde, en tout cas pour moi ça ne l'est pas du tout. Pas compris la méthode de calcul, pas de formule, pas d'explication.
Et votre première macro ou est-elle?
Cdlt
bonjour,
une proposition, si j'ai bien compris ...
Sub aargh()
With Sheets("salaires 25")
For i = 20 To 122
For a = 2 To 100
somme = 0
k = 0
For ma = a To 2 Step -1
nl = i - k
If nl < 20 Then Exit For
somme = Sheets("salaires").Cells(nl, a - k) + somme
k = k + 1
Next ma
If k > 0 Then moyenne = somme / k Else moyenne = 0
.Cells(i, a) = moyenne
Next a
Next i
End With
End Sub
Ma première macro est dans un autre gros classeur, je donne le résultat de cette macro dans la feuille Salaire.
Ce que je souhaite c'est que à partir de ma macro Salaire(i,j) qui donne les salaires par âge et par année des individus(feuille Salaire sur le fichier) faire une moyenne de leurs salaires tout au long de leur vie.
C'est à dire que dans ma feuille Salaire si l'on prend l'individu de 18 ans qui a comme Salaire 23 889,8777 en 2020, l'année en 2021 cet individu aura grandi de 1 an donc correspondra à la ligne 19 pour l'année 2021 et a maintenant comme salaire 24 302,07 je voudrais pour ma nouvelle macro que dans la ligne 19 de la colonne de 2021, il me fasse le calcul : (23889,8777+24302,07)/2. En fait je veux que pour chaque année de cette individu, la macro me recalcule la moyenne des salaires qu'il a eu. J'espère avoir étais plus claire.
Bonjour h2so4,
C'est exactement ça merci beaucoup ! Juste en fait dans mon code j'aimerais ne pas me servir de la feuille Salaire mais de ma macro Salaire(i,j) qui me donne cette feuille savez-vous comment je peux adapter votre code?
Sachant que exactement ma macro Salaire(i,j) est de taille (120,102) et lorsque je l'affiche dans un classeur elle est comme ci-joint dans le fichier(dans l'autre elle était en décalée comme j'avais rajouter les années et les âges en première ligne et première colonne).
Merci d'avance !!
Bonjour à tous
C'est quoi ces 17 premiers à 0 ?
Si la première colonne est le matricule, je doute qu'ils bossent 100 ans...
Une proposition PowerQuery
Edit : bon ce n'était pas clair pour moi la demande donc oubliez...
bonjour,
ma macro Salaire(i,j) qui me donne cette feuille savez-vous comment je peux adapter votre code?
le classeur que tu as fourni ne contient pas de macro (format xlsx)
Oui je sais c'est parce que mon classeur avec la macro est énorme.
J'ai voulu remplacer comme ça mais cela ne me donne pas le même résultat qu'un classeur sans macro. Sachant que du coup ma macro Salaire(i,j) correspond à ma feuille Salaire et que ma macro Tab_Salaire_moy je voudrais que je sois le tableau dans Salaire 25. J'espère être claire.
For j = 1 To 100
For i = 19 To 120
somme = 0
k = 0
For ma = j To 2 Step -1
nl = i - k
If nl < 20 Then Exit For
somme = Tab_Salaires(nl, j - k) + somme
k = k + 1
Next ma
If k > 0 Then moyenne = somme / k Else moyenne = 0
Tab_Salaires_moy(i, j) = moyenne
Next i
Next jre-bonjour,
J'espère être claire.
non, désolé. j'ai déjà dû faire fonctionner ma boule de cristal, mais là elle est un peu dépassée ;o). Sans autre explication sur ce que fait cette macro tab_salaire(_moyen) ? ou sans la voir, je ne peux pas t'aider.
Rebonjour,
mdr bon je vais réessayer, j'avoue être difficile à comprendre x).
Ma macro Salaire(i,j) est un tableau de dim(120,102) et lorsqu'on l'affiche j'obtiens ce qui est dans la feuille "Salaire" de ce fichier excel. Je vous passe mes calculs pour obtenir ces salaires. La moyenne que vous avez calculé tout à l'heure et stocké dans la feuille excel "Salaire 25" j'aimerais que ce soit stocké dans ma macro Salaire_moy(i,j). C'est pour ça que j'aimerais adapter votre code qui donne parfaitement ce que je souhaite mais avec ces deux macro.
Donc si je comprends bien dans votre code au lieu d'aller chercher les données dans la feuille excel "Salaire" j'aimerais qu'on se serve de ma macro Salaire(i,j) qui est exactement le tableau, et au lieu que le résultat soit dans la feuille "Salaire 25", j'aimerais que ce soit dans ma macro Salaire-moy(i,j) que je viens de créer de dimensions (120,102). Je croise les doigts pour que vous compreniez xD.
bonjour,
je pense qu'il y a confusion entre macro et tableau. En supposant que le tableau salaire soit créé par une macro et que ce tableau soit défini comme public de même que le tableau salaire_moy,
voici une adaptation, que je n'ai pas pu tester. (attention, moyenne sur les 25 meilleures années)
Sub aargh()
'macro de calcul du salaire moyen des 25 meilleurs salaires
For i = 1 To 120
For a = 1 To 101
Erase tabmeilleur
somme = 0
k = 0
For ma = a To 1 Step -1
nl = i - k
If nl < 19 Then Exit For
tabmeilleur(k) = salaire(nl, a - k)
If tabmeilleur(k) <> 0 Then k = k + 1
Next ma
'tri des salaires
If k > 25 Then
For i1 = 0 To k - 1
For i2 = i1 + 1 To k
If tabmeilleur(i1) < tabmeilleur(i2) Then
t = tabmeilleur(i1)
tabmeilleur(i1) = tabmeilleur(i2)
tabmeilleur(i2) = t
End If
Next i2
Next i1
k = 24
End If
For i1 = 0 To k - 1
somme = somme + tabmeilleur(i1)
Next i1
If k > 0 Then moyenne = somme / k Else moyenne = 0
salaire_moy(i, a) = moyenne
Next a
Next i
End Sub
Rebonjour,
Oui je viens de me rendre compte que j'ai fais un lapsus entre macro et variable, je m'en excuse.
Votre code est parfait c'est exactement ce que je désirais, je vous remercie pour votre patience, sur ce bonne journée à vous !