Combobox avec Saisie semie automatique

Résolu
FREDB0 Messages postés 2 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 8 juillet 2014 - 7 juil. 2014 à 11:26
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 8 juil. 2014 à 10:20
Bonjour,


Plutot novice en code je souhaiterai paramètrer une combobox dans un userform permettant la saisie semi automatique à partir des caractère entrés.
Ma combobox est reliée à une liste de noms présents en sheet 1 .

Jusqu'a présent, ma Combobox reconnait les noms "commencant" par les caractères entrés mais pas les résultats "comprenant" les caractères .

Par exemple, si j'entre dans le champde la combo les caractères "ABC", la Combobox m'affiche tt les noms de la forme (ABCxxx, ABCxxxy, ABCxxyz...) et je voudrais qu'elle m'affiche tt les nom comprenant "ABC", c'est à dire (xxxABCxx, ABCxxx, xxxABC...)

Pouvez vous m'aider ??? hyper imp^

Merci

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
8 juil. 2014 à 09:44
Bonjour,

Je pense que pour y parvenir il va te falloir utiliser la méthode FIND d'Excel.
voir... la fonction FINDALL:
Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches() As String) As Boolean
' --------------------------------------------------------------------------------------------------------------
' FindAll - To find all instances of the1 given string and return the row numbers.
' If there are not any matches the function will return false
' --------------------------------------------------------------------------------------------------------------
On Error GoTo Err_Trap
Dim rFnd As Range ' Range Object
Dim iArr As Integer ' Counter for Array
Dim rFirstAddress ' Address of the First Find
' -----------------
' Clear the Array
' -----------------
Erase arMatches
Set rFnd = oSht.Range(sRange).Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart)

If Not rFnd Is Nothing Then
rFirstAddress = rFnd.Address
Do Until rFnd Is Nothing
iArr = iArr + 1
ReDim Preserve arMatches(iArr)
arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne
Set rFnd = oSht.Range(sRange).FindNext(rFnd)
If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search
Loop
FindAll = True
Else
' ----------------------
' No Value is Found
' ----------------------
FindAll = False
End If
' -----------------------
' Error Handling
' -----------------------
Err_Trap:
If Err <> 0 Then
MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All"
Err.Clear
FindAll = False
Exit Function
End If
End Function


Exemple d'utilisation:
Sub Exemple_util_Findall()

Dim arTemp() As String 'variable tableau pour la fonction Findall
Dim ValCherchee as string
ValCherchee="test"
Dim Nom_Feuil as string
Nom_Feuil = "Feuil1"

'---------------------------------------------------------------
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For X = 1 To UBound(arTemp)
debug.print arTemp(X)
Next
End If

End sub


0
FREDB0 Messages postés 2 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 8 juillet 2014
8 juil. 2014 à 09:48
oui c'est ce que j'ai commencé à faire .. Ton code devrait m'être bien utile pour y parvenir .

Merci pour ton réponse :)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
Modifié par jordane45 le 8/07/2014 à 10:20
Mon code est presque exactement ce qu'il te faut.
Il faut juste modifier la SUB d'exemple pour la mettre dans ton Private Sub ComboBox1_Change() _change (et ajuster quelques variables)

un truc du genre :

Private Sub ComboBox1_Change()
Dim arTemp() As String 'variable tableau pour la fonction Findall
Dim ValCherchee As String
    ValCherchee = ComboBox1.Value

'Nom de la feuille où se trouvent les valeurs à chercher
Dim Nom_Feuil As String
Nom_Feuil = "Feuil1"
'Numéro de colonne où se trouvent les données
Dim DataColumn  As Integer
    DataColumn = 1
'Plage de cellules où chercher les données
Dim ma_plage As String
    ma_plage = "A1:A1000"
'---------------------------------------------------------------
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

If bFound = True Then
    Debug.Print "Nb occurences : " & UBound(arTemp)
        For x = 1 To UBound(arTemp)
            Debug.Print arTemp(x)
            'On rempli la combo.
             ComboBox1.AddItem (Cells(arTemp(x), DataColumn))
        Next
    End If
End Sub


0
Rejoignez-nous