Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

répartition de sièges

Posté par
Quincourti
01-04-13 à 21:50

Bonjour,

Je suis maire d'un petit village et très prochainement le conseil municipal devra se prononcer sur une nouvelle représentativité des communes au sein des communautés de communes. Je me permets de vous interroger car il me semble que les techniques de calcul qui nous sont présentées sont fumeuses. Voici la situation par un exemple.

Population totale de la Communautés de communes: 7714
"Communes
numéro"         Population municipale
1                 302
2                 211
3                 215
4                 208
5                 578
6                 421
7                 240
8                  81
9                 178
10                 108
11                 171
12               53
13                4090
14                 161
15                 697

Nous avons 22 sièges à distribuer. La première répartition se fait en divisant la population de chaque commune par le rapport de la population totale par le nombres  de sièges et en arrondissant à l'entier inférieur.
On distribue le reste des sièges à la plus forte moyenne.
Quelles seront les communes qui auront des sièges et combien?
Comment calculer sur une feuille libreoffice?

D'avance merci

Posté par
Iamat
re : répartition de sièges 02-04-13 à 10:31

Bonjour,

Les communes 5-6-15 auront 1 siège chacun
La communes 13 aura les 19 sièges restant (alors qu'elle n'en mérite que 11 au départ)

populationsiègessièges supplémentairestotal sièges
771422
130200
221100
321500
420800
557811
642111
724000
88100
917800
1010800
1117100
125300
13409011819
1416100
1569711
total14822

Posté par
Iamat
re : répartition de sièges 02-04-13 à 10:44

Pour faire ce tableau sous excel, je pense que c'est la même chose pour libreoffice :

Il faut taper les données dans les 2 premières lignes et les deux première colonnes

En recopiant le mot "population" dans la case B1
dans la case B2 on peut écrire     =SOMME(B3:B17)
dans la case C3 la formule est =ENT(B3/B2*C2)
dans la case C4 la formule est =ENT(B4/B2*C2)
dans la case C5 la formule est =ENT(B5/B2*C2)
dans la case C6 la formule est =ENT(B6/B2*C2)
dans la case C7 la formule est =ENT(B7/B2*C2)
dans la case C8 la formule est =ENT(B8/B2*C2)
dans la case C9 la formule est =ENT(B9/B2*C2)
dans la case C10 la formule est =ENT(B10/B2*C2)
dans la case C11 la formule est =ENT(B11/B2*C2)
dans la case C12 la formule est =ENT(B12/B2*C2)
dans la case C13 la formule est =ENT(B13/B2*C2)
dans la case C14 la formule est =ENT(B14/B2*C2)
dans la case C15 la formule est =ENT(B15/B2*C2)
dans la case C16 la formule est =ENT(B16/B2*C2)
dans la case C17 la formule est =ENT(B17/B2*C2)
dans la case C18 la formule est =SOMME(C3:C17)
dans la case D15 la formule est =C2-C18
dans la case E3 la formule est =C3-D3
dans la case E4 la formule est =C4-D4
...

Selon moi, il serait plus juste que 8 derniers sièges soient distribué au 8 plus grosses communes n'ayant pas de voix:

Il y aurait alors 11 voix pour la ville 13 et seules les villages 8-10-12 n'auraient pas de voix

Posté par
Iamat
re : répartition de sièges 02-04-13 à 10:49

je vous ai envoyer mon tableau excel par email ce sera plus simple

Posté par
Quincourti
précisions 02-04-13 à 12:52

Merci pour la réponse mais je me suis mal expliqué: après la première distribution, les sièges sont distribués à la plus forte moyenne qui est recalculée après chaque attribution d'un siège.
J'espère avoir été plus clair.

Posté par
Iamat
re : répartition de sièges 02-04-13 à 13:06

désolé, je ne comprends pas, peut -être avec un exemple?

Posté par
Iamat
re : répartition de sièges 02-04-13 à 13:40

Par exemple si on s'arrête aux 14 premiers postes, à qui faut-il donner le 15e puis le 16e poste?

Je ne vois pas ce que vous appelez la moyenne la plus élevée.

Est-ce le rapport population/sièges car toutes les villes n'ayant pas reçu de siège sont à l'infini.

Il faudrait alors regarder les villes les plus grandes n'ayant pas reçu de siège:

Cela reviendrait à ce que je préconisais:

Selon moi, il serait plus juste que 8 derniers sièges soient distribué au 8 plus grosses communes n'ayant pas de voix:

Il y aurait alors 11 voix pour la ville 13 et seules les villages 8-10-12 n'auraient pas de voix

Posté par
Quincourti
repartition 02-04-13 à 18:02

Vous avez mis le doigt sur la difficulté pour faire la répartition sur un tableur.

