Problème formule Excel -

Résolu/Fermé
sg4488 Messages postés 5 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 8 février 2011 - Modifié par irongege le 7/02/2011 à 20:34
sg4488 Messages postés 5 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 8 février 2011 - 8 févr. 2011 à 23:14
Bonjour,

J'ai un tableau de données regroupant toutes les populations de toutes les communes de France depuis 1962, et je voudrais pouvoir me dire "50% de la population française vit dans une coimune de moins de X habitants"

Alors bien sûr, vous allez me dire d'utiliser la formule de la médiane, le souci, c'est que la médiane me donne un résultat logique, mais différent, à savoir "50% des communes françaises comptent Y habitants"

Ma question est donc la suivante : Existe-t'il une formule permettant de trouver la population pour laquelle la moitié de la population totale vit dans des communes moins peuplées et 50% dans des communes plus peuplées, et si oui, laquelle?

Pour info, mon tableau de données se présente sous la forme suivante:

11 colonnes (Code de la commune ; Nom de la commune ; Population en 1962 ; 1975 ; 1982 ; 1990 ; 1999 ; 2006 ; 207 ; 2008)

36571 lignes (ligne d'en-tête + 1 ligne par commune)

Merci

SG4488

A voir également:

6 réponses

sg4488 Messages postés 5 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 8 février 2011
7 févr. 2011 à 19:35
UP
0
eriiic Messages postés 24560 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 février 2024 7 204
Modifié par eriiic le 7/02/2011 à 19:38
Bonsoir,

je voudrais pouvoir me dire "50% de la population française vit dans une commune de moins de X habitants"
Ca je pense avoir compris, même si je ne vois pas de formule (mais en vba ça doit se traiter)

Ma question est donc la suivante : Existe-t'il une formule permettant de trouver la population pour laquelle la moitié de la population totale vit dans des communes moins peuplées et 50% dans des communes plus peuplées, et si oui, laquelle?
Heruuu là c'est moins clair... Il y a toujours une réponse selon ce que tu appelles une commune moins peuplée...
On peut rester sur la 1ère formulation ?

Ex, tu as 5 communes avec 1, 2, 3, 4 et 5 habitants soit un total de 15.
La réponse attendue est : la moitié de la pop. habite une commune de moins de 4 hab. ?
Sinon si tu peux expliquer avec un exemple...

eric
0
sg4488 Messages postés 5 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 8 février 2011
7 févr. 2011 à 20:30
@ Eric

Pour ce qui est de mon tableau, j'ai 36570 communes pour une population totale en 1962 de 46 425 393 habitants. J'ai classé les communes par leur population croissante. Je veux trouver la population à partir de laquelle la somme des populations des communes précédentes dépasse la moitié de la population totale, soit 23 212 696.5 habitants.

Autrement dit, pour être plus clair, je cherche à trouver la médiane de la population, et non des communes comme Excel le fait.

J'ai essayé les sommes conditionnelles, mais ça n'a pas l'air de fonctionner.

Si ça doit passer par VBA, je ne maitrise pas du tout, donc il me faudrait des explications

Merci d'avance
0
eriiic Messages postés 24560 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 février 2024 7 204
Modifié par eriiic le 7/02/2011 à 23:28
Re,

Si les données sont triées c'est plus facile.
Je t'ai fait une fonction personnalisée nommée pop50()
syntaxe :
=pop50(A2:B13)
A2:B13 étant la plage commune-population
Elle retourne la somme supérieure ou égale à la moitié de la population (c'est ce que j'ai compris, mais on peut retourner la dernière commune prise en compte ou sa pop ou son rang)

Pour voir le code :
- Alt+F11 pour ouvrir VBE
- double-clic sur Module1 (un élément du projet à gauche)
- le code est dans la fenetre de droite :
Function pop50(plage As Range) As Long 
    Dim datas As Variant, demiPop As Double, s As Double, i As Long 
    datas = plage.Value 
    demiPop = Application.WorksheetFunction.Sum(plage) / 2 
    While s < demiPop 
        i = i + 1 
        s = s + datas(i, 2) 
    Wend 
    pop50 = s 
End Function


Le copier dans ton classeur : dans vbe clic-droit sur ton projet ou une de ses feuille puis 'insertion / module', coller le code dans le module
Rappel : les données sont triées !

eric

Edit : fichier exemple oublié, désolé : test.xls
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sg4488 Messages postés 5 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 8 février 2011
7 févr. 2011 à 23:50
J'ai du faire une erreur quelque part, la réponse renvoyée est #REF!.

J'ai collé le code dans Module 1 associé à ma feuille de calculs, et j'ai ensuite entré la formule, mais ça ne marche pas.

Mes données sont triées dans l'ordre croissant. Par ailleurs j'ai des données nulles (certaines communes n'ont pas d'habitant), j'ai essayé de contourner cetéventuel obstacle en ne prenant qu'une plage de cellules non nulles, mais même résultat...

Je ne comprends pas...
0
eriiic Messages postés 24560 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 février 2024 7 204
Modifié par eriiic le 8/02/2011 à 00:12
Sélectionne la plage (commune+pop) à la souris, #REF étant une erreur de référence (une cellule qui n'existe plus par exemple)
Sinon il faudrait que tu déposes un extrait qui ne fonctionne pas sur cijoint.fr et que tu colles ici le lien fourni pour voir sur quelles données ça plante.
0
sg4488 Messages postés 5 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 8 février 2011
8 févr. 2011 à 23:14
Ok, j'ai fait autrement, à la main directement, en prenant la moitié de la population totale et en sélectionnant toutes les cellules depuis la première jusquà celle qui, additionnée aux précédentes dépasse la moitié de la population totale.
Ensuite, j'ai copié le résultat dans les celllules voisines, et j'ai tatonné jusqu'à trouver la bonne cellule.
Le résultat tientla route, mais c'est à tatons que je l'ai trouvé. Je pensais qu'il existait une formule pour ça, mais la meilleure solution est encore la bonne vieille méthode du pifomètre.

Merci en tous cas à toi pour les explications, au moins j'aurai appris à ouvrir VBA...

Je clos cette discussion

SG4488
0