EXCEL (MODE)

Résolu
Bonjour,
un trés grand petit problème,lol
MODE : est une formule qui Renvoie la valeur la plus fréquente dans une matrice ou une plage de données. cette valeur est afficher sous forme numérique bien sure
que faire dans le cas ou la plage de donnée contient que des noms et on veux afficher le nom le plus repetes
je cherche depuis plusieurs jours mais rien trouvé
Configuration: Windows XP
Firefox 3.0.17

20 réponses

  1. Contributeur
    Salut,

    avec la fonction NB.SI(plage;critère)

    donc si ton tableau est en A1:C4 et le mot recherché est "toto"

    =NB.SI(A1:C4;"toto")

    Voilà :)
    0
    1. re et merci Mr RICKY pour ta réponse
      vous m'avez mal compris
      EXEMPLE:

      A
      DAVID
      SAM
      SAM
      CLAUD
      SAM
      DAVID
      SAM
      SAM
      SAM
      .
      .
      .
      ETC
      voila : SAM et le mot le plus fréquent, qu'elle la formule a utiliser pour l'afficher ?
      0
      1. Bonsoir,

        Je connais pas de formule preformatée pour ce genre de probleme.

        Par contre en VB c'est largement réalisable

        1/prendre le 1er mot
        compter le nombre de fois il apparait dans la zone
        2/prendre le mot suivant compter le nombre de fois qu'il apparait dans la zone
        si le nombre d'occurence est > alors enregistrer
        3/repeter 2/ jusqu'à la fin de la zone
        4/ afficher le resultat

        demain je le traduirais en VB

        bonne soirée
        0
        1. Merci jeje
          en traduisant ce que ta a dit je trouve :
          compter le nombre de reptation de chaque nom
          trouver le MAX
          Renvoyer le MAX.....

          pfffff
          c trop compliquer
          j'attendrais ta repense avec impatience
          0
          1. Contributeur
            à côté de chaque mot tu mets un code numérique, et tu feras ton CODE sur cette colonne ...
            DAVID 45
            SAM 203
            SAM 203
            CLAUD 35
            SAM 203
            DAVID 45
            SAM 203
            SAM 203
            SAM 203
            .
            .
            0
            1. Bonjour,

              voici un petit truc qui trouve le résultat.
              Je pense que la forme peut etre améliorée :

              Sub modemot()

              coldebut = InputBox("entrez le numero de la colonne du 1er mot")
              colfin = InputBox("entrez le numero de la colonne du dernier mot")
              lignedebut = InputBox("entrez le numero de la ligne du 1er mot")
              lignefin = InputBox("entrez le numero de la ligne du dernier mot")

              recurence = 0
              motmax = 0

              'Boucle de reference
              For a = coldebut To colfin
              For b = lignedebut To lignefin

              reference = Cells(b, a).Text
              'boucle de recherche de l'identique de reference
              For i = coldebut To colfin
              For j = lignedebut To lignefin

              If Cells(j, i).Text = reference Then
              recurence = recurence + 1
              End If

              Next
              Next
              If recurence > motmax Then
              motmax = recurence
              motmaxvaleur = reference
              End If
              recurence = 0
              Next
              Next

              'affichage du resultat
              Cells(lignefin + 1, coldebut + 0).Value = "le mot le plus de fois present est :"
              Cells(lignefin + 2, coldebut + 0).Value = motmaxvaleur
              Cells(lignefin + 3, coldebut + 0).Value = motmax
              End Sub
              0
              1. Contributeur
                Bonjour

                tes noms sont de A1 à A9 (d'après ton post)

                =INDEX(A1:A9;MIN(SI(NB.SI(A1:A9;A1:A9)=MAX(NB.SI(A1:A9;A1:A9));LIGNE(A1:A9))))


                formule matricielle à valider par Ctrl+maj+entrée (et non par entrée, comme d'hab)
                Le curseur doit être dans la barre de formule.
                XL encadre automatiquement la formule par des accolades

                edit 12:00: si ex-æquo, ne donne que le 1° rencontré en descendant !...
                0
                1. Bonsoir tous
                  Merci JEJE pour ton code,je ne sais pas comment faire pour le mettre dans une case, je ne connais rien en VBA,j'ai esseyé mais rien,merci quand même
                  Mr Raymond PENTIER,j'ai une liste qui contient presque 3200 noms,;) tu vois? numéroter 3200 case,lol,MERCI bqp pour ton idée
                  Michel,ta formule est impossible a valider, je ne sais pas pourquoi,malgré que j'ai suivi ta procédure (Ctrl+maj+entrée) mais toujours rien
                  dans l'attente de ce mode, veuillez acceptez messieurs mes chéres salutations excel-tives
                  lol
                  merci pour vos réponses
                  0
                  1. Contributeur
                    Bonjour,
                    michel_m l'a pourtant bien précisé, la formule fonctionne en A1:A9, elle renvoie ref si on ne demarre pas à la ligne 1...sinon il faut modifier pour trouver la premiere ligne du tableau :
                    =INDEX(B15:B23;MIN(SI(NB.SI(B15:B23;B15:B23)=MAX(NB.SI(B15:B23;B15:B23));LIGNE(B15:B23)-MIN(LIGNE(B15:B23)-1))))
                    à valider par CTRL+SHIFT+ENTREE
                    ça devrait le faire...
                    0
                    1. Pour mettre le code :
                      outil
                      macro
                      visual basic editor

                      ouvrir la page correspondant à l'onglet du ton fichier

                      copier le code
                      cliquer sur la touche play (sorte de fleche comme sur un lecteur mp3)

                      repondre aux questions posées

                      si ca marche, il faudra créer une icone pour un raccourci, mais on n'en est pas encore là. dits moi si ca te convient tout de meme
                      0
                      1. Bonjour
                        Merci et 1000 fois merci JEJE car ça marche parfaitement, j'ai aussi pu changer la case ou afficher le resultat, donc ,merci bqp encore une fois.
                        michel_m,a*ta formule marche que dans les case de A1:A9,j'ai essayé de déplacer les cadre mais bon,je sais que le problème vient de chez moi,et merci pour ta contribution
                        TOMPOLIS,merci pour ta réponse malgré qu'elle ne fonctionne pas car elle renvoie une erreur.
                        VOILA,Topic resolu, merci pour votre aide, surtout vous JEJE, :)
                        0
                        1. Contributeur
                          Bonjour,
                          pas le peine d'écrire en gras, pitié pour nos yeux....
                          la formule fonctionne très bien (attention au copier/coller depuis le forum, no temment en cas de renvoi à la ligne : https://www.cjoint.com/?bnkKEEVB1b ), apres j'ai utilisé une plage en B15:B23, à adapter...
                          0
                      2. Avec plaisir, et merci de ce retour.

                        A+

                        jéjé
                        0
                        1. OOPPPSS,
                          just une dernier chose, y a t il un moyen pour afficher le resuktat dans une autre feuille?
                          0
                          1. BJR
                            tompols,je ne sais pas pourquoi, mais ta formule a bien marché, j'ai aimé plus la méthode jeje car cette dernière offre la possibilité de fusionné plusieurs colonne, par contre la tienne on ne peux affiche que le mode d'une seul colonne
                            MERCI
                            JEJE,SVP, comment faire pour afficher le résultat dans une autre feuille?
                            0
                            1. Contributeur
                              @ Jejelefou : "Je pense que la forme peut etre améliorée" bah du coup jm'y suis essayé, on peut raccourcir un peu le code comme ça (et puis ça t'evite de passer par des compteurs de boucle a,b,i,j) :
                              Set zo = Range(Cells(lignedebut, coldebut), Cells(lignefin, colfin))
                              For Each c In zo
                                  reference = c.Text
                                  For Each d In zo
                                      If d.Text = reference Then
                                          recurence = recurence + 1
                                      End If
                                  Next
                                  If recurence > motmax Then
                                      motmax = recurence
                                      motmaxvaleur = reference
                                  End If
                                  recurence = 0
                              Next c
                              0
                              1. Contributeur
                                le plus simple serait de transformer ça en fonction, le code devient
                                Function motfrequent(plage As Range)
                                
                                recurence = 0
                                motmax = 0
                                
                                For Each c In plage
                                    reference = c.Text
                                    For Each d In plage
                                        If d.Text = reference Then
                                            recurence = recurence + 1
                                        End If
                                    Next
                                    If recurence > motmax Then
                                        motmax = recurence
                                        motmaxvaleur = reference
                                    End If
                                    recurence = 0
                                Next c
                                motfrequent = "le mot le plus de fois present est : " & motmaxvaleur & " (" & motmax & " occurences)"
                                
                                End Function


                                voilà, tu tu disposes ensuite d'une formule =motfrequent() utilisable depuis n'importe quelle feuille; exemple en A1:A9 : =motfrequent(Feuil1!A1:A9)
                                0
                                1. Bonjour tompols,

                                  Merci pour ce code par compte n'y connaissant rien au VBA, je souhaiterais que celui-ci soit applicable non plus pour des mots mais pour des valeurs numériques, tu saurais me donner un coup de pouce?

                                  Bien à toi,
                                  Max
                                  0
                                2. Contributeur
                                  Bonsoir,

                                  applicable non plus pour des mots mais pour des valeurs numériques
                                  Pas besoin de vba, c'est la fonction Mode()

                                  eric
                                  0
                              2. waw,,
                                je vais esseyer ça,just deux minute
                                0
                                1. Mr tompols, vous etes sur que c'est possible,car une goid je tape "play" elle me donne un nom d'une macro (suprimer noms)quand je l'execute, ça renvoie ERREUR d'execution 348" propriete ou methode non generer par cet objet"
                                  merci
                                  0
                                  1. Contributeur
                                    re,
                                    ce que je te donne c'est une fonction, donc tu colles simplement le code dans un module ou dans ThisWorkbook dans l'editeur vba (pour crer un module, click droit sur une feuille dans l'editeur puis insertion/module).
                                    Ensuite la formule s'utlise comme une simple fomule excel : https://www.cjoint.com/?bnlBp3OXC1
                                    pour ton pb avec supprimer_noms, merci de poster ici :https://forums.commentcamarche.net/forum/affich-16124351-vba-impossible-de-supprimer-tous-les-noms#4
                                    0
                                    1. merci,merci
                                      finalement c'est PAS TROP Compliqué,lol
                                      merci tompolis
                                      0