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 :

Afficher les TOP 10 dans une ListBox multi colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut Afficher les TOP 10 dans une ListBox multi colonnes
    S’il vous plait j’ai un problème, veuillez m’aider SVP!

    J’ai un tableau des notes d’histoire des étudiants / Colonne A : Nom ; colonne B : Prénom ; colonne C : Sexe ; colonne D : Origine, colonne E : Note d’histoire.
    Je veux afficher dans Listbox les TOP 10 en matière de notes d’histoire, mais dans cette listBox je veux également afficher : Le NOM, Le SEXE, L’ORIGINE et La NOTE D’histoire.

    Je vous remercie beaucoup

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Hadi (bonsoir le Maroc), bonsoir le forum,

    Si tu parles d'une ListBox dans une UserForm, peut-être comme ça :

    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
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim I As Byte 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
     
    Me.ListBox1.ColumnCount = 4 'définit le nombre de colonnes de la ListBox1
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    For I = 1 To 10 'boucle 1 : sur les 10 plus grande valeurs I
        For J = 2 To UBound(TC, 1) 'boucle 2 : sur toutes les lignes J du tableau de cellules TC (en partant de la seconde)
            'condition : si la note (ligne J, colonne 5 de TC) est la Ième plus grande valeur dans la 5ème colonne de TC)
            If TC(J, 5) = Application.WorksheetFunction.Large(Application.Index(TC, , 5), I) Then
                With Me.ListBox1 'prend en compte la ListBox1
                    .AddItem 'ajoute un élément à la ListBox1
                    .Column(0, .ListCount - 1) = TC(J, 1) 'récupère le nom dans la colonne 0 de la ListBox1
                    .Column(1, .ListCount - 1) = TC(J, 3) 'récupère le sexe (si j'ose...)dans la colonne 1 de la ListBox1
                    .Column(2, .ListCount - 1) = TC(J, 4) 'récupère l'origine dans la colonne 2 de la ListBox1
                    .Column(3, .ListCount - 1) = TC(J, 5) 'récupère la note dans la colonne 3 de la ListBox1
                End With 'fin de la prise ene compte de la ListBox1
                Exit For 'sort de la boucle 2
            End If 'fin de la condition
        Next J 'prochaine ligne de la boucle 2
    Next I 'prochaine valeur de la boucle 1
    End Sub
    [Édition]
    Ce code ne fonctionne pas...
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    Bonjour
    un autre regard
    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
    Private Sub UserForm_Activate()
    Dim tablobase, tablo
    ListBox1.ColumnCount = 5
    ListBox1.ColumnWidths = 70
    With ActiveWorkbook.Worksheets("Feuil1")
    tablobase = .Range("A2:E" & Cells(Rows.Count, 1).End(xlUp).Row)
     
          .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Range("E2:E10"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
     
       With .Sort
            .SetRange Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)
            .Header = xlYes
            '.MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    tablo = .Range("A2:E" & Cells(Rows.Count, 1).End(xlUp).Row)
    .Sort.SortFields.Clear
    .Range("A2:E" & Cells(Rows.Count, 1).End(xlUp).Row) = tablobase
    End With
    ListBox1.List = tablo
    End Sub
    Citation Envoyé par Thautheme Voir le message
    Bonsoir Hadi (bonsoir le Maroc), bonsoir le forum,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            If TC(J, 5) = Application.WorksheetFunction.Large(Application.Index(TC, , 5), I) Then
    Bonjour thautheme ca ne fonctionne pas chez moi

    j'ai l'erreur
    Erreur d'exécution '1004':
    Impossible de lire la propriété Large de la classe WorksheetFunction.

    Pourrais tu m'en dire plus sur les arguments entre parenthèses?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bon voila j'ai un peu galéré mais j'y suis
    avec l'utilisation de la fonction "Large" dans une double boucle

    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
    Option Base 1
    Private Sub UserForm_Initialize()    'à l'initialisation de l'UserForm
        Dim tablo, tablo2, i As Integer, tablofinal, lig
        ListBox1.ColumnCount = 5 ' ajoute 5 colonne a la listbox
        ListBox1.ColumnWidths = 70 ' les colonne font 70 point de large a adapter
        tablo = Range("e2:e" & Cells(Rows.Count, 1).End(xlUp).Row) 'on met en mémoire un tableau a 1 colonne avec les note
        tablo2 = Range("a2:e" & Cells(Rows.Count, 1).End(xlUp).Row) 'on met aussi en mémoire un tableau a 5 colonne (avec tout)
        ReDim tablofinal(UBound(tablo), 5) 'on dimentionne le tableau final a la dimension du tablo
        For e = 1 To UBound(tablo2) '1 ere boucle sur tou les items
            For i = 1 To UBound(tablo2) '2 eme boucle sur tout les items
                If tablo2(i, 5) = WorksheetFunction.Large(tablo, e) Then ' si la valeur de la 5 Emme colonne (note) du tablo2 est égale a la plus grande du tablo
                    lig = lig + 1 'on incrémente la variable lig de 1
                    For Z = 1 To 5 ' dans cette boucle on met tout les valeurs de chaque colonne et en ligne i du tablo2 dans le tableau final
                        tablofinal(lig, Z) = tablo2(i, Z)
                    Next
                    tablo2(i, 5) = 0 ' puisque c'était le plus grand on le met a zéro pour ne pas retomber dessus dans le futur tour de boucle
                End If
            Next
            If e = 10 Then Exit For 'ici on arrête a 10 (le top 10)
        Next
        ListBox1.List = tablofinal ' et on transpose au final le tablofinal dument remplie et dans l'ordre de la plus grande a la plus petite note
    End Sub
    salut le maroc au fait vivement le 16 juillet vacance 1 mois non loin d'Agadir j'irais me faire gratouiller la tète par les singe au cascades d'housoud
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir, le fil, bonsoir le forum,

    Bien vu Patrick ! En analysant ton code je me suis rendu compte que le mien ne fonctionnait pas... J'avais bien le top ten des notes mais le reste des données était répété en cas de notes identiques. Visiblement Application.Index(TC, , 5), qui renvoie la cinquième colonne du tableau TC, fonctionne mais pas dans la fonction Large...
    Le tien fonctionne impeccable... Agadir Bat Meknès à plate couture !

    Du coup, je me suis servi du tien pour modifier le mien :
    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
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim CN As Variant 'déclare la variable CN (Colonne des Notes)
    Dim I As Byte 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim TT(9, 3) As Variant 'déclare la variable TT (tableau Top Ten)
    Dim K As Byte 'déclare la variable K (incrément)
     
    Me.ListBox1.ColumnCount = 4 'définit le nombre de colonnes de la ListBox1
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    CN = Application.Index(TC, , 5) 'définit le tableau de la colonne des notes CN
    For I = 2 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
        For J = 2 To UBound(TC, 1) 'boucle 2 : sur toutes les lignes J du tableau de cellules TC (en partant de la seconde)
            'condition : si la note (ligne J, colonne 5 de TC) est la Ième plus grande valeur dans NC)
            If TC(J, 5) = Application.WorksheetFunction.Large(CN, I) Then
                TT(K, 0) = TC(J, 1) 'récupère le nom
                TT(K, 1) = TC(J, 3) 'récupère le sexe
                TT(K, 2) = TC(J, 4) 'récupère le l'origine
                TT(K, 3) = TC(J, 5) 'récupère la note
                K = K + 1 'incrémente K
                TC(J, 5) = "" 'vide TC(J,5) pour ne pas le reprendre en compte dans la boucle (écrit avec mon sang sur mon écran : Patrick m'a tué....)
            End If 'fin de la condition
        Next J 'prochaine ligne de la boucle 2
        If I = 10 Then Exit For 'si I vaut 10'sort de la boucle 1
    Next I 'prochaine ligne de la boucle 1
    Me.ListBox1.List = TT 'alimente la ListBox1
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut
    Bonjour Forum ,
    Bonjour Thautheme ,
    Bonjour patricktoulon ,

    Les deux codes marchent à merveille je ne sais pas comment vous remercier sincèrement .Je viens de retenir le code Thautheme vu je suis très nouveau et c’est à peine que j’ai compris ce qui se passe .Pour terminer, J’ai deux dernières questions, même si je sais que c’est un peu trop lourd!

    1) Je souhaite afficher le TOP 10 des filles et les TOP 10 garçons ou les deux ceci grâce à une check box.

    2) Dons l'UserForm j’ai ajouté un bouton de commande « sélectionner » de telle façon que lorsque je sélectionne une ligne de ListBox et je clique sur le bouton de commande ,le programme me parcourt le tableau de données (A1 : O73) pour chercher le nom (A2 : A73), prénom (B2 : B73) la note d’histoire (E2 : E73) et la moyenne générale (H2 : H73) correspondants à ma sélection et les coller dans la première ligne vide de la plage B46 : N58.

    Je vous remercie infiniment pour votre aide précieux

  7. #7
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,
    Citation Envoyé par Hadi
    le programme me parcourt le tableau de données (A1 : O73) pour chercher le nom (A2 : A73), prénom (B2 : B73) la note d’histoire (E2 : E73) et la moyenne générale (H2 : H73) correspondants à ma sélection et les coller dans la première ligne vide de la plage B46 : N58.
    Hadi, il y a une chose que je ne comprends pas dans ton énoncé. Tu parles d'un tableau allant jusqu'à la ligne 73 puis ensuite tu veux coller les données de l'élément sélectionné dans la première ligne vide de la plage allant de • B46 ? C'est déjà incongru vu que B46 contient déjà un prénom si ton tableau va jusqu'à la ligne 73.. à • N58 ? alors là ! Le mystère est entier pour moi quant à cette colonne N. Tu ne récupères que 4 données : Nom, Prénom, Note et Moyenne (ce qui devrait faire : colonnes B, C, D et E) ???

    À moins que ta plage ne se trouve dans autre onglet... Mais dans ce cas il te faudrait préciser lequel et je ne comprends toujours pas pour de B à N...

    Malgré cela je te propose un version avec le code modifié qui filtre le TOP TEN par rapport au sexe avec 3 OptionButtons (Général, Garçons et Filles).
    Ensuite, un Double-clic dans un élément de la ListBox1 renvoie Nom, Prénom, Note et Moyenne dans la première cellule vide de la colonne B à partir de la ligne 76...
    Puis ferme l'UserForm.

    Attention, en cas de données strictement identiques pour deux élèves différents (nom, prénom et note), le code pour le renvoi des données n'est pas sûr à 100 % car il ne renverra que la première des deux. Même si ce cas de figure doit être extrêmement rare, il serait préférable d'utiliser une numéro de matricule propre à chaque élève...

    Citation Envoyé par Hadi
    je veux également afficher : Le NOM, Le SEXE, L’ORIGINE et La NOTE D’histoire

    Dans ton Post Numéro 1 tu disais que tu ne voulais pas le prénom dans la ListBox1 mais comme maintenant il faut en tenir compte je l'ai ajouté...
    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    lol !! salut thautheme

    (écrit avec mon sang sur mon écran : Patrick m'a tué....)
    hehahaha!!!!


    bon pour le top 10 fille /garcon c'est pas bien compliqué tu n'a cas regarder comment je joue avec 3 tableau en mémoire dans mon dernier code qui a flingué thautheme LOL!!


    si tu y arrive pas je vous mettrais tous les deux sur la bonne piste

    l'homme qui tue a coup de ligne de code
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut
    Bonjour je vous remercie beaucoup;

    Ça marche très bien sur votre fichier, par ailleurs j’ai raconté quelques difficultés lorsque je voulais l’adapter à mon code.
    Je veux appliquer le programme en utilisant les check Box, mon critère de filtrage c’est au niveau de la colonne 1, les valeurs sujettes au TOP ten à la colonne 8, les noms des produits à la colonne A (pratiquement l’inverse) ! Ma source de données dans la « feuil2 ».
    Lorsque j’exécute :

    Par défaut c’est le check box3 qu’est cochée et lorsque je coche les autres c’est des erreurs qui surviennent je crois que j’ai mal adapté la procédure « Fileter » .
    Je vous envoie mon ficher en pièce joint, je suis vraiment perdu

    Code adapter_v01.xlsm

    Je vous remercie milles fois pour votre aide !

  10. #10
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Arf, c'est ce que je déteste le plus ! Se décarcasser pour trouver une solution et quand c'est fait, le demandeur dit : "j'arrive pas à adapter avec mon fichier" (à prononcer d'un ton niais). Avec bien sûr le dit fichier qui n'a plus rien à voir avec le problème exposé au début...
    Je ne suis pas un cador comme il y a beaucoup dans ce forum mais je prends plaisir à essayer de trouver des solutions et à commenter les codes quand j'y parviens. J'espère que cela fait avancer les connaissances du demandeur. Mais là, je pense que tu exagères et surtout que tu manques de respect. J'espère que tu trouveras d'autres gugusses pour résoudre tes problèmes... Désolé Hadi mais je passe la main et je te mets dans ma liste noire (comme si j'en avais une...). Si j'avais écrit ironiquement Patrick m'a tué !, à cause de son code génial, je ressuscite juste pour pouvoir écrire Hadi ma tué !... Mais il n'y a rien de génial.
    À plus,

    Thauthème

    Je suis Charlie

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut
    Bonjour ,
    Thauthème,je te passe un très grand bonjour, je sais très bien que tous les reproches et les leçons c'est pour mon bien, j'espère que je n'ai pas dit des choses qui fâchent. je suis désolé.

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    salut a tout les 2
    ayant vu que maintenant des critères sont a ajouter

    en partant de la demande initiale
    a savoir tri top ten (note) d'un tableau avec nom, prénom , sexe , origine , note)

    pour le fun je me suis amusé a ajouter l'argument fille ou garcon ou tout sexe confondu .
    dans ce nouvel exemple un argument est injecté par l'evenement d'un des 3 boutons(fille/garcon/tous)
    il suffisait de pas grand chose

    voila mon code du userform
    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
    Option Base 1
    Const fille = "fille"
    Const garcon = "garcon"
    Private Sub CommandButton1_Click()
        topten fille
    End Sub
    Private Sub CommandButton2_Click()
        topten garcon
    End Sub
    Private Sub CommandButton3_Click()
        topten
    End Sub
    Private Sub UserForm_Initialize()    'à l'initialisation de l'UserForm
        ListBox1.ColumnCount = 5    ' ajoute 5 colonne a la listbox
        ListBox1.ColumnWidths = 70    ' les colonne font 70 point de large a adapter
    End Sub
     
    Function topten(Optional sexe As String = "tous")
        Dim tablo, tablo2, i As Integer, tablofinal, lig, tablofille(), tablogarcon(), sex
        Select Case sexe
        Case "garcon": sex = "M"
        Case "fille": sex = "F"
        End Select
        tablo = Range("e2:e" & Cells(Rows.Count, 1).End(xlUp).Row)    'on met en mémoire un tableau a 1 colonne avec les note
        tablo2 = Range("a2:e" & Cells(Rows.Count, 1).End(xlUp).Row)    'on met aussi en mémoire un tableau a 5 colonne (avec tout)
        ReDim tablofinal(UBound(tablo), 5)    'on dimentionne le tableau final a la dimension du tablo
        For e = 1 To UBound(tablo2)    '1 ere boucle sur tou les items
            For i = 1 To UBound(tablo2)    '2 eme boucle sur tout les items
                If tablo2(i, 5) = WorksheetFunction.Large(tablo, e) Then    ' si la valeur de la 5 Emme colonne (note) du tablo2 est égale a la plus grande du tablo
                    If tablo2(i, 3) = sex And lig < 10 Then    'si l'item de 3 eme colonne = la variable sex predefinis dans le select case on ajoute
                        lig = lig + 1    'on incrémente la variable lig de 1
                        For Z = 1 To 5    ' dans cette boucle on met tout les valeurs de chaque colonne et en ligne i du tablo2 dans le tableau final
                            tablofinal(lig, Z) = tablo2(i, Z)
                        Next
                    ElseIf sexe = "tous" Then    ' si absence d'argument sexe alors on prend les filles et les garcons
                        If lig < 10 Then
                            lig = lig + 1    'on incrémente la variable lig de 1
                            For Z = 1 To 5    ' dans cette boucle on met tout les valeurs de chaque colonne et en ligne i du tablo2 dans le tableau final
                                tablofinal(lig, Z) = tablo2(i, Z)
                            Next
                        End If
                    End If
                    tablo2(i, 5) = 0    ' puisque c'était le plus grand on le met a zéro pour ne pas retomber dessus dans le futur tour de boucle
                End If
            Next
        Next
        ListBox1.List = tablofinal    ' et on transpose au final le tablofinal dument remplie et dans l'ordre de la plus grande a la plus petite note
    End Function
    je met un exemplaire du classeur en prime

    la je crois que j'achève thautheme
    Fichiers attachés Fichiers attachés
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    juste pour le fun
    j'ai même simplifié la chose et sans utilisation de la fonction Large
    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
    Sub tri()
      Dim tablo, tabfinal(), i As Long, e As Long, z As Long
      tablo = Range("a2:e" & Cells(Rows.Count, 1).End(xlUp).Row)    'on met aussi en mémoire un tableau a 5 colonne (avec tout)
    ReDim tabfinal(UBound(tablo), 5)
    For i = 1 To 10
    e = plusgrand(tablo)
    For z = 1 To 5: tabfinal(i, z) = tablo(e, z): Next
    tablo(e, 5) = 0
    MsgBox e
    Next
    ListBox1.List = tabfinal
    End Sub
    Function plusgrand(tabl) As Long
     Dim indexo As String, a As Long, lig As Long
    indexo = 0
    For a = 1 To UBound(tabl)
    If tabl(a, 5) > indexo Then
    indexo = tabl(a, 5)
    lig = a
    End If
    Next
    plusgrand = lig
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut Erreur en cas de valeur manquante
    Bonjour le forum, Bonjour patricktoulon,

    Merci beaucoup pour ton soutien, j'ai testé le code du fichier "top ten xls" il fonctionne très bien, il y a juste un petit problème lorsqu'il y a une valeur manquante dans la colonne des notes le code génère une erreur !Est e qu'y a une instruction pour éviter cela.

    Merci d"avance patricktoulon!

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    voila un fichier avec les deux méthodes gérant les erreurs dues a l'absence de note dans la colonne 5

    maintenant essai de l'adapter tout seul a ton fichier on ne peut pas tout faire a ta place c'est quand même toi l'étudiant n'est ce pas ?
    Fichiers attachés Fichiers attachés
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Merci beaucoup patricktoulon , effectivement c'est moi l'étudiant et le problème est bien résolus et cela grâce à votre contribution ainsi que celle de Thautheme!

    Un très grand Merci à vous tous!

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    Malgré le résolu et trouvant le sujet intéressant et

    ayant trouver l'idée de Thauthème(gérer l'index dans la fonction large )plutôt intéressante

    j'ai fait une fonction et surtout poussé le cabotinage jusqu'en imiter le nom

    mais en plus ma fonction peut donner la valeur ou l'index de la ligne du tableau ou se trouve le plus grand

    c'est Thauthème qui va saigner
    voila ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function worksheets_fonction_large(tabl As Variant, col As Long, index As Long, valvariant As Boolean) As Variant
        Dim indexo As long, a As Long, lig As Long
        indexo = 0
            For e = 1 To index
          For a = 1 To UBound(tabl)
             If tabl(a, 5) > indexo Then
                 indexo = tabl(a, 5)
                 lig = a
             End If
          Next
        worksheets_fonction_large = IIf(valvariant, lig, tabl(lig, col))
    tabl(lig, col) = 0.1
       Next
    End Function
    2 exemples d'utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test_l_index_de_ligne()Dim tablo,
        tablo = sheets(1).Range("a2:e" & Cells(Rows.count, 1).End(xlUp).Row)    'on met aussi en mémoire un tableau a 5 colonne (avec tout)
    'affiche un message te donnant la valeur de la colonne 5 de la ligne du plus grand  
    MsgBox worksheets_fonction_large(tablo, 5, 3, true)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test_la_valeur_de_ligne()Dim tablo,
        tablo = sheets(1).Range("a2:e" & Cells(Rows.count, 1).End(xlUp).Row)    'on met aussi en mémoire un tableau a 5 colonne (avec tout)
    'affiche un message te donnant la valeur de la colonne 5 de la ligne du plus grand  
    MsgBox worksheets_fonction_large(tablo, 5, 3, false)
    End Sub
    détail de la fonction


    Argument 1:"tabl" variable tableau ou plage de cellule a examiner
    Argument 2: "col" variable ou chiffre représentant la colonne a prendre en compte
    Argument 3: "index" variable ou chiffre représentant l'index du plus grand dans l'ordre décroissant ici en l'occurrence c'est le 3ème
    Argument 4: "valvariant" variable de type booléen impliquant le retour de l index de ligne ou la valeur du plus grand selon sont index

    je m'amuse bien avec ce truc
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut
    Bonjour patricktoulon,

    Vu mon niveau très faible, j'ai perdu le fils parque cela semble plus compliqué pour un débutant comme moi . Par ailleurs et grâce à ton code j'ai réalisé mon formulaire avec top 10,j'ai rencontré un problème c’est que le classement se réalise sur les valeurs à 1 chiffre suivi des valeurs à 2 chiffres puis les valeurs à 3 chiffres ainsi de suite ( par exemple la classeN°1 : TOP 10=89,66,54,52,46,43,35,144,140)

    si vous pouvez me donner un coup de pouce cela serait très gentil de votre part !

    Essais de Calcul .xlsm

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    change dans ton code format(truc machin,"00") pour format(truc machin,"000")
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Points : 27
    Points
    27
    Par défaut J'ai trouvé !!
    Bonjour,
    En fait le problème se trouve dans la variable indexo au lieu de String il faut changer pas single :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function plusgrand(tabl) As Long
        Dim indexo As Single, a As Long, lig As Long
        indexo = 0
        For a = 1 To UBound(tabl)
            If tabl(a, 9) > indexo Then
                indexo = tabl(a, 9)
                lig = a
            End If
        Next
        plusgrand = lig
    End Function

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/06/2007, 09h12
  2. recuperer les données access dans une listbox
    Par inforlab dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/05/2007, 22h09
  3. Réponses: 5
    Dernier message: 05/10/2006, 10h18
  4. [JTABLE] afficher les retours chariots dans une cellule
    Par d_token dans le forum Composants
    Réponses: 3
    Dernier message: 11/09/2006, 13h03
  5. Réponses: 3
    Dernier message: 05/07/2006, 17h29

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