XL 2013 recherche intuitif semi automatique dans Combobox (trié et avec valeur unique) inseré en UserForm VBA

Sghaier Chafaa

XLDnaute Junior
Bonjour tt le monde
pas trop doué en VBA, je collecte et assemble des codes pour arriver à mon objectif
je suis à moitié chemin, mais depuis des jours je vise à rechercher intuitivement / avec saisie semi automatique mais sans aboutir

mon code actuel:

VB:
Dim f, ligneEnreg, RechercheAvecDCI(), RechercheAvecDCI1()

Private Sub UserForm_Initialize()

    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim values As Collection
    Dim item As Variant
    
    ' Référence à la feuille f1
    Set ws = ThisWorkbook.Sheets("f1")
    
    ' Référence à la colonne B de la feuille f1
    Set rng = ws.Range("F:F")
    
    ' Collection pour stocker les valeurs uniques
    Set values = New Collection
    
'charger/parcourir la colonne F de la feuille °f1° dans/avec la variable °RechercheAvecDCI1°
  RechercheAvecDCI1 = Application.Transpose(ws.Range("F2:F" & ws.[a65000].End(xlUp).Row).value)

    ' Parcours de la colonne B pour récupérer les valeurs uniques
    On Error Resume Next ' Ignorer les erreurs si une valeur est déjà dans la collection
    For Each cell In rng
        If cell.value <> "" Then
            values.Add cell.value, CStr(cell.value)
        End If
    Next cell
    On Error GoTo 0 ' Réactiver les erreurs
    
    ' Trier les valeurs par ordre alphabétique
    Call SortCollection(values)
    
    ' Effacer le contenu actuel de la combobox
    ComboChoixMedct1.Clear
    
    ' Ajouter les valeurs à la combobox
    For Each item In values
        ComboChoixMedct1.AddItem item
    Next item
  
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'FONCTION DE TRIE ALPHABETIQUE  UTILISEE POUR LE TRI DE LA LISTE DéROULANTE
Sub SortCollection(ByRef values As Collection)
    Dim i As Long
    Dim j As Long
    Dim temp As Variant
    
    For i = 1 To values.Count - 1
        For j = i + 1 To values.Count
            If StrComp(values(i), values(j), vbTextCompare) > 0 Then
                temp = values(j)
                values.Remove j
                values.Add temp, temp, i
            End If
        Next j
    Next i
   End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'LA FONCTION QUI CHERCHE ET REMPLIE la liste déroulante et LES ZONES DES TEXTE PAR LES INFO
Private Sub ComboChoixMedct1_click()
 'on récupère tous les champs
  'charger liste des medicaments par DCI si l'option de recherche par DCI est coché
  If Opt_Btn_DCI.value = True Then
 For i = 1 To UBound(RechercheAvecDCI1)
  If RechercheAvecDCI1(i) = ComboChoixMedct1 Then
    ligneEnreg = i + 1
          
    Me.Controls("TxtBx_DCI") = f.Cells(ligneEnreg, 6)
    Me.Controls("TxtBx_Categ") = f.Cells(ligneEnreg, 5)
    Me.Controls("TxtBx_AP") = f.Cells(ligneEnreg, 7)
      
    End If
  Next i
end sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

c'est ici que je me bloque :

VB:
'recherche intuitif de liste trié POUR ComboChoixMedct1
Private Sub ComboChoixMedct1_Change()

    ???? ici que je me Bloque ????
End Sub

car ,je pense , je doit trouver comment changer le chargement de "RechercheAvecDCI1" de cette forme:

VB:
RechercheAvecDCI1 = Application.Transpose(f.Range("F2:F" & f.[a65000].End(xlUp).Row).value)

à une forme oû RechercheAvecDCI1 doit contenir la liste à valeur unique et trié

quelqu'un a de solution svp ?
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
J'ai un module de service nommé MSujetCBx qui sait créer des liste classées et sans doublon à partir d'une colonne de plage, et aussi de déduire d'un tel résultat une sous-liste conforme à un masque d'opérateur Like.
En dehors de la Liste destinée à la ComboBox, est également produit une liste de listes de numéros de lignes où chaque valeur a été trouvée, ce qui permet de ne plus avoir à la chercher dans la base lorsqu'ell aura été choisie dans la ComboBox. Je vous en équiperai votre fichier joint si vous voulez.
 

Sghaier Chafaa

XLDnaute Junior
Bonsoir.
J'ai un module de service nommé MSujetCBx qui sait créer des liste classées et sans doublon à partir d'une colonne de plage, et aussi de déduire d'un tel résultat une sous-liste conforme à un masque d'opérateur Like.
En dehors de la Liste destinée à la ComboBox, est également produit une liste de listes de numéros de lignes où chaque valeur a été trouvée, ce qui permet de ne plus avoir à la chercher dans la base lorsqu'ell aura été choisie dans la ComboBox. Je vous en équiperai votre fichier joint si vous voulez.
merci dranreb pour la proposition, je vous enverrais le fichier avec plaisir, sauf je veux savoir si ce module permet une recherche intitive ou pas, car c'est mon objectif pour le moment
 

Dranreb

