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 ?
 

Sghaier Chafaa

XLDnaute Junior
Enfin moi je commencerais par mettre les données sous forme de tableau et dans l'UserForm je mettrais des ComboBox pour CODE PCT, NOM COMMERCIAL, CATEGORIE et DCI.
oui bonne idée, je vois

sinon connaissez vous comment je peut affecté à
RechercheAvecDCI1 = tableau/liste donnée trié et unique avec les fonctions déjà écrites en code

on lieu qu'elle reste sous cette forme
VB:
RechercheAvecDCI1 = Application.Transpose(f.Range("F2:F" & f.[a65000].End(xlUp).Row).value)
 

Dranreb

XLDnaute Barbatruc
Avec le module MSujetCBx :
VB:
SujDCI = SujetCBx(f.[F2].Resize(f.[A65000].End(xlUp).Row - 1)
CBxDCI.List = SujDCI(0)
S'il est Private, SujDCI(1)(CBxDCI.ListIndex) sera un tableau de long des numéros de ligne où se trouve la clé choisie. Mais bon, un ComboBoxLiées, lui, se charge de tout, en particulier de renvoyer par évènement Bingo ou Résultat la liste des numéros de lignes commun à toutes les clés choisies dans toute les ComboBox dont on lui a confié la charge.
 

Sghaier Chafaa

XLDnaute Junior
Avec le module MSujetCBx :
VB:
SujDCI = SujetCBx(f.[F2].Resize(f.[A65000].End(xlUp).Row - 1)
CBxDCI.List = SujDCI(0)
S'il est Private, SujDCI(1)(CBxDCI.ListIndex) sera un tableau de long des numéros de ligne où se trouve la clé choisie. Mais bon, un ComboBoxLiées, lui, se charge de tout, en particulier de renvoyer par évènement Bingo ou Résultat la liste des numéros de lignes commun à toutes les clés choisies dans toute les ComboBox dont on lui a confié la charge.
Dranreb ! merci pour tt le temps et l'effort que vous m'avez consacré , surtt à une heure pareil de nuit
j'essaye de profiter de vos recommandations
tt mes remerciements 🙏
 

Discussions similaires

Réponses
0
Affichages
151

Statistiques des forums

Discussions
312 208
Messages
2 086 257
Membres
103 167
dernier inscrit
miriame