Combobox avec Saisie semie automatique [Résolu]

FREDB0 2 Messages postés lundi 7 juillet 2014Date d'inscription 8 juillet 2014 Dernière intervention - 7 juil. 2014 à 11:26 - Dernière réponse : jordane45 20561 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 avril 2018 Dernière intervention
- 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
Afficher la suite 

3 réponses

Répondre au sujet
jordane45 20561 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 avril 2018 Dernière intervention - 8 juil. 2014 à 09:44
-2
Utile
2
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


FREDB0 2 Messages postés lundi 7 juillet 2014Date d'inscription 8 juillet 2014 Dernière intervention - 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 :)
jordane45 20561 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 avril 2018 Dernière intervention - 8 juil. 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


Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.