XLDnaute Barbatruc
J'ai vaguement l'impression que vous voulez aussi pouvoir chercher différentes choses dans d'autre colonnes. Dans ce cas, si vous mettez une ComboBox pour chaque colonne concernée, j'ai aussi carrément un objet ComboBoxLiées qui utilise abondamment le module MSujetCBx et se charge de tout, les listes et la gestion des choix.
 

Sghaier Chafaa

XLDnaute Junior
J'ai vaguement l'impression que vous voulez aussi pouvoir chercher différentes choses dans d'autre colonnes. Dans ce cas, si vous mettez une ComboBox pour chaque colonne concernée, j'ai aussi carrément un objet ComboBoxLiées qui utilise abondamment le module MSujetCBx et se charge de tout, les listes et la gestion des choix.
tout à fait , j'ai 3 critères de recherche, pour eviter de faire 3 combbx , j'ai mis condition de l'option de recherche selectionné , en cdt if et je réagit suivant ça pour emplir la seule liste combbx
car je cherche de simplifier l'interface et minimiser la complexité processeur en chargeant une seule liste combbx, sinon c'est 3 mini-programmes qui s'executent el //

la raison pour laquelle je vous ai affirmé que je suis en moitié de chemin et je cherche uniquement intuitiver la recherche dans la liste combbx ;)
 

Dranreb

XLDnaute Barbatruc
Non, ce serait considérablement plus simple avec autant de ComboBox que de colonnes concernées.
Les réactions aux choix, on ne s'en occupe plus du tout dans l'UserForm, c'est à l'entière charge de l'objet ComboBoxLiées. Juste dans l'UserForm_Initialize on prévoie une série de CLs.Add NomCBx, NCol.
CLs étant le nom de l'objet ComboBoxLiées, NomCBx le nom d'une ComboBox et NCol le numéro de colonne ou son intitulé si c'est un tableau à références structurées.
 

Sghaier Chafaa

XLDnaute Junior
Non, ce serait considérablement plus simple avec autant de ComboBox que de colonnes concernées.
Les réactions aux choix, on ne s'en occupe plus du tout dans l'UserForm, c'est à l'entière charge de l'objet ComboBoxLiées. Juste dans l'UserForm_Initialize on prévoie une série de CLs.Add NomCBx, NCol.
CLs étant le nom de l'objet ComboBoxLiées, NomCBx le nom d'une ComboBox et NCol le numéro de colonne ou son intitulé si c'est un tableau à références structurées.
je comprends votre point de vue, je vois l'interet
reste le codage , comme jou vous ai dit, je suis pas trop doué en programmation, plutôt en algorithme 😅

des codes à proposer ?
quelque chose qui simplifie, optimise les ressources et donne beau recherche intuitif 😳
 

Dranreb

XLDnaute Barbatruc
Et bien regardez cette application qui n'a rien à voir mais qui vous donnera un peu une idée. Elle utilise aussi un autre objet, le ControlsAssociés pour les autres contrôles que ceux dédiés à la recherche.
Elle a d'ailleurs la recherche intuitive sur les Nom et Prénom.
 

Pièces jointes

  • CLsCAsContacts.xlsm
    171.4 KB · Affichages: 4

Sghaier Chafaa

XLDnaute Junior
Et bien regardez cette application qui n'a rien à voir mais qui vous donnera un peu une idée. Elle utilise aussi un autre objet, le ControlsAssociés pour les autres contrôles que ceux dédiés à la recherche.
Elle a d'ailleurs la recherche intuitive sur les Nom et Prénom.
pas mal

mais ma formule recherche intuitif en ComboChoixMedct ( et non ComboChoixMedct1) , juste en bas de fichier que j'ai partagé, est bcp plus efficace et polyvalante

en effet elle permet la recherche par " peut contenir" pas forçement au debut de chaine ou la fin
et surtt elle permet la navigation par flèches de claiver sans recharger toute la liste avec tt les données comme fait le tableau nom&prenom
 

Sghaier Chafaa

XLDnaute Junior
Et bien regardez cette application qui n'a rien à voir mais qui vous donnera un peu une idée. Elle utilise aussi un autre objet, le ControlsAssociés pour les autres contrôles que ceux dédiés à la recherche.
Elle a d'ailleurs la recherche intuitive sur les Nom et Prénom.
si vous remarquez
ComboChoixMedct1: permet un chargement trié et valeur sans doublon ( mais non intuitif)
ComboChoixMedct: permet un chargement intuitif , mais valeurs doubles et non triées

🤕🏳️
 

Sghaier Chafaa

XLDnaute Junior
Ben dans le mien, si vous tapez EU dans la CBxNom elle vous affiche aussitôt les DEUF, PETITPEU et TÉRIEUR qui les contiennent. Si vous tapez CE il propose CELLER, mais après touche Suppr, il propose CELLER et PONCE.
oui pas mal, si vous trouviez solution de corriger la navigation par fleches de clavier lors de choix de l'option proposé


sinon, par faveur, pouvez vous me corriger mon code, car je sais plus quoi faire :'(
 

Discussions similaires

Réponses
0
Affichages
151

Statistiques des forums

Discussions
312 207
Messages
2 086 252
Membres
103 166
dernier inscrit
ZAHRAA