Fonction Mode Égaliter

Résolu/Fermé
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014 - Modifié par Duncoup le 16/06/2014 à 21:51
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014 - 18 juin 2014 à 20:10
Bonjour tout le monde

Je suis nouveau sur le forum, mais après avoir longuement chercher un peux partout sur le net je ne trouve pas une réponse à mon problème.
Voilà j'ai deux cellule: "G33" ou sa doit m'afficher le plus cité de la colonne "C10:C39" jusque là, la fonction mode marche très bien je n'est pas de souci, mais par contre dans la cellule "G34" sa doit m'afficher le deuxième plus cité et la je voie pas comment faire et aussi en cas d'égalité j'aimerais avoir les plus cités en "G33" et les deuxième plus cité en "G34" si on peux pas afficher plusieurs résultat dans une seule cellule à la limite en cas d'égalité sa peux être du nombre le plus petit au plus grand exemple le 2 le 7 le 9 son a égalité peuvent s'afficher en "G33" le 2 en "H33" le 7 et en "I33" le 9 et pareil pour le deuxième plus cité sa me gène pas mais j'ai du mal avec la fonction à employer peut être passer par du VBA, en tout cas merci d'avance pour vos réponse en espérant avoir été clair dans ma demande
A voir également:

14 réponses

Raymond PENTIER Messages postés 58437 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 15 mai 2024 17 109
17 juin 2014 à 02:50
Bonjour Duncoup, et bienvenue parmi les membres inscrits.

Je n'ai pas la réponse à ta question, parce que je n'ai pas compris ce que tu as écrit :
- Essaie de faire des phrases courtes, avec des virgules et des points-virgules.
- Tu aurais pu écrire ta formule ; ça nous aurait guidé.
- Pour illustrer tes propos, rien ne vaut de joindre son fichier ; pour cela tu vas dans https://www.cjoint.com/ pour créer le lien, que tu reviens coller ici.
0
Raymond PENTIER Messages postés 58437 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 15 mai 2024 17 109
17 juin 2014 à 02:53
Ce n'est pas la fonction MODE qui convient, puisqu'elle ne donne effectivement que "le plus cité".
Tu ferais mieux d'employer la fontion GRANDE.VALEUR
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
Modifié par eriiic le 17/06/2014 à 09:28
Bonjour,

pas trouvé mieux que :
=MODE(SI($C$10:$C$39=$G$33;-LIGNE($C$10:$C$39);$C$10:$C$39))
formule matricielle à valider avec shift+ctrl+entrée
Et à condition que tu n'aies pas de nombres négatifs.
Par contre pour ta demande 'en cas d'égalité' il vaudrait mieux une fonction personnalisée en vba. Je n'ose pas imaginer ce que donnerait une formule en se basant sur ce façon de faire.

eric

En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
Modifié par Duncoup le 17/06/2014 à 10:03
Bonjour à tous

Tout d'abord merci Raymond et eriiic

Je vais essayer d'être plus clair, et grâce a ton lien de joindre ce que je souhaite.

Ci joint le fichier: https://www.cjoint.com/?0FrjE2yXEi4

Dans l'exemple fourni pour le plus cité j'utilise la fonction "=MODE(C10:C39)" ce qui me donne le plus cité, mais en cas d'égalité il ne m'en affiche que un seul...

La fonction "GRANDE.VALEUR" ne me donne pas les plus cités mais les plus grand chiffres de la colonne sauf condition que je ne connais pas.

Pour le deuxième plus cité je ne vois pas d'option à la fonction "MODE" pour faire comme tu dit plus haut avec "GRANDE.VALEUR" de chercher le deuxième plus cités.

Merci d'avance pour vos réponses.
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
17 juin 2014 à 12:44
Proposition de fonction personnalisée.
Attention au mode de saisie de la formule, c'est très particulier (fonction matricielle validée sur une plage).
Si tu dois modifier la taille de la plage de la réponse il faut sélectionner l'ancienne plage et supprimer la formule matricielle pour pouvoir créer la nouvelle.