A la main, je divise chaque population des communes ayant au moins 1 siège par le nombre de sièges obtenus. Ainsi j'obtiens 518 pour la C5, 421 pour la C6, 371,8 pour C13 et 697 pour C15. Je regarde parmi ces résultats et les populations de communes n'ayant pas de délégués quel est le nombre le plus élevé. Dans notre cas, c'est C15. Je lui rajoute donc un siège. Je refais les calculs: C5,C6,C13 ne bougent pas, mais j'ai 348,5 pour C15. La plus forte moyenne est alors C5 avec 578, je lui attribue un siège et je refais les calculs. Le 17ème siège est attribué à C6, le 18ème à C13, le 19ème à C15, le 20ème à C13, le 21ème à C13 et le 22ème à C1.
C'est cela que je n'arrive pas à le faire automatiquement sur le tableur.

J'espère avoir éclairci le problème.

Posté par
patrice rabiller
re : répartition de sièges 02-04-13 à 19:43

Bonjour,

Je pense avoir bien compris comment faire le calcul à la main et je crois bien que ce calcul n'est possible sur tableur qu'à l'aide d'une macro en VBA (sur Excel). Sur Open Office Calc, c'est sans doute possible aussi mais le langage (star basic il y a quelques années) n'est pas aussi complet que Visual Basic pour Applications.
Si j'ai le temps, je regarde ça demain matin

Posté par
patrice rabiller
re : répartition de sièges 03-04-13 à 05:13

Voici une solution. Le calcul n'est certainement pas optimisé mais il est facile à comprendre puisqu'il correspond pas à pas à ce qu'on pourrait faire à la main.
La macro écrite suppose que les colonnes A et B sont remplies respectivement par les n° des communes et par leurs populations.
La ligne 1 est utilisée pour mettre les titres des colonnes

Une remarque : avec ce mode de calcul, la commune la plus peuplée reçoit plus de la moitié des sièges (14/22). Elle a donc la majorité absolue des voix. Certaines communes n'ont pas de siège.

Voici le code avec quelques commentaires :

Sub Répartition()
    nbSièges = 22
    nbCommunes = 15
    PopulationTotale = 0
    For k = 1 To nbCommunes
        PopulationTotale = PopulationTotale + Cells(k + 1, 2)
    Next
    Cells(1, 1) = "Numéro"
    Cells(1, 2) = "Population"
    Cells(2 + nbCommunes, 1) = "Total"
    Cells(2 + nbCommunes, 2) = PopulationTotale
    '
    'Calcul de la répartition proportionnelle intégrale et de la première attribution de sièges
    '
    Cells(1, 3) = "Répartition proportionnelle"
    Cells(1, 4) = "1ère attribution"
    Total = 0
    For k = 1 To nbCommunes
        Cells(k + 1, 3) = Cells(k + 1, 2) * nbSièges / PopulationTotale
        Cells(k + 1, 4) = Int(Cells(k + 1, 3))
        Total = Total + Cells(k + 1, 4)
    Next
    SiègesAttribués = Total
    Cells(2 + nbCommunes, 4) = Total
    '
    'Calcul des moyennes et attribution des autres sièges
    '
    n = 1   'n représente le rang de la prochaine attribution de sièges
    Do While SiègesAttribués < nbSièges
        Cells(1, 3 + 2 * n) = "Moyenne"
        Cells(1, 4 + 2 * n) = "Répartition " & n
        MoyenneMax = 0          'initialisation de la meilleure moyenne
        For k = 1 To nbCommunes
            If Cells(k + 1, 2 + 2 * n) > 0 Then                                     'si la commune k a au moins 1 siège
                Cells(k + 1, 3 + 2 * n) = Cells(k + 1, 2) / Cells(k + 1, 2 + 2 * n) 'alors moyenne = population/sièges
            Else
                Cells(k + 1, 3 + 2 * n) = Cells(k + 1, 2)                           'sinon moyenne = population
            End If
            If Cells(k + 1, 3 + 2 * n) > MoyenneMax Then        'actualisation de la meilleure moyenne
                MoyenneMax = Cells(k + 1, 3 + 2 * n)
            End If
        Next
        For k = 1 To nbCommunes                                 'attribution d'un siège à la commune ayant la meilleure moyenne
            If Cells(k + 1, 3 + 2 * n) = MoyenneMax Then
                Cells(k + 1, 4 + 2 * n) = Cells(k + 1, 2 + 2 * n) + 1
                SiègesAttribués = SiègesAttribués + 1
            Else
                Cells(k + 1, 4 + 2 * n) = Cells(k + 1, 2 + 2 * n)
            End If
        Next
        Cells(2 + nbCommunes, 4 + 2 * n) = SiègesAttribués
        n = n + 1
    Loop
End Sub

La copie d'écran ci-dessous montre les premiers calculs. En réalité, il faut 8 attributions complémentaires pour distribuer les 22 sièges...

répartition de sièges

Posté par
Quincourti
répartition 03-04-13 à 22:00

Merci à vous,

J'essaie dans Libreoffice et avec notre CODECOM.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !