Résultat dans ListBox selon le nbre le plus haut, Ss doublon

Boujour à tous,

Je viens de parcourir beaucoup de sujet dans ce forum qui traitent des Listbox sans doublon, mais elle ne m'aident pas vraiment pour mon cas qui semblait très simple. (mais pas pour moi! )

Voici comment se compose mon classeur:

dans un classeur j'ai deux feuilles

Base

Clients

Dans la feuille 'Base' j'ai une colonne 'clients' , une colonne 'travailleurs' et une colonne 'Acc/Ref/Na'

Dans la feuille 'Clients' j'ai une colonne 'Clients'

dans la feuille 'Base' j'ai un bouton qui ouvre un UserForm composé d'une ComboBox et d'une ListBox

Je dois charger la Combo avec les données de la feuille 'Clients' = pas de souci

Ensuite selon la sélection de la Combo je doit voir affiché le(s) travailleur(s) de la feuille 'Base'. Sans doublon!

Mais c'est pas tout, !

La liste doit aussi s'afficher dans un ordre précis :

en fonction du nombre d’occurrence travailleurs avec la mention 'accepte'

donc si Pierre à accepté 3 fois pour le client aa1, il devra se trouver en haut de la liste si c'est le nombre le plus élevée. Les autres 'refuse et NA' peuvent être en bas sans ordre particulier

Je vous remercie à tous, déjà pour le temps que prendrez à lire ceci et pour toute aide.

Kyronex

Bonsoir,

Cf pj

Option Compare Text
Private Sub UserForm_Initialize()
  Set f = Sheets("Base")
  a = f.Range("a2:c" & f.[a65000].End(xlUp).Row)
  Set d = CreateObject("Scripting.Dictionary")
  For i = LBound(a) To UBound(a)
    If a(i, 3) = "accepte" Then
      d(a(i, 1)) = d(a(i, 1)) + 1
    Else
      d(a(i, 1)) = d(a(i, 1))
    End If
  Next i
  Dim b()
  ReDim b(1 To d.Count, 1 To 2)
  i = 1
  For Each c In d.keys
    b(i, 1) = c
    b(i, 2) = d(c)
    i = i + 1
  Next c
  Call Tri(b, LBound(b), UBound(b))
  Me.ComboBox1.List = b
End Sub
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, 2): a(g, 2) = a(d, 2): a(d, 2) = temp
       temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = 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

Ceuzin

Merci beaucoup pour la rapidité je vais regarder ca demain matin, je vous tiens au courant

Promis je donne des news.

bonjour Ceuzin,

Merci pour le temps passé sur mon casse-tête

Ce n'est pas vraiment ce que j'avais besoin mais je pense que je me suis mal expliqué.

Donc je vais recommencer en essayant d'être plus clair. (suis des fois un peu brouillon! )

La feuille de calcule que j'ai crée est en fait un exemple de ce que je doit remplir au bureau

Je dois rappeler prioritairement des personnes en fonction d'un "Ranking"

Pour bien mieux comprendre j'ai fait des petits dessins et des explications dans la feuille de calcul.

Si ceci peut t'aider...... à m'aider

Kyronex

Personne ne peut m'aider?

Bonjour

kyronex a écrit :

Personne ne peut m'aider?

Moi je voulais bien mais XL ne voulait pas

Une solution pas des plus simple mais qui a le mérite (enfin j'espère) de fonctionner

A tester

Bonjour,

cf PJ

Ceuzin

Merci Banzai, mais ca me dit Erreur de l'application ou de l'objet"

à la ligne

With Sheets("Base")

Nblg = .Range("A" & Rows.Count).End(xlUp).Row

Mais ne te casses plus la tête, je crois que Ceuzin est un génie!, la seule chose qui me reste à faire avec son code est d'apprendre toutes les fonctionnalités que je ne connaissais pas encore! (y en à !) Mais vous n'avez pas idée combien je suis content de votre aide à tous deux.

Un grand merci

Banzai64 a écrit :

Bonjour

kyronex a écrit :

Personne ne peut m'aider?

Moi je voulais bien mais XL ne voulait pas

Une solution pas des plus simple mais qui a le mérite (enfin j'espère) de fonctionner

A tester





je voudrai dire tant de chose, mais je vais m’arrêter à t'es un génie!

Merci 1000x

ceuzin a écrit :

Bonjour,

cf PJ

Ceuzin

Encore une fois merci,

je viens d'apprendre Scripting.dictionary,

j'ai fais des recherches sur le net et ca va bcp m'aider dans mes débuts du VBA,

Rechercher des sujets similaires à "resultat listbox nbre haut doublon"