afficher une liste décroissante des noms qui reviennent le plus souvent

JLO39

XLDnaute Nouveau
Bonjour chers forumeurs :)

J'ai effectué des recherches sur le forum avec les mots clés INDEX, RECHERCHEV et NBSI sans trouver mon bonheur ;(

Dans le fichier joint, vous pourrez voir deux tableaux.

Celui du haut donne le résultat obtenu sur une autre feuille appelé 'Tri Rapide'. (J'ai mis en E et G les formules qui correspondent aux résultats en A et C)

C'est sur celui du bas que je souhaiterais obtenir le résultat que je vais vous demander.

Ma demande:

Je souhaiterais que le tableau du bas soit une liste décroissante des noms qui reviennent le plus souvent dans le tableau du haut !! Il n'est aucunement obligatoire qu'il y ait l'indication que j'y ai mise du nombre de fois où l'on retrouve ce nom. Le classement décroissant me suffit largement :)

J'ai tenté des choses avec NBSI mais il me donne le nombre d’occurrence mais sans le nom et j'ai tenté aussi avec INDEX puis RECHERCHEV mais sans arriver au résultat escompté !! Peut-être faut-il imbriqué des formules, chose avec lesquels j'ai du mal !! Je suis vraiment pas un pro d'excel :)

Merci d'avance à ceux qui se pencheront sur le problème...
JLO
 

Pièces jointes

  • A venir et Priorité.xlsx
    12.8 KB · Affichages: 40

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Bonjour,

>Dans ce cas je passe par une macro (affaire de goût n'est-ce pas JB ?) ...

Une fonction perso comme présenté au post#2 a 2 avantages:

1- Réutilisable
2- Utilisable par une personne qui ne connait pas VBA

JB
 

Si...

XLDnaute Barbatruc
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

re

C'est juste avant d'enregistrer le message que j'ai pensé à la casse (sans contrôler:eek:). Merci donc David pour ton observation.

JB, pour le goût (le mien est douteux j'en conviens) les matricielles, que je domine mal, ne sont pas ma tasse de thé et de ce fait les évite. Je trouve toujours moyen, avec mes gros doigts maladroits, de mal saisir la combinaison clé. Maintenant si l'utilisateur s'en satisfait je n'ai rien à redire sinon merci pour ta réponse.
 

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Bonjour,

sans fichier exemple reproduisant ton problème difficile de t'aider puisque sur les autres fichiers cela fonctionne...

Bonjour David84,

télécharge le fichier donné par JB en date du 26/06/2015 13h14 (post#9), puis change le premier Advenger par ST.
Tu auras en résultat, 4 ST, 2 CocSM et 2 JLO mais à la 4ème ligne, il a y un résultat de 0 cité et #N/A.

Si ça ne fait pas ça chez toi, c'est qu'il doit y avoir un souci chez moi, mais je sais pas où :)

Merci pour ton aide.
 
Dernière édition:

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Bonjour,

>Dans ce cas je passe par une macro (affaire de goût n'est-ce pas JB ?) ...

Une fonction perso comme présenté au post#2 a 2 avantages:

1- Réutilisable
2- Utilisable par une personne qui ne connait pas VBA

JB

Bonjour JB,

j'aimerais bien utiliser ton système, mais mon souci vient du fait que je ne sais pas où copier tes formules et à quelle cible ça correspond dans le document.

Désolé de mon manque de connaissance sur le sujet mais il me faudrait du pas à pas pour bien faire, et je n'en demande pas tant. C'est déjà super que vous tentiez de m'aider :)

J'ai déjà bien avancé sur mon fichier grâce à tous les grands connaisseurs que vous êtes.

Mille merci encore pour le temps que vous me consacrez.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

1- Alt+F11
2-Insertion/Module
3- Copier/coller de ce code

Code:
Option Compare Text
Function FrequenceTexte(champ As Range)
  Set d1 = CreateObject("Scripting.Dictionary")
  d1.CompareMode = vbTextCompare
  temp = champ
  For Each c In temp
    If c <> "" Then d1(c) = d1(c) + 1
  Next c
  Dim b()
  ReDim b(1 To Application.Max(Application.Caller.Rows.Count, d1.Count), 1 To 2)
  i = 1
  For Each c In d1.keys
    b(i, 1) = c: b(i, 2) = d1(c)
    i = i + 1
  Next
  Call tri(b, 1, d1.Count)
  FrequenceTexte = b
End Function

Sub tri(a, gauc, droi)         ' Quick sort
 ref = a((gauc + droi) \ 2, 2)
 g = gauc: d = droi
 Do
     Do While a(g, 2) > ref: g = g + 1: Loop
     Do While ref > a(d, 2): d = d - 1: Loop
     If g <= d Then
       temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = temp
       temp = a(g, 2): a(g, 2) = a(d, 2): a(d, 2) = temp
       g = g + 1: d = d - 1
     End If
 Loop While g <= d
 If g < droi Then Call tri(a, g, droi)
 If gauc < d Then Call tri(a, gauc, d)
End Sub

4-
-Sélectionner E2:F8
=frequencetexte(C3:C12)
-Valider avec Maj+ctrl+entrée

JB
 

Pièces jointes

  • A venir et Priorité-1.xls
    42 KB · Affichages: 26
  • A venir et Priorité-1.xls
    42 KB · Affichages: 31
  • A venir et Priorité-1.xls
    42 KB · Affichages: 31

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Quand je valide, il me dit "nom ambigu détecté : frequencetexte" et il me met dans le doc des #NOM? à la place des données classées, etc...
Je te met mon fichier d'origine, ce sera peut-être mieux pour toi de voir ce qui cloche :)
 

Pièces jointes

  • Compte à rebours - construction bâtiments.xlsm
    72.5 KB · Affichages: 12
  • Compte à rebours - construction bâtiments.xlsm
    72.5 KB · Affichages: 24
  • Compte à rebours - construction bâtiments.xlsm
    72.5 KB · Affichages: 29
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

voir PJ

JB
 

Pièces jointes

  • Compte à rebours - construction bâtiments.xlsm
    56.2 KB · Affichages: 27
  • Compte à rebours - construction bâtiments.xlsm
    56.2 KB · Affichages: 30
  • Compte à rebours - construction bâtiments.xlsm
    56.2 KB · Affichages: 25

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Désolé JB, je me suis trompé de fichier :(

Peux-tu voir sur celui-là ?
 

Pièces jointes

  • Compte à rebours - construction bâtiments_moi.xlsm
    75.5 KB · Affichages: 23
  • Compte à rebours - construction bâtiments_moi.xlsm
    75.5 KB · Affichages: 26
  • Compte à rebours - construction bâtiments_moi.xlsm
    75.5 KB · Affichages: 25

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

voir pj

JB
 

Pièces jointes

  • Compte à rebours - construction bâtiments_moi.xlsm
    58.5 KB · Affichages: 30
  • Compte à rebours - construction bâtiments_moi.xlsm
    58.5 KB · Affichages: 36
  • Compte à rebours - construction bâtiments_moi.xlsm
    58.5 KB · Affichages: 27

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Merci JB... Puis-je te demander autre chose, ou ça serait abuser de ta gentillesse ?
Il me semble avoir vu ça sur ton site mais je sais pas le mettre en place non plus !!
C'est la saisie automatique genre "google" sur l'onglet "Tableau" à partir de l'onglet " Liste Bâtiments". Tu fais ça en combo mais j'ai pas réussi à faire :(
Et si tu peux pas, c'est pas grave, je te remercie vraiment énormément pour ce que tu as déjà fait pour moi :)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

voi pj

jb
 

Pièces jointes

  • Compte à rebours - construction bâtiments_moi.xlsm
    67.4 KB · Affichages: 16
  • Compte à rebours - construction bâtiments_moi.xlsm
    67.4 KB · Affichages: 37
  • Compte à rebours - construction bâtiments_moi.xlsm
    67.4 KB · Affichages: 34

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

T'es un vrai chef JB, merci grandement pour tout.
Petit détail, quand on clique dans la cellule (le combo) pour saisir quelque chose, est-il possible que la cellule se vide afin de ne pas être obligé d'effacer le contenu avant d'écrire ce que l'on veut ?
 

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Bon, j'ai trouvé comment vider le combo :) c'est avec le .clear :)
Par contre, j'avais pas vu avant mais ça fonctionne pas vraiment comme sur Google.
En fait, il réduit la liste en commençant par la première lettre, puis la deuxième, etc... mais il prend pas en compte les mots contenant la même combinaison de lettre même si elles ne sont pas au début du mot !!
Par exemple, si je tape "an", il me donnera anti-aérien mais me donnera pas "canon" qui pourtant contient aussi "an"
Merci pour vos réponses
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Bonjour,

Raz cellule au clic

Il suffit de remplacer Me.ComboBox1 =Target par Me.ComboBox1 = ""


Pour Raz, Double-clic


Code:
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Me.ComboBox1.List = a
  Me.ComboBox1 = ""
  Me.ComboBox1.Activate
  Me.ComboBox1.DropDown
End Sub

Sans titre.gif

>Par exemple, si je tape "an", il me donnera anti-aérien mais me donnera pas "canon" qui pourtant contient aussi "an"


C'est fait

Sans titre2.gif

Travaille sur un tableau et un dictionnaire. Le filtre des items au fur et à mesure de la frappe des caractères est donc très rapide, même si la liste est longue (30.000 items).
Ce qui n'est pas le cas si on travaille sur les cellules ou avec une requête SQL (qui travaille sur les cellules)

Code:
Dim a()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect(Range("B15:B20,D15:D20,f15:f20,h15:h20,B24:B29,D24:D29,f24:f29,h24:h29"), Target) Is Nothing And Target.Count = 1 Then
    a = Sheets("liste bâtiments").Range("liste").Value
    Me.ComboBox1.List = a
    Me.ComboBox1.Height = Target.Height + 3
    Me.ComboBox1.Width = Target.Width
    Me.ComboBox1.Top = Target.Top
    Me.ComboBox1.Left = Target.Left
    Me.ComboBox1 = Target
    Me.ComboBox1.Visible = True
    Me.ComboBox1.Activate
    'Me.ComboBox1.DropDown    ' ouverture automatique au clic dans la cellule (optionel)
  Else
    Me.ComboBox1.Visible = False
  End If
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1 <> "" And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
   Set d1 = CreateObject("Scripting.Dictionary")
   tmp = "*" & UCase(Me.ComboBox1) & "*"
   For Each c In a
     If UCase(c) Like tmp Then d1(c) = ""
   Next c
   Me.ComboBox1.List = d1.keys
   Me.ComboBox1.DropDown
 End If
   ActiveCell.Value = Me.ComboBox1
End Sub

Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Me.ComboBox1.List = a
  Me.ComboBox1 = ""
  Me.ComboBox1.Activate
  Me.ComboBox1.DropDown
End Sub

On peut également utiliser la fonction Filter() qui permet de filtrer un tableau à 1 dimension, donc très rapidement.
Dans ce cas (a = Application.Transpose([liste])

Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)

Code:
Private Sub ComboBox1_Change()
 If Me.ComboBox1 <> "" And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
   Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)
   Me.ComboBox1.DropDown
 End If
   ActiveCell.Value = Me.ComboBox1
End Sub

Pour compliquer le programme et le ralentir , on peut remplacer la fonction Filter() par une requête SQL avec ADO.

JB
 

Pièces jointes

  • Compte à rebours - construction bâtiments_moi-2.xlsm
    67.6 KB · Affichages: 39
  • Compte à rebours - construction bâtiments_moi-2.xlsm
    67.6 KB · Affichages: 38
  • Compte à rebours - construction bâtiments_moi-2.xlsm
    67.6 KB · Affichages: 34
  • Sans titre.gif
    Sans titre.gif
    16.1 KB · Affichages: 22
  • Sans titre.gif
    Sans titre.gif
    16.1 KB · Affichages: 23
Dernière édition:

JLO39

XLDnaute Nouveau
Re : afficher une liste décroissante des noms qui reviennent le plus souvent

Merci Tatiak,

mais comment je peux intégré ceci à mon fichier de façon à ce que dès lors où je clique dans la cellule adéquate et que je commence à taper mon texte, les noms apparaissent petit à petit ?

Merci pour votre aide.
JLO
 

Pièces jointes

  • Compte à rebours - construction bâtiments_OK - copie.xlsm
    82.6 KB · Affichages: 24

Discussions similaires