IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche au fur et à mesure de la saisie [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut Recherche au fur et à mesure de la saisie
    Bonjour,

    Je voudrais effectuer une recherche au fur et à mesure de la saisie depuis la textbox d'une userfom.
    J'arrive à faire cette recherche mais qu'avec le mot complet.
    Voilà ce que j'ai pondu avec l'aide de qqes forum. (voir code à la fin)

    Est-ce que vous auriez une idée de comment faire ?
    Il me semble avoir vu qqe chose la dessus sur internet, mais je n'arrive pas à remettre l'oeil dessus.

    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
        ' s'il y a une saisie j'attaque la recherche
        If TextBox <> "" Then
            ' je vais chercher la dernière ligne écrite
            Dercell = Worksheets("FichesClient").Range("A65536").End(xlUp).Address
            'j'initialise ma plage de recherche
            Set Plage = Worksheets("FichesClient").Range("A3:" & Dercell)
     
            For Each Cellule In Plage
              If Cellule.Value <> "" Then
                Posit = Application.WorksheetFunction.Find(TextBox.Value, Cellule.Value, 1)
                If Posit > 0 Then
                    ' incrémentation num liste
                    NumeroLigne = NumeroLigne + 1
                    'je charge la liste
                    With ListBoxClient
                        .ColumnCount = 2
                        .ColumnWidths = "22;190"
                        .AddItem NumeroLigne
                        .List(.ListCount - 1, 1) = Cellule.Value
                    End With
                End If
              End If
            Next
     
        End If

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Si j'ai bien compris ce que tu veux faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Dim Dercell As Long
    Dim Plage as Range
     
    'Inutile de refaire cela à chaque fois, le mettre dans initialize
    Private Sub UserForm_Initialize()
        With ListBoxClient
            .ColumnCount = 2
            .ColumnWidths = "22;190"
        End With
        Dercell = Worksheets("FichesClient").Range("A65536").End(xlUp).Row
        Set Plage = Worksheets("FichesClient").Range("A3:A" & Dercell)
    End Sub
     
    Private Sub TextBox1_Change()
        ListBoxClient.Clear
        ' s'il y a une saisie j'attaque la recherche
        If TextBox1 <> "" Then
            ' je vais chercher la dernière ligne écrite
            'j'initialise ma plage de recherche
     
            For Each cellule In Plage
              If cellule.Value <> "" Then
                If Left(cellule, Len(TextBox1)) = TextBox1 Then
                    ' incrémentation num liste
                    NumeroLigne = NumeroLigne + 1
                    'je charge la liste
                    With ListBoxClient
                        .AddItem NumeroLigne
                        .List(.ListCount - 1, 1) = cellule.Value
                    End With
                End If
              End If
            Next
        End If
    End Sub
    Pas tester, je n'ai pas ton UF ni ton classeur
    A+

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour,
    un exemple, j'ai dans un userform Userform1 TextBox1 et ListBox1
    je récupère dans ListBox1 tous les mots contenus en colonne A de la feuille active començant par les lettres contenu dans textbox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TextBox1_Change()
    Dim i As Long
    Me.ListBox1.Clear
    For i = 1 To LastLig
        If Range("A" & i).Value Like Me.TextBox1.Value & "*" Then Me.ListBox1.AddItem Range("A" & i).Value
    Next i
    End Sub
     
    Private Sub UserForm_Initialize()
    LastLig = Cells(Rows.Count, 1).End(xlUp).Row
    End Sub
    avec dans un module généralpeut être, il y a mieux

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut stefan69 et le forum
    Un code qui ne fonctionne pas n'est pas des plus utiles. Un essais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub TextBox_Change()
    Dim F As Worksheet, Cel As Range
    Set F = Worksheets("FichesClient")
    If TextBox <> "" Then
        Set Cel = F.Range(F.[A3], F.[A65536].End(xlUp)).Find(What:=Me.TextBox, LookAt:=xlPart)
        If Cel Is Nothing Then
            MsgBox "pas de correspondance trouvée"
        Else
            MsgBox "la cellule " & Cel.Address(0, 0) & " contient les lettres """ & Me.TextBox & """"
        End If
    End If
    End Sub
    A+

  5. #5
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonsoir les amis le forum un exemple de recherche utilisant un "tablo" quasi instantane sur 20000 lignes plus possibilitees de recherche sur toutes les colonnes avec un module de classe. eventuellement on peut "affiner" le code pour modifier , supprimer & ajouter les données. j'ai construis mon exemple sur 9 colonnes on peut simplifier. pas trop le temps de vous voir en ce moment études obligent!!! bonne soirée leti a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/07/2013, 22h58
  2. Problème de recherche au fur et à mesure
    Par amine1980 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/04/2011, 02h44
  3. Filtrer la source d'un combo au fur et à mesure de la saisie
    Par modafine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/11/2008, 17h42
  4. calcul au fur et à mesure de la saisie
    Par papimcha dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/04/2008, 14h27
  5. Réponses: 6
    Dernier message: 12/01/2008, 22h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo