IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Election municipale 2014 +1000 hbts


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Par défaut Election municipale 2014 +1000 hbts
    Bonjour à toutes et à tous.
    Je viens vers vous concernant les élections municipales de mars 2014.
    J'ai crée un document Excel qui effectue une moulinette pour la répartition des sièges des conseillers municipaux et communautaires d'une commune de plus de 1000 habitants.
    Je butte cependant sur un petit problème (entrons dans le détail)
    Description du document excel :
    Feuil1 : composé de deux pages : page1: moulinette calcul - Page2 : problème
    Feuil2: liste 1 composé de 23 candidats tableau composé de deux colonnes (numéro,nom)
    Feuil3 :liste 2 composé de 23 candidats tableau composé de deux colonnes (numéro,nom)

    Problème :
    En Feuil1 j'ai deux cellules en C26 et D26 qui me donne la répartition des conseillers par liste, voir exemple ci-dessous :
    Liste 1 : 19 (valeur en C26)
    Liste2 : 4 (valeur en D26)
    La nouvelle liste du conseil doit être composé de 23 personnes issues des deux listes à la proportionnelle.
    Aussi dans l'exemple ci-dessus : les 23 nouveaux conseillers se composeront ainsi : les 19 premiers candidats de la liste 1 et les 4 premiers candidats de la liste 2 donc en tout 23.

    Problématique :
    Si C26>D26, alors en Feuil1 Page 2 je souhaiterais avoir les
    N premiers candidats de la liste 1 (en feuil2) où N=C26
    N1 premiers candidats de liste 2 (en feuil3) où N1=D26

    Si C26<D26, alors en Feuil1 Page 2 je souhaiterais avoir les
    N premiers candidats de la liste 1 (en feuil2) où N=D26
    N1 premiers candidats de liste 2 (en feuil3) où N1=C26

    je vous joint le fichier Test.
    Je reste à votre disposition pour de plus amples renseignements et merci d'avance pour les futures solutions proposées.
    Cordialement.
    Julius870
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Julius,

    Si j'ai bien compris,
    La liste 1 doit alimenter la plus grande des valeurs C26 et D26
    La liste 2 doit alimenter la plus petite des valeurs C26 et D26

    Merci pour ta confirmation.

    Dans l'affirmative, et pour le fun, je pense à des variables Tableau.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Par défaut
    Marcel,
    Pas du tout, l'administration est plus compliquée....
    En réalité j'ai :
    en C26 : le nombre de siège à la proportionnelle de la liste 1
    En D26 : le nombre de siège à la proportionnelle de la liste 2
    C26 + D26 = E26 soit le nombre total de conseiller soit 23 pour notre cas.
    A titre d'exemple : C26 = 19 et D26=4
    Si C26>D26 alors NombreSiègeCanditatsListe1>NombreSiègeCanditatsListe2
    Donc ma nouvelle liste du conseil municipal sera composée ainsi :
    19 premiers candidats de la liste 1 + 4 premiers de liste 2 soit :
    1--> 1er candidats liste 1
    19-> 19ème candidats liste 1
    20 --> 1 er candidat liste 2
    23 --> 4ème candidat liste 2

    Si C26<D26 alors NombreSiègeCanditatsListe1<NombreSiègeCanditatsListe2
    Donc ma nouvelle liste du conseil municipal sera composée ainsi :
    19 premiers candidats de la liste 2 + 4 premiers de liste 1 soit :
    1--> 1er candidats liste 2
    19-> 19ème candidats liste 2
    20 --> 1 er candidat liste 1
    23 --> 4ème candidat liste 1

    J'ai mis un exemple dans la pièce jointe.
    Cordialement.
    julius870

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    D'après ce que tu avances en exemple, C26 définit le nombre de la Liste 1 et D26 celui de la Liste 2.
    Ce qui est logique.
    Est-ce alors une question d'ordre dans le résultat affiché à partir de la cellule G1.

    Les noms sont ainsi définis dans ton fichier
    Liste 1 : personne1 à personne23
    Liste 2 : candidat1 à candidat23

    Par exemple,

    C26 = 19
    D26 = 4

    Dans les cellules G1 à G23, On voit apparaître, dans l'ordre, personne1 personne2 .... personne 19 puis candidat1...candidat 4

    C26 = 6
    D26 = 17

    Dans les cellules G1 à G23, On voit apparaître, dans l'ordre, candidat1 candidat2 .... candidat17 puis personne1 personne2 .... personne 6

    Est-ce cela?
    Sinon, corrige en reprenant mon texte.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Par défaut
    Oui tout à fait c'est bien cela....
    cordialement.
    Julius

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut liste en ordre
    Salut,

    S'il te plaît, ne te contente pas d'un simple copier/coller.
    Etudie le code proposé - à adapter le cas échéant - et reviens si nécessaire pour toute question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Public Sub alim_listes()
     
    Dim champ1 As Range, champ2 As Range
    Dim Tblo1() As Variant, Tblo2() As Variant
    Dim l1 As Byte, l2 As Byte
    Dim i As Byte, j As Byte
     
    'facultatif
    'variables affectées aux listes
    Set champ1 = Worksheets("Liste 1").Range("B1:B23")
    Set champ2 = Worksheets("Liste 2").Range("B1:B23")
     
     
    With Worksheets(1)
        'effacement de l'ancien résultat
        .Range(.Range("G1"), .Range("G1").End(xlDown)).ClearContents
        'variables à prendre en compte
        l1 = .Range("C26").Value
        l2 = .Range("D26").Value
    End With
     
    'alimentation des variables Tableau
     
    For i = 1 To l1
        ReDim Preserve Tblo1(1 To i)
        Tblo1(i) = champ1.Cells(i, 1)
    Next i
     
    For j = 1 To l2
        ReDim Preserve Tblo2(1 To j)
        Tblo2(j) = champ2.Cells(j, 1)
    Next j
     
    'résultat en fonction de la comparaison des cellules C26 et D26
    With Worksheets(1).Range("G1")
        If l1 > l2 Then
            .Resize(UBound(Tblo1), 1).Value = WorksheetFunction.Transpose(Tblo1)
            .Offset(UBound(Tblo1), 0).Resize(UBound(Tblo2), 1).Value = WorksheetFunction.Transpose(Tblo2)
        Else
            .Resize(UBound(Tblo2), 1).Value = WorksheetFunction.Transpose(Tblo2)
            .Offset(UBound(Tblo2), 0).Resize(UBound(Tblo1), 1).Value = WorksheetFunction.Transpose(Tblo1)
        End If
    End With
     
    'variables réinitialisées
    Set champ2 = Nothing
    Set champ1 = Nothing
     
    End Sub

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Par défaut
    Marcel,
    je teste votre code et je vous reviens.
    Je vous remercie de votre contribution.
    Je dois faire la même chose avec les conseillers communautaires donc je vais devoir adapter votre code à un autre cas..
    Naturellement je vous tiendrai informé de la situation et je posterai le projet final pour d'autres collègues ou citoyen désirant contrôler les résultats.
    Merci beaucoup et à toute à l'heure.
    Cordialement.
    Julius

    Marcel,
    Où mettre le code sur un bouton ou sur la feuille, ou sur un module ?
    Je suis plus à l'aise avec Access que Excel...

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Personnellement, j'évite autant que possible de coder sur la l'environnement feuille (Sheet) de l'éditeur VBE.
    Je préfère placer le code dans un module, quitte à l'activer par un bouton de commande placé sur la feuille de travail, voire un formulaire (userform).

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Par défaut
    Marcel
    Je peux faire comme dans Access : c'est à dire mettre un bouton et dans la procédure clique faire un "call Nom_Module" ?
    Cordialement.
    Julius

  10. #10
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut bouton
    Julius,

    Oui, tu places un bouton ActiveX (ma préférence) sur la feuille de travail.
    En mode création (Développeur), tu lui affectes un nom (clic droit / "propriétés"), puis tu visualises le code (clic droit).
    Là, tu appelles ta procédure.

  11. #11
    Membre éclairé
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Septembre 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 51
    Par défaut
    Tu peux aussi ne pas faire de macro et utiliser cette formule de calcul dans les cellules de ta liste des élus (G1:G3) :
    =INDEX(SI(OU(ET($C$26>$D$26,F1<=$C$26),ET($D$26>$C$26,F1>$D$26)),'Liste 1'!$B$1:$B$23,'Liste 2'!$B$1:$B$23),F1-SI(F1>MAX($C$26:$D$26),MAX($C$26:$D$26),0),1)

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Par défaut
    Merci à MarcelG,
    J'ai adapté la moulinette et surtout compris le code.
    Je vous joins le fichier final si cela peut servir d'autres personnes.
    Pour information NicolasST votre code ne marche pas.
    Merci aux administrateurs du site développez.net.
    Bonne journée.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/03/2014, 16h12
  2. Réponses: 5
    Dernier message: 03/11/2005, 17h54
  3. Masque avec la valeur 1000
    Par la7su dans le forum C++
    Réponses: 5
    Dernier message: 14/10/2005, 11h54
  4. [Thread] PB Thread.sleep(1000) marche pas
    Par kliel dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 03/12/2004, 14h47
  5. [LIMIt 0,1000]
    Par viny dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 18/01/2004, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo