OVH Cloud OVH Cloud

Pseudo saisie semi auto

3 réponses
Avatar
Ticker
Bonjour à tous.
Je suis nouveau ici, et débutant en VBA, aussi, je me retrouve confronter à
un problème comme nombres de débutant.
En fait, je voudrais que lorsque je tapes du texte dans une textbox, il me
recherche la chaine de caractères equivalente dans une listbox (je pourrais
faire dans une combobox, mais, ça ne correspond pas à ce que je veux). Et
s'il ne trouve pas qu'il ne parte pas dans tous les sens comme c'est
actuellement le cas. Je n'ose même pas mettre mon code tellement il me
parait mauvais.
Voilà merci d'avance à tous.

3 réponses

Avatar
Denis Michon
Bonjour Ticker,

Es-tu dans un formulaire ?

Si tes contrôles sont directement dans la feuille, ils émanent de quelle barre d'outils: "Formulaire" ou "Contrôle" ?


Salutations!


"Ticker" a écrit dans le message de news:
Bonjour à tous.
Je suis nouveau ici, et débutant en VBA, aussi, je me retrouve confronter à
un problème comme nombres de débutant.
En fait, je voudrais que lorsque je tapes du texte dans une textbox, il me
recherche la chaine de caractères equivalente dans une listbox (je pourrais
faire dans une combobox, mais, ça ne correspond pas à ce que je veux). Et
s'il ne trouve pas qu'il ne parte pas dans tous les sens comme c'est
actuellement le cas. Je n'ose même pas mettre mon code tellement il me
parait mauvais.
Voilà merci d'avance à tous.
Avatar
Denis Michon
Bonjour Ticker,


Essaie ceci : Adapte le nom des contrôles si nécessaire.


'--------------------------------------
Private Sub TextBox1_Change()

Dim MaList(), Nb As Integer, A As Integer
Dim C As String, B As Variant
Nb = Me.ComboBox1.ListCount - 1

ReDim Preserve MaList(Nb)
For A = 0 To Nb
MaList(A) = Left(Me.ComboBox1.List(A), Len(Me.TextBox1))
Next

C = Me.TextBox1.Text
B = Application.Match(C, MaList, 0)

If Not IsError(B) Then
Me.ComboBox1.Value = Me.ComboBox1.List(B - 1)
End If

End Sub
'--------------------------------------


Salutations!


"Ticker" a écrit dans le message de news:
J'utilise 1 userform pour réaliser ce programme. Je mets quand même mon code (je précise que je fais du VBA depuis
vendredi dernier :o) )
Ce code que j'ai modifié depuis la dernière fois marche à peu près. Mais si le mot n'est pas dans la liste, il
selectionne le dernier mot. j'ai encore cherché, mais impossible pour moi de lui dire de rester sur le dernier mot
trouvé :-(
Il ne revient au bon endroit que si on corrige pour qu'il trouve une chaine correcte.

-----------------------------------------------------------------------------------------
Public C As Integer
----------------------------------
Private Sub UserForm_Initialize()
Dim i As Integer

# J'ai mis 10 pour C car je travaille sur un exemple, ce n'est pas mon programme que je fais actuellement

C = 10

# Je crée ma petite liste

For i = 1 To 50
C = C + 1
ListBox1.AddItem C & "Choice" & (ListBox1.ListCount + 1)
Next i

# Par defaut, l'index est à -1,c'est pour ça que j'ai ajouté 1 (je sais pas si c'est vraiment utile)

ListBox1.ListIndex = ListBox1.ListIndex + 1
......
----------------------------------

Private Sub TextBox1_Change()

Dim Longueur As Integer
Dim Caractere As String
Dim Sauve As Integer

Longueur = Len(TextBox1.Text)
Position = 1

ListBox1.ListIndex = Sauve
Sauve = ListBox1.ListIndex + 1

# C me permet de connaitre la valeur maximum de l'index, sinon il y a un bug. Il compte le nombre de mot dans ma liste
# Dans la boucle While je cherche une chaine equivalente à celle tapée

While LCase(TextBox1.Text) <> LCase(Left(ListBox1.Text, Longueur)) And ListBox1.ListIndex < C - 12
ListBox1.ListIndex = ListBox1.ListIndex + 1

# L'instruction If est une tentative de sauvegarde de la dernière valeur correct de l'index, pour ne pas qu'il descende
jusqu'au dernier mot

If TextBox1.Text = Left(ListBox1.Text, Longueur) Then Sauve = ListBox1.ListIndex: Exit Sub
Wend
ListBox1.ListIndex = Sauve

End Sub
-----------------------------------
Si vous avez besoin d'autres informations pour m'aider, n'hésitez pas.
Merci beaucoup
A bientôt!
Avatar
Ticker
Le code fonctionne encore mieux que ce que j'esperais.
Un grand merci, j'ai déjà mis votre nom dans les remerciements.