begin process at 2012 02 12 11:05:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaire

 > SAISIE SEMI-AUTOMATIQUE DES COMBOS ACCESS EN VB

SAISIE SEMI-AUTOMATIQUE DES COMBOS ACCESS EN VB


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaire Niveau :Débutant Date de création :26/04/2002 Date de mise à jour :26/04/2002 16:24:24 Vu :4 182

Auteur : DeathAngel

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Bonjour à tous,

qui n'a pas déjà été frustré par les combos sous VB (au moins jusqu'à la version 6, après j'ai pas testé :)), car on ne peut pas taper quelques lettres pour sélectionner automatiquement le premier élément de la liste qui correspond. Comme sous access quoi !

Bon, ça vaut ce que ça vaut hein, mais comme ça m'a pas mal servi, je me permet de vous le fournir.
J'espère que ça va vous être utile :)

Source

  • 'REMARQUE A SUPPRIMER
  • 'Cette procédure est à appeler sur le KeyUp de la ComboBox, comme suit
  • If (KeyCode >= vbKey0 And KeyCode <= vbKey9) Or _
  • (KeyCode >= vbKeyA And KeyCode <= vbKeyZ) Or _
  • (KeyCode >= vbKeyNumpad0 And KeyCode <= vbKeyNumpad9) Then
  • AutoSelection Me.cboMaCombo.Text, Me.cboMaCombo
  • End If
  • 'FIN REMARQUE
  • Sub AutoSelection(rstrValeurSaisie As String, rctlCombo As ComboBox)
  • '======================================================
  • '
  • ' PURP. : Simule les combos de access : on tape les
  • ' premières lettres, et l'appli complète avec
  • ' les données correspondantes dans la liste
  • '
  • '======================================================
  • ' Déclaration des variables
  • '======================================================
  • Dim strTemp As String
  • Dim i As Integer
  • Dim n As Integer
  • Dim intLongueur As Integer
  • '======================================================
  • On Error GoTo AutoSelection_Err
  • n = rctlCombo.ListCount - 1
  • intLongueur = Len(rstrValeurSaisie)
  • With rctlCombo
  • For i = 0 To n
  • If StrComp(Left(.List(i), intLongueur), rstrValeurSaisie, vbTextCompare) = 0 Then
  • 'On a trouvé un élément qui commence comme la valeur saisie
  • 'on le sélectionne
  • .ListIndex = i
  • 'On surligne la fin du mot
  • .SelStart = intLongueur
  • .SelLength = Len(.Text) - intLongueur
  • Exit For
  • End If
  • Next i
  • End With
  • AutoSelection_End:
  • Exit Sub
  • AutoSelection_Err:
  • msgbox err.Number & " : " & err.description
  • Resume AutoSelection_End
  • Resume
  • End Sub
'REMARQUE A SUPPRIMER
'Cette procédure est à appeler sur le KeyUp de la ComboBox, comme suit
    If (KeyCode >= vbKey0 And KeyCode <= vbKey9) Or _
            (KeyCode >= vbKeyA And KeyCode <= vbKeyZ) Or _
            (KeyCode >= vbKeyNumpad0 And KeyCode <= vbKeyNumpad9) Then
        AutoSelection Me.cboMaCombo.Text, Me.cboMaCombo
    End If
'FIN REMARQUE


Sub AutoSelection(rstrValeurSaisie As String, rctlCombo As ComboBox)
'======================================================
'
'   PURP.  : Simule les combos de access : on tape les
'       premières lettres, et l'appli complète avec
'       les données correspondantes dans la liste
'
'======================================================
'   Déclaration des variables
'======================================================
Dim strTemp As String
Dim i As Integer
Dim n As Integer
Dim intLongueur As Integer
'======================================================

On Error GoTo AutoSelection_Err

    n = rctlCombo.ListCount - 1
    intLongueur = Len(rstrValeurSaisie)
    
    With rctlCombo
        For i = 0 To n
            If StrComp(Left(.List(i), intLongueur), rstrValeurSaisie, vbTextCompare) = 0 Then
                'On a trouvé un élément qui commence comme la valeur saisie
                'on le sélectionne
                .ListIndex = i
                'On surligne la fin du mot
                .SelStart = intLongueur
                .SelLength = Len(.Text) - intLongueur
                Exit For
            End If
        Next i
    End With

AutoSelection_End:
    Exit Sub
    
AutoSelection_Err:
    msgbox err.Number & " : " &  err.description
    Resume AutoSelection_End
    Resume

End Sub 

 Conclusion

Voilou les loulous,
le code peut être simplifié (dans l'appel, on peut ne mettre que la référence à la combo, et traiter sa valeur dans la procédure).
Merci de laisser des commentaires :)

@peluche et bon dev'
DA


 Sources du même auteur

Source avec Zip TREEVIEW PERSONNALISABLE PAR L'UTILISATEUR
Source avec Zip EXEMPLE DE TREEVIEW

 Sources de la même categorie

Source avec Zip GEST COTISATION - ASSOCIATION par MOHA555
Source avec Zip HSCROLLBAR POUR L'ARRIÈRE PLAN par 320C
Source avec Zip Source avec une capture Source .NET (Dotnet) METTRE VOTRE FORM VB.NET EN PLEINE ÉCRAN par Gabilach
RECHERCHE DANS UNE LISTE À PARTIR D'UN CHAMP TEXTE par jmeunier
Source avec Zip GESTION DES COMSOMMABLE par gboraud

Commentaires et avis

Commentaire de PROGRAMMIX le 31/10/2002 10:57:11

Personnellement je procède autrement:

Private Sub MonCombo_Change()
    Dim t As String
    Dim i As Integer
    
'Je recueille le texte tapé
    t = UCase(MonCombo.Text)
    
    If t = "" Then Exit Sub
    
'Je passe en revue chacun des items de ma liste déroulante
    For i = 0 To MonCombo.ListCount - 1

'Si l'un des items commence par ma saisie...
        If UCase(Left(MonCombo.List(i), Len(t))) = t Then

'...je considère cet item comme celui à afficher
            MonCombo.Text = MonCombo.List(i)

'...je m'organise pour sélectionner ce que je n'ai pas encore saisie
            MonCombo.SelStart = Len(t)
            MonCombo.SelLength = Len(MonCombo.List(i)) - Len(t)
            
'...je quitte la procédure
            Exit Sub
        End If
    Next
End Sub

Commentaire de PROGRAMMIX le 31/10/2002 11:01:27

OUPS j'ai envoyé mon commentaire trop vite...

L'avantage de ta méthode, c'est que la procédure est utilisable par tout les combo de l'application sans qu'il soit nécessaire de taper tout ce que j'ai tapé dans ma procédure.

Mais pourquoi appeler la procédure sur le KeyUp du Combo plutôt que le Change ?
9/10

Commentaire de pfemarouen le 29/08/2007 01:24:29

la différence entre keyUp et Change dans cet exemple est l'entrée détectée par keyUp et pas par Change c'est tout
Merci pour vous deux pour le code
intéressant

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales