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 :

Trier une Listbox à partir d'une Textbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Par défaut Trier une Listbox à partir d'une Textbox
    Bonjour,

    Je cherche à lier un Textbox à une Listbox de manière à ce qu'en saisissant le nom du fournisseur dans ce textbox ça effectue un filtre dans ma listbox.

    Après de nombreuses recherches sur internet et sur ce forum, j'ai trouvé un bout de code qui semble convenir, mais quand je l'insère dans mon fichier j'obtiens l'erreur suivante : "erreur 1004 : erreur définie parl'application ou par l'objet"

    Vous trouverez ci-dessous le code utilisé :
    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
    Private Sub Textbox1_Change()
     Me.Listbox1.Clear
     i = 0
     Set plage = [frs].Resize(, NbCol)
     Set c = plage.Find(Me.Listbox1, , , xlPart)
     If Not c Is Nothing Then
          premier = c.Address
          Do
              Me.Listbox1.AddItem
              Lig = c.Row
              For col = 1 To NbCol
                Me.Listbox1.List(i, col - 1) = Cells(Lig, col)
              Next col
              i = i + 1
            Set c = plage.FindNext(c)
          Loop While Not c Is Nothing And c.Address <> premier
      End If
    End Sub
    L'erreur apparaît sur la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = [frs].Resize(, NbCol)
    frs étant la plage de cellules B2:B1000 correspondant aux noms des sociétés

    Un grand merci par avance pour votre aide !

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    C'est parce que NbCol n'est ni declaré ni initialise c'est donc un variant vide.

    - soit ta liste box est muticolonne et tu initialises NbCol avec le nombre de colonne
    - soit elle n'a qu'une colonne et dans ce cas NbCol ne sert a rien donc le resize non plus et donc For col = 1 To NbCol non plus...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Par défaut
    Salut Minick,

    Merci pour ta réponse !

    Ma listbox comporte 2 colonnes : une pour le numéro du fournisseur et une pour son nom. En fait je souhaiterais dans un formulaire faire un filtre à l'aide de la textbox dans la listbox pour ensuite cliquer sur le nom du fournisseur qui m'intéresse et que ça l'insère dans une cellule définie dans le classeur....

    j'ai également ce code au dessus, il me semble que NbCol est initialisé dedans (comme tu peux le constater, mes connaissances sont assez succinctes en VBA...)

    ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       Dim NbCol
    Private Sub FormDdePrix_Initialize()
      NbCol = [frs].CurrentRegion.Columns.Count
      Me.Listbox1.ColumnCount = NbCol
      For i = 1 To NbCol
        temp = temp & "50;"
      Next i
      Me.Listbox1.ColumnWidths = temp
      Me.Listbox1= Range("Frs").Resize(, NbCol).Value
     
    End Sub
    puis le code que j'ai indiqué plus haut.

    Je sais pas si je suis très claire...

    Encore merci pour ton aide

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Ok, donc NbCol est bien initialise...
    Verifie la valeur de NbCol avant le resize avec une MsgBox par exemple ou en debug

    Tu pourrais aussi utiliser Me.Listbox1.ColumnCount a la place de NbCol...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2010
    Messages : 9
    Par défaut
    Salut !

    En fait j'ai abandonné l'idée, j'arrivais pas à corriger l'erreur.

    Du coup, je fais une autocomplétion dans ma textbox et ça marche quasiment aussi bien que ce que je souhaitais à la base.

    Merci pour ton aide et le temps que tu as passé pour solutionner le problème !

    Pour info, ci-dessous le code que j'ai utilisé :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    ' rentrez ici la plage des données en autocomplétion
     
    Private Const r As String = "b1:b1000"
    Private sInput As String
    ' variable de blocage de la procédure Change
     
     
    Dim blnStop As Boolean
     
     
    Private Sub textbox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    ' gestion des touches d'effacement
        If (KeyCode = vbKeyBack) Or (KeyCode = vbKeyDelete) Then
            blnStop = True
        Else
            blnStop = False
        End If
     
    End Sub
     
     
    Private Sub textbox1_Change()
        Dim sWord As String
     
        If blnStop Then
            blnStop = False
        Else
            sInput = Left(Me.textbox1, Me.textbox1.SelStart)
            sWord = GetFirstCloserWord(sInput)
     
            If sWord & "" <> "" Then
     
                blnStop = True
                Me.textbox1.Text = sWord
                Me.textbox1.SelStart = Len(sInput)
                Me.textbox1.SelLength = 999999
            End If
        End If
     
    End Sub
     
     
    Private Function GetFirstCloserWord(ByVal Word As String) As String
     
        Dim c As Range
        For Each c In Sheets("Fournisseurs").Range(r).Cells
     
    If LCase(c.Value) Like LCase(Word & "*") Then
     
                GetFirstCloserWord = c.Value
                Exit Function
            End If
        Next c
        Set c = Nothing
     
    End Function

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

Discussions similaires

  1. [XL-2013] Recherche dans une listbox à partir d'un textbox ou optionbutton
    Par keithingel dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/11/2014, 15h36
  2. Remplir une grille à partir d'une listbox
    Par justgreat dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/11/2009, 04h49
  3. [AC-2007] calcul d'une somme à partir d'une listbox
    Par l.lakrakbi dans le forum IHM
    Réponses: 2
    Dernier message: 17/06/2009, 11h18
  4. [VB6]Ecriture dans une ListBox à partir d'une FileListBox
    Par Joffrey91 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/04/2009, 20h51
  5. Réponses: 1
    Dernier message: 26/09/2007, 17h50

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