C'était assez chaud à faire et prise de tête, bien tester sur différents exemples.
https://www.cjoint.com/?DFrmLlTnQGn

eric
0

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

Posez votre question
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
17 juin 2014 à 13:39
Merci eriiic

mais quand je rentre la formule matricielle sur ma plage sur mon fichier sa me met rien en résultat les cases sont vide j'ai du raté un épisode:

Je fais "=modePlus($C$10:$C$39)" je valide "{=modePlus($C$10:$C$39)}"

Sur "G33" pour les premiers
et "G34" pour les deuxièmes

Comme tu as fais dans l'exemple un c'est parfais j'en veux que 2 merci d'avance, sinon sa marche bien, juste moi qui comprend pas comment tu as fais.

Et si on peux afficher un petit tiret au lieu de la virgule pour séparer les chiffres égaux sa serais parfais sinon c'est un détail :)

En tout cas merci beaucoup à vous pour vaux lumières.
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
17 juin 2014 à 15:35
Il faut mettre le code vba dans ton classeur.
Alt+F11 pour afficher VBE. La fonction est dans le Module1
Insérer un module standard dans ton classeur et y coller le code.
Code modifié:
Function modePlus(plage As Range) As Variant
    Dim c As Range, reponse() As String, nbRep As Long, i As Long
    Dim Dict As Variant, clé As String, lig As Long
    Dim tmp1 As Long, tmp2 As Long, fini As Boolean
    Dim arr() As Long

    Set Dict = CreateObject("Scripting.Dictionary")
    'comptage
    ReDim reponse(1 To plage.Cells.Count)
    For Each c In plage
        If c.Value <> "" Then Dict.Item(c.Value) = Dict.Item(c.Value) + 1
    Next c
    ' dict dans tableau
    ReDim arr(0 To Dict.Count - 1, 0 To 1)
    cles = Dict.Keys
    For lig = 0 To UBound(cles)
        arr(lig, 0) = cles(lig)
        arr(lig, 1) = Dict(cles(lig))
    Next lig
    ' tri qté décroissante
    Do
        fini = True
        For i = 0 To UBound(arr) - 1
            If arr(i, 1) < arr(i + 1, 1) Then
                tmp1 = arr(i, 0): tmp2 = arr(i, 1)
                arr(i, 0) = arr(i + 1, 0): arr(i, 1) = arr(i + 1, 1)
                arr(i + 1, 0) = tmp1: arr(i + 1, 1) = tmp2
                fini = False
            End If
        Next i
    Loop While Not fini
    ReDim reponse(1 To 1)
    reponse(1) = arr(0, 0)
    nbRep = 1
    For i = 1 To UBound(arr) - 1
        If arr(i, 1) = arr(i - 1, 1) Then
            reponse(nbRep) = reponse(nbRep) & "-" & arr(i, 0)
            'i = i + 1
        Else
            nbRep = nbRep + 1
            ReDim Preserve reponse(1 To nbRep)
            reponse(nbRep) = arr(i, 0)
        End If
    Next i
    If plage.Columns.Count = 1 Then
        ' matrice verticale
        modePlus = Application.Transpose(reponse)
    Else
        ' matrice horizontale
        modePlus = reponse
    End If
End Function

eric
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
Modifié par eriiic le 17/06/2014 à 17:20
remplacer :
clé As String
par :
clé As Variant

Nouveau fichier avec valeurs ordonnées au post #9
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
Modifié par Duncoup le 17/06/2014 à 16:52
re eriiic et encore merci beaucoup

J'ai compris pourquoi sa marchais pas effectivement me manquais le VBA :)

Je vais encore t'embêter un peux j'aimerais qui me les ranges du plus petit au plus grand en cas d'égalité exemple "1 - 2 - 7 - 12".

Et pour finir si tu peux et veux bien me verifier le code que tu as mis plus haut car j'ai l'impression y a des erreurs merci encore vraiment beaucoup pour ton aide.

"L'erreur c'est peut être moi" y manquais un 'stop comme tu avais mis dans ton ancien code je regarde de mon coter j'essaye de comprendre.

Du coup sa marche mais je n'arrive pas a mettre pour le deuxième dans "G34"
il m'affiche la même chose que "G33" comment tu fais pour avoir les deux case différente car sur le tiens sa marche avec la même formule pour les deux.

J'ai essayer en tirant vers le bas en l'écrivant dans les deux en même temps un après l'autre rien ne change j'ai toujours les deux case identique avec le résultat du premier.

Sinon la fonction "modePlus" est bien prise en compte.

Je n'y connais rien en VBA mais sa a l'air vraiment utile du coup me suis commander sa pour les nuls :) en te remerciant encore simpa de ta part.
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
17 juin 2014 à 17:17
car j'ai l'impression y a des erreurs
Une impression ce n'est pas suffisant.
Fournir un classeur exemple avec l'anomalie en expliquant où elle est.
Sinon il y avait un problème de déclaration de variable qui ne m'avait pas généré d'erreur. C'est peut-être ça qui a posé un pb chez toi.

J'ai ajouté une fonctionnalité : si tu sélectionnes 2 colonnes avant de valider la formule tu as le compteur en 2nde colonne. Voir G45:H47
https://www.cjoint.com/?DFrrqhKLeME

eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
17 juin 2014 à 17:29
re eriiic

Vraiment désolé j'essaye d'être précis je t'envoie le fichier:

Ci-joint: https://www.cjoint.com/?0FrrCN07fSR

merci encore.
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
17 juin 2014 à 21:24
Re tout le monde

Merci infiniment eriiic après avoir bien travaillée et tourné mon problème dans tous les sens grâce à toi j'ai enfin trouver ou les mettre ces formules youpi :)

un grand merci à tous :)
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
17 juin 2014 à 23:07
J'ai vu ton fichier.
Effectivement il reste un problème si tu demande plus de réponses qu'il en existe.
Je verrais ça demain.
eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
17 juin 2014 à 23:08
ok merci
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
Modifié par eriiic le 18/06/2014 à 00:06
Livraison plus tôt que prévu, c'est un peu plus propre maintenant.
N'hésite pas à signaler si tu remarques d'autres anomalies (avec fichier stp).
https://www.cjoint.com/?DFsaf52f6H8

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 00:03
je te remerci pour ta rapidité et ton aide précieuse je vais voir sa je te tiens au courrant
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 00:09
sa semble marcher au petit oignon :) merci beaucoup eriiic
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 00:28
je te joint un fichier pour une petit option si jamais on peux le faire sa serais le top merci d'avance en tout cas déjà un énorme merci pour ce que tu as fais bonne nuit à toi.

fichier ci-joint: https://www.cjoint.com/?0FsaB1o3ixT
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
18 juin 2014 à 10:49
Bonjour,

Ce n'est plus une option, c'est tout à fait autre chose (ou presque).
Code dans le module Feuil1.
Je me sers de G33:G34 pour récupérer résultat et couleurs.
La mise à jour se fait automatiquement en cas de changement sur C10:C29 dans la mesure où se sont des saisies et non le résultat de formules. Sinon il faut surveiller les cellules de saisie à l'origine des changements.
https://www.cjoint.com/c/DFskUhY4ciX

eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 11:38
Bonjour tout le monde et merci eriiic

Je viens de regarder il y a des erreurs je te joint le fichier:

ci-joint: https://www.cjoint.com/?0FslFW9ApnM

Et de mon coter j'ai été obligé de rajouter une colonne donc sa part de H10:H29 maintenant et le résultat est aussi en H33:34.

Sa doit aussi me mettre en couleur les 3 colonnes par ligne égale au résultat comme tu as fais mais la colonne des chiffres aussi doit ce mettre en couleur sa serais parfais.

Sinon un grand merci encore sa marche très bien mis appart un petit bug de rien du tout, et moi qui change la colonne.

J'ai pas trouver le code couleur non plus dans ton code, pour la changer si besoin un jours.

A vrai dire je sais même pas comment il la met j'ai encore du mal avec le VBA j'essaye de comprendre je regarde sur le net mais pas simple.

Merci en tout cas.
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
18 juin 2014 à 12:20
sa marche très bien mis appart un petit bug de rien du tout
Quel bug ? Il faut que je devine ?

En vba il faut éviter de changer la structure de la feuille ou sinon modifier les références des cellules dans le code.
Je t'ai nommé des plages sur la feuille, le code utilise maintenant ces noms. En cas de changement modifier la définition de ces noms :
plage1 : C10:C39
plage2 : H33:34
plage3 : H10:H29

J'ai pas trouver le code couleur non plus dans ton code, pour la changer si besoin un jours.
Je te l'ai écris : Je me sers de G33:G34 pour récupérer résultat et couleurs

Fichier adapté : https://www.cjoint.com/?DFsmtZWZ138

eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 12:38
merci eriiic je regarde sinon pour l'erreur je l'avais mise sur le fichier sa affichais pas toutes les égalités :)
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
18 juin 2014 à 12:49
Si tu changes toutes les colonnes sans adapter le code forcément ça marche moins bien, ce n'est pas un bug.
Y'a-t'il toujours un pb ?
eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
Modifié par Duncoup le 18/06/2014 à 13:09
Si je change les nombres que tu as mis il me garde les couleurs dans la colonne des nombre de 1 à 20 "(H10:H29)"

merci encore eriiic
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
18 juin 2014 à 14:51
Non constaté, si tu peux confirmer....
Lorsque tu testes un fichier avec macro ne le fait pas après l'avoir ouvert à partir du net.
Enregistre-le dans un autre répertoire que temp et ouvre-le pour que les macros réagissent correctement.
Une petite correction quand même : mise en noir de la 1ère colonne, oubliée lors du passage de 2 à 3 colonnes à colorer.
https://www.cjoint.com/?DFsoYnZk6cy

eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 13:46
je te renvoie un fichier du souci de couleur qui reste

ci-joint: https://www.cjoint.com/?0FsnPZBcdSO

Et je t'ai mis dedans une fonction qui me serais utile que je voie pas comment on fais je trouve bien le 10 avec "GRANDE.VALEUR" mais je voudrais il m'affiche le 6 de la colonne juste avant.

j'Ai essayer avec la fonction "decaler" mais sa marche pas.

Merci encore de ton aide.
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
18 juin 2014 à 15:34
Je n'avais pas vu ce post.
Pas sûr d'avoir bien compris. En J10 :
=SI(I10=MAX($I$10:$I$29);6;"")
à recopier vers le bas.
eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
Modifié par Duncoup le 18/06/2014 à 15:51
en fait c'est par rapport au fichier que j'ai joint:

le résultat le plus grand est : est 10 dans la plage "I10:I29"

mais moi je veux savoir la valeur en face ce résultat sur la plage "H10:H29"

dans cet exemple sa tombe sur le 6

"en gros sa devrais me donner un truc du genre"

=GRANDE.VALEUR(I10:I29;1) j'obtiens 10 de la colonne "I10:I29"et je veux pour résultat le 6 de la colonne "H10:H29" qui ce situ sur la même ligne moins une colonne.

je te remet le fichier: https://www.cjoint.com/?0FsnPZBcdSO
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
18 juin 2014 à 16:29
=INDEX(plage3;EQUIV(MAX($I$10:$I$29);$I$10:$I$29;0))

eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 17:31
parfais merci infiniment eriiic
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 18:33
re eriiic

J'ai un dernier petit souci avec les couleurs automatique quand je protège ma feuille il m'ouvre la fenêtre débogage a chaque fois et ne colorie plus rien voilà sinon tout marche super bien en te remerciant encore.
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
Modifié par eriiic le 18/06/2014 à 19:29
Au début :
ActiveSheet.Unprotect "mdp"
à la fin :
ActiveSheet.Protect "mdp"

Si tu veux tous les paramètres regarde l'aide qui est très bien faite, et pense à utiliser l'enregistreur de macro quand tu cherches une fonction.

eric
0
Duncoup Messages postés 19 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
18 juin 2014 à 20:10
j'ai fini par réussir youpi encore un grand merci :)

quelle galère quand on connais pas :)))

vraiment un grand grand merci :p
0