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 :

Boucle sur groupe de données et attribution d'un rang [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut Boucle sur groupe de données et attribution d'un rang
    Bonjour à toutes et à tous,

    Quelqu'un peut-il m'aider sur un boucle VBA ou je ne trouve pas de solution (ni même d'idée à vrai dire)

    Voici le projet : (fichier Excel en PJ)

    Dans une feuille Excel j'ai en colonne A des groupes (dans l'exemple 6 groupes). Chaque groupe contient des données identiques au niveau du nom et variable au niveau du nombre.
    Dans les colonnes C,D,E,F,G j'ai des notes pour chaque membre du groupe. Chaque colonne représente une période.
    Enfin, dans les 5 dernières colonnes j'ai le rang (vide dans le fichier en PJ) ou j'aimerais intégrer une fonction Excel qui calcul le rang automatiquement en fonction de la note par rapport au groupe.

    La fonction "=RANG" fonctionne très bien, le hic, c'est que je ne sais pas comment boucler sur chaque groupe afin d'identifier combien il y a d'individu dans le groupe et implémenter la fonction RANG avec les bon arguments.

    Groso modo le résultat final devrait ressembler à cela :

    NOM      | Note   | Rang
    Groupe 1 | 15.2   |  2
    Groupe 1 | 17.3   |  1
    Groupe 1 | 12.7   |  3
    Groupe 2 | 9.7    |  1
    Groupe 2 | 2.7    |  3
    Groupe 2 | 8.7    |  2
    Groupe 3 | 8.7    |  1
    Groupe 4 | 17.0   |  2
    Groupe 4 | 14.1   |  3
    Groupe 4 | 11.3   |  4
    Groupe 4 | 19.7   |  1
    Etc..

    L'ordre du rang donne 1 à la meilleure note du groupe et ainsi de suite.

    Donc je suis un peu perdu et ne sais pas trop comment attaquer.
    Dans le fichier les groupes seront toujours triés de A à Z

    Je pensais créer dans une feuille vide la liste des noms des groupes, boucler dessus pour enregistrer le nom de chaque groupe unique, puis boucler sur la feuille ou sont les données au moins pour pouvoir compter le nombre de ligne que contient chaque groupe et ainsi définir la plage ou doit s'effectuer la fonction Rang.
    Voir plus simple, trier chaque plage (groupe) en ordre croissant et ajouter 1 dans la colonne rang pour la première ligne, ensuite 1+1 dans la 2ème etc..

    La petite subtilité c'est qu'il y a 5 rangs à calculer par groupe (5 période) car les notes ne sont pas les mêmes d'une période à l'autre. Et surtout, parfois il n'y a pas de note, et ça Excel n'aime pas. Il faudrait ignorer les membres du groupe sans note pour que la fonction Rang affiche un résultat correct.

    Désolé de n'avoir aucun code à proposer car je suis dans les choux

    Merci pour votre aide et vos conseils

    Bon weekend à toutes et à tous
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Tu pourrais essayer ainsi
    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
    Sub Rang()
        Dim I As Long, Colonne As Long, nbLignes As Long
        Dim Debut As Long, Fin As Long
     
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
     
        Debut = 2
        For I = 2 To nbLignes
            Fin = 0
            If Range("A" & I) <> Range("A" & I + 1) Then
                Fin = I
            End If
            If Debut > 0 And Fin > 0 Then
                For Colonne = 8 To 12
                    Range(Cells(Debut, Colonne), Cells(Fin, Colonne)).Formula = _
                        "=IFERROR(Rank(" & Range(Cells(Debut, Colonne - 5), Cells(Fin, Colonne - 5)).Address(False, False) & "," & _
                                   Range(Cells(Debut, Colonne - 5), Cells(Fin, Colonne - 5)).Address & _
                                   ",0),""-"")"
                Next
                Debut = I + 1
                Fin = 0
            End If
     
        Next
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut
    Bonjour parmi,

    Désolé pour le temps de réponse, j'étais en voyage cette semaine.
    Un très grand merci pour ton aide !

    C'est exactement ce que je cherchais. La macro est très rapide et parfaitement fonctionnelle !
    Moi qui étais partis sur une boucle et des Sort, des If etc... Voila qui change tout..

    Milles mercis parmi
    Excellent weekend à toi !
    Fabrice

    (je vais creuser un peu le IFERROR que tu utilises car je ne connaissais pas et ça me parait bien intéressant)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/10/2009, 10h05
  2. Réponses: 0
    Dernier message: 30/03/2009, 19h45
  3. Réponses: 22
    Dernier message: 13/05/2008, 14h30
  4. [MySQL] Problème de boucle while sur base de données
    Par Darhyl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/05/2006, 15h11

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