Calcul d'âge moyen sous Excel (résolu)

* lilya
Anonyme
Envoyé le 09/09/2016 à 09:58

Bonjour,
Pourriez-vous m'indiquer comment calculer l'âge moyen et l'écart type d'une liste de personnes qui varie de quelques mois à X ans , sous excel




Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 09/09/2016 à 14:18


Bonjour,

Tout simplement en utilisant deux fonctions "MOYENNE" et "ECARTYPE".
Mettre la plage de cellules contenant les âges entre les parenthèses de la fonction.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 25/09/2016 à 12:41


Bonjour lilya, Claude40,

Je viens de découvrir ce forum en cherchant des informations sur internet.
J'ai vu votre question et même si elle date de quelques jours, je vous envoie un fichier sur lequel j'ai travaillé à partir de votre question.
Voir si cela convient.

Cordialement.




J_D J_D
10 736 contributions
Membre depuis le 12/11/2001
Envoyé le 25/09/2016 à 15:13


Bonjour mdo100,


je vous envoie un fichier sur lequel j'ai travaillé à partir de votre question.



Pour envoyer un fichier, il faut passer par un site d’hébergement, sur memoclic ce n'est pas possible [;)]
Ici par exemple > www.cjoint.com/
Je ne réponds pas aux messages privés non sollicités ! C'est pas toujours facile...
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 25/09/2016 à 16:33


Bonjour J_D, alias Dr House [;)]

Oui j'ai vu ça, j'ai tenté avec le dernier icône (bleu) au dessus de "Votre message", mais je voyais bien que mon fichier n'apparaissait pas.
Du coup j'espère que mon message ne va pas apparaître plusieurs fois, car j'ai bien dû tenter 4 fois au moins. [:D]

Je vais tenter de faire comme vous le dîtes, merci pour le conseil, car je n'aurai pas poursuivie.

Cordialement.


mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 25/09/2016 à 16:39 Modifié par Modération


Bonjour lilya, Claude40 et J_D ,

Mon fichier n'est pas passé, mais avec les conseils de J_D , j'espère que se sera bon.

"Je viens de découvrir ce forum en cherchant des informations sur internet.
J'ai vu votre question et même si elle date de quelques jours, je vous envoie un fichier sur lequel j'ai travaillé à partir de votre question.
Voir si cela convient".

Cordialement.
PS: Donc voici le fichier que j'ai fais, j'espère que cette fois c'est la bonne [:D]
www.cjoint.com/c/FIzouLf0Mlu




Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 25/09/2016 à 18:28


Bonjour,
Il s’agit d’un autre sujet qui aurait mérité un nouveau post.
Toutefois : Les calculs me paraissent corrects à trois petites remarques près :
a) La formule en D2, ne traite que les cellules A2 à A6. Si on étend jusque A 10 on obtient une moyenne de 14 ans et 1 mois.
b) Le fait de ne pas exprimer les âges en jours induit des différences par rapport à l’âge réel qui peuvent être pénalisantes pour la moyenne selon le but poursuivi et le nombre de lignes à traiter.
c) L’utilisation de la fonction JOURS360 pour la moyenne fausse le résultat car elle est basée sur les années de 360 jours et des mois de 30 jours (Utilisation de préférence pour la comptabilité). A mon avis, pour obtenir une moyenne plus exacte, il vaudrait mieux faire une moyenne des écarts de dates en jours par rapport à AUJOURDHUI (), transformer cette moyenne en Date et la comparer au 01/01/1900. Ainsi pour les lignes 2 à 6 on obtient une moyenne de 25 ans 1 mois et 8 jours et pour les lignes 2 à 10 une moyenne de 14 ans 0 mois et 18 jours.


Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 25/09/2016 à 19:51


Re, Claude40 ,

a) Oups, pour la cellule "D2", j'ai ajouté des lignes et j'ai oublié de modifier la formule, lilya corrigera la formule en voyant ton post.
b)

lilya à écrit: varie de quelques mois à X ans , sous excel

. Donc je me suis attaché avec cette hypothèse.
c) Ok pour ta réflexion, donc pour les lignes de 2 à 10 nous ne sommes pas très loin l'un de l'autre.
Voici la réflexion que j'ai eu: "J'ai tenté d'utiliser la fonction FRACTION.ANNEE mais celle-ci ne se prête pas à un traitement matriciel, je me suis donc rabattue sur JOURS360 qui s'y prête".
De toute façon, il est très aléatoire de vouloir faire une moyenne avec des dates, dû moins c'est ce que je pense à mon petit niveau.

Je note que tu as écris

Toutefois : Les calculs me paraissent corrects

, ça fait toujours plaisir à lire de la part de quelqu'un qui a 1 650 contributions.

Bonne soirée.
Cordialement.







Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 26/09/2016 à 11:15


Bonjour,

Pour revenir à l'auteur du sujet Lilya, je pense qu'elle a disparu du paysage et qu'elle ne bénéficiera pas de cette solution. Elle a peut-être trouvé la solution ailleurs et "oublié" de faire un retour.
D'une manière générale, ceux qui postent en "anonyme", non inscrits, font relativement peu de retours.
C'est la raison pour laquelle, je donne, comme première réponse des solutions "générales" sans trop investir de temps à chercher une solution précise et définitive. Si l’intéressé(e) reprend la main et montre un certain intérêt pour l'ébauche de solution, je poursuis et, en fonction du dialogue et surtout d'un énoncé plus précis du problème, je propose une solution.
C'est l'expérience produite par mes 1650 contributions qui me pousse à agir ainsi. Au début, j'ai souvent investi beaucoup de temps à élaborer une solution pour un demandeur qui n'a plus jamais donné signe de vie.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 26/09/2016 à 12:03


Bonjour Claude40,

Oui, c'est une bonne analyse, mais je l'ais fait aussi pour le plaisir et poursuivre ma formation en autodidacte, à 50 ans et seul devant mon ordi, j'apprends Excel depuis une année environ et comme je n'ais pas de fichiers à l'infini a faire pour moi, alors j'aide les autres pour apprendre et trouver des solutions, je pense que c'est une bonne école.
En 2011, j'ai eu un grave accident du travail et depuis je suis bloqué chez moi, me déplaçant avec difficulté, donc désœuvré, j'ai trouvé une évasion avec Excel.

Donc tu vois, j'ai peu d'expérience en la matière et je ne pense pas pouvoir devenir un "cador" d'Excel, car apprendre seul a ses limites, surtout quand on a aucune formation d'informaticien où de programmeur.

Mais, c'est vrai, qu'un retour, avec un simple "merci pour la solution", fait toujours plaisir.

PS: Mais peut-être faudrait-il que j'ouvre une nouvelle discussion, je cherche actuellement l'adresse de la dernière cellule renseignée pour une seule feuille, pour le moment j'applique cette formule =CELLULE("adresse"), mais le problème c'est que cette formule s'applique à tout le classeur et je souhaiterai que cela s'applique qu'à une seule feuille.

Cordialement.



Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 26/09/2016 à 15:43


Bonjour,
S’il s’agit de trouver la première cellule vide d’une colonne donnée, il faut utiliser une formule matricielle.
Soit pour une recherche dans la colonne A : =MIN(SI(ESTVIDE(Feuil1!A:A);LIGNE(Feuil1!A:A)))
On obtient le numéro de ligne de la première cellule vide de la colonne A. Dans cette formule on précise le nom de la feuille.
Formule à mettre entre accolades grâce à la combinaison des touches CTRL + MAJ +ENTREE pour la rendre matricielle.
S’il s’agit de rechercher dans plusieurs colonnes adjacentes ou non, il faut utiliser du code VBA.

Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 26/09/2016 à 16:53 Modifié par mdo100


Re,
Merci, mais ce n'est pas ce que je cherche, c'est la dernière cellule renseignée pour toute une feuille, voir au mieux pour une plage de cellule, Ex: dans un tableau de A2:F15. Son adresse absolue et sa valeur.
Mais je ne pense pas que cela soit possible par formule (d'où ta déduction) et qu'effectivement, il me faudra passer par un code VBA, mais là, c'est un problème pour moi, j'en fais bien un peu, un tout petit peu, mais je n'ais pas le niveau de compétence requis pour une telle fonction VBA, comme je te l'ais dit j'ai commencé Excel il y a 1 an environ et seul.

Mais, je t'avoue que si tu avait la gentillesse de me faire ce code, ça me rendrait bien service.

À te relire.
Cordialement.
Claude, c'est aussi mon prénom [;)]
PS: quoique avec ta formule arrangée à ma sauce j'obtiens sur 2 colonnes un double résultat sur 2 lignes donc, reste les colonnes.
{=MIN(SI(ESTVIDE(Feuil2!A:A);LIGNE(Feuil2!A:A)))-1&":"&MIN(SI(ESTVIDE(Feuil2!B:B);LIGNE(Feuil2!B:B)))-1}

Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 27/09/2016 à 18:19 Modifié par Claude40


Bonjour,
Voici un petit code VBA, qui prend comme hypothèse que la dernière cellule renseignée qui doit être désignée est la dernière cellule renseignée de la première colonne qui n’est pas entièrement renseignée. Il est possible que cela ne corresponde pas au but poursuivi. A voir donc.
Ce code examine les colonnes de la plage une par une en partant du bas, ce qui fait que les cellules vides comprises entre la ligne 1 et la ligne maxi de la colonne sont considérées comme remplies, même si elles sont vides.
Ce code travaille sur la plage A1:F15 de Feuil1 en « dur ». On peut imaginer une solution basée sur une boîte de dialogue qui demanderait les limites de la plage (dernière ligne et dernière colonne). Ce serait déjà nettement plus compliqué. On peut aussi imaginer du code qui travaillerait sur la totalité de la feuille, mais cela pourrait être gênant si des lignes ou des colonnes ne contiennent pas le même type de données que celles qui sont recherchées, comme des titres de lignes ou de colonnes.
Pour le moment, le code est assez « simpliste », ce qui devrait en faciliter la compréhension. Il pourrait être plus sophistiqué et plus efficace pour une plage plus étendue ou de taille variable, mais il serait aussi plus hermétique pour une première approche du VBA.


Public ColOK As Integer
Public MyRange As String
Sub Trouve()
' Touche de raccourci du clavier: Ctrl+t
Dim MyLigne As Integer
'Traitement de la colonne A
Colonnes ("A")
If ColOK = 1 Then ' la colonne A est complète
'On passe à la colonne B
Colonnes ("B")
Else
Exit Sub
End If
If ColOK = 1 Then ' la colonne B est complète
'On passe à la colonne C
Colonnes ("C")
Else
Exit Sub
End If
If ColOK = 1 Then ' la colonne C est complète
'On passe à la colonne D
Colonnes ("D")
Else
Exit Sub
End If
If ColOK = 1 Then ' la colonne D est complète
'On passe à la colonne E
Colonnes ("E")
Else
Exit Sub
End If
If ColOK = 1 Then ' la colonne E est complète
'On passe à la colonne F
Colonnes ("F")
End If
End Sub
Sub Colonnes(NomCol)
Dim MyAdresse As String
Dim MyAdresseréf As String
MyAdresseréf = "$" & NomCol & "$" & "15"
MyRange = NomCol & ActiveSheet.Rows.Count
MyAdresse = Sheets("Feuil1").Range(MyRange).End(xlUp).Address
If MyAdresse = MyAdresseréf Then
ColOK = 1
Else
MsgBox "Adresse de la dernière cellule renseignée : " & Sheets("Feuil1").Range(MyRange).End(xlUp).Address & " Contenu de la cellule : " & Sheets("Feuil1").Range(MyRange).End(xlUp)
End If
End Sub


Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 28/09/2016 à 16:41


Bonjour Claude40,

Merci pour ce code qui fonctionne très bien et merci d'y avoir mis des commentaires pour le néophyte que je suis en VBA.
J'en ais compris le principe dans les grandes lignes, et tu imagines bien ce n'ai pas tout à fait mon souhait.
Sans doute que je me suis mal fait comprendre.
Si on prend la plage "C6:L14" en fait je souhaiterai que dans cette plage je puisses retrouver l'adresse et la valeur de la dernière cellule renseignée et pas forcément que la ligne complète le soit.
La dernière cellule renseignée peut-être en C6 ou H9 ou K13 et revenir en C6 etc...
Ta réflexion est juste, il est inutile que le code travail sur la feuille complète et je n'avais pas pensé effectivement aux titres supposés en ligne où colonne.
Pour que tu puisses te faire une idée, j'ai préparé un fichier exemple qui sera sans doute un peu plus parlant.
http://www.cjoint.com/c/FICoAawvT1u

Fait comme tu peux et si c'est trop complexe, laisse tomber.

Je te remercie d'avance pour ton travail.

Cordialement.

Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 29/09/2016 à 10:45


Bonjour,
C’est bien ce que je pensais : La solution dépend de la priorité de recherche, soit sur colonne soit sur ligne.
J’ai donc une question supplémentaire : Dans le tableau fourni en exemple, en supposant que la cellule L11 soit renseignée, sera-t-elle considérée comme la dernière cellule renseignée ?

Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 29/09/2016 à 12:42


Bonjour Claude40,

Oui si la cellule "L11" est la dernière renseignée, elle sera considérée après avoir fait entrée comme la dernière.
Ensuite si je rentre une nouvelle valeur en "E9", ce sera alors "E9" après validation considérée comme dernière cellule renseignée.
Sachant que je peux revenir en "L11" et y mettre une nouvelle valeur.
Et ainsi de suite dans tout le tableau.
Je me doute bien que ça doit-être un casse tête chinois [:)(]

Cordialement.



Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 29/09/2016 à 13:33 Modifié par Claude40


Bonjour,
Il fallait tout de suite préciser que c’était une notion de temps et non une notion d’espace. Cela Simplifie la solution, car il y a une fonction VBA qui détecte une mise à jour intervenue sur une feuille et plus précisément sur une plage de cellules ou une seule cellule..
Dans ce cas précis, il faut placer le code ci-dessous dans Feuil1 (par exemple) de la liste des objets :
Cliquer sur « Développeur », puis sur « Visual Basic », puis double clic sur Feuil1 et coller le code ci-dessous.
NB : la plage du tableau est « en dur ».
A chaque modification d’une cellule du tableau, le module affiche la valeur de la cellules modifiée en E2 et son adresse en F2.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("C6:L14")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Cells(2, 5).Value = Target.Value
Cells(2, 6).Value = Target.Address
End If
End Sub


Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
mdo100
10 contributions
Membre depuis le 25/09/2016
Envoyé le 29/09/2016 à 14:24


Re bonjour Claude40,

C'est pas facile de faire comprendre ce que l'on a dans la tête, on est tellement plongé dans son idée, que les chose nous échappes quand on veux les expliquer à quelqu'un par forum interposé.

En tout cas, je te remercie sincèrement pour la solution qui fonctionne à merveille, c'est exactement ça que je cherchais a faire, sans être en mesure de pouvoir le faire par moi même. (+) (+)
Surtout que pour le coup, tu as pris au vol, cette discussion qui n'aurait pas dû être sur ce fil.

J'ai un autre problème concernant du VBA, mais je posterai un nouveau fil et si par hasard tu le vois, peut-être que tu pourras alors y répondre, j'essayerai de mieux expliciter ce nouveau problème.

Encore merci pour ce code et ton dévouement.

Je te souhaite une bonne journée.

Cordialement.



Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 29/09/2016 à 20:41


Bonjour,
Merci du retour
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc

Discussion trop ancienne

Cette discussion a été automatiquement fermée car elle n'a plus reçue de nouveau message depuis trop longtemps.

Nous vous suggérons de créer un nouveau message

« Retour sur la liste des messages de ce forum