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 :

Filtrer une listbox depuis une textbox


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2017
    Messages : 50
    Points : 28
    Points
    28
    Par défaut Filtrer une listbox depuis une textbox
    Bonjour à toutes et tous!

    Je dispose d'une Base de données Accès contenant des informations de format varié : (reférence unique/ texte / dates / nombres) afin d'effectuer un suivi de dossier.

    j'ai développé une feuille de création de nouveau dossier dans Excel me permettant d'ajouter/Mettre à jour la base de donnée Accès.

    J'utilise une connexion ADODB pour ajouter de nouvelles entrée et tout fonctionne parfaitement bien.

    Mon Objectif:

    #1 Alimenter une listbox dans Excel contenant la base de donnée Accès afin de filter sur le dossier par mot clef
    #2 Effectuer une recherche intuitive dans une textbox afin de retrouver le dossier désiré
    #3 Refléter le contenu de la ligne selectionnée de la listbox dans la feuille du classeur contenant la macro.


    Etat d'avancement:

    La Listbox est alimentée par les bonnes infos.
    Mais lors d'une recherche dans la textbox, une erreur apparait lorsque la recherche rencontre une cellule vide (NULL).
    Run-Time error '-2147352571 (80020005)':
    Could not set the list property. Type mismatch

    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
     
     
    Dim Liste()
    Private Sub UserForm_Initialize()
       Set cnn = New ADODB.Connection
        cnn.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=G:\BaseAccess.accdb"
      Set rs = cnn.Execute("SELECT count(*) as nb FROM [TABLE4]' where ID<>0")
      ReDim Liste(0 To rs("nb"), 1 To 10)
       Set rs = cnn.Execute("SELECT * FROM [TABLE4]' where ID<> 0")
      Me.ListBox1.Clear
      i = 0
      Do While Not rs.EOF
     
        On Error Resume Next 
     
        ListBox1.AddItem
        Liste(i, 1) = rs("ID")
        Liste(i, 2) = rs("1")
        Liste(i, 3) = rs("2")
        Liste(i, 4) = rs("3")
        Liste(i, 5) = rs("4")
        Liste(i, 6) = rs("5")
        Liste(i, 7) = rs("6")
        Liste(i, 8) = rs("7")
        Liste(i, 9) = rs("8")
        Liste(i, 10) = rs("9")
     
        On Error GoTo 0
        i = i + 1
        rs.MoveNext
      Loop
      With Me.ListBox1
         .ColumnWidths = "50;90;90;50;60;60;60;60;60;60"
        .List = Liste
      End With
     
      rs.Close
      cnn.Close
      Set rs = Nothing
      Set cnn = Nothing
     
     
      Liste = Me.ListBox1.List
     
    End Sub


    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
     
    Private Sub TextBox1_Change()
       Me.ListBox1.Clear
       j = 0
       For i = LBound(Liste) To UBound(Liste)
     
         If UCase(Liste(i, 0)) Like "*" & UCase(Me.TextBox1) & "*" _
            Or "*" & UCase(Liste(i, 1)) Like "*" & UCase(Me.TextBox1) & "*" Then
     
            On Error GoTo 0
     
            Me.ListBox1.AddItem Liste(i, 0)
            Me.ListBox1.List(j, 1) = Liste(i, 1) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
            Me.ListBox1.List(j, 2) = Liste(i, 2) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
            Me.ListBox1.List(j, 3) = Liste(i, 3) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
            Me.ListBox1.List(j, 4) = Liste(i, 4) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
            Me.ListBox1.List(j, 5) = Liste(i, 5) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
            Me.ListBox1.List(j, 6) = Liste(i, 6) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access 
            Me.ListBox1.List(j, 7) = Liste(i, 7) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
            Me.ListBox1.List(j, 8) = Liste(i, 8) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
            Me.ListBox1.List(j, 9) = Liste(i, 9) 'l erreur apparait dans l'une de ces lignes lorsque la valeur recherchée rencontre une cellule vide de la base de donnée Access
     
      On Error GoTo 0
            j = j + 1
         End If
       Next i
    End Sub

    J'ai essayé par traitement d'erreur (On error resume next ) (on error goto 0) mais cela ne fonctionne pas.
    La solution consistant à remplir chacun des champs vide de la Base Access n'est pas viable bien entendu

    Auriez vous la compétence et l'amabilité de m'indiquer comment modifier le code?

    Merci d'avance!
    Mandra

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je pensai qu'on avait un peut effleuré e sujet!

    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
    Dim cnn As Object, Rs As Object
    Private Sub UserForm_Initialize()
    Set cnn = CreateObject("AdoDb.Connection")
    With cnn
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source==G:\BaseAccess.accdb;"
        Me.ListBox1.Clear
        Me.ListBox1.ColumnWidths = "50;90;90;50;60;60;60;60;60;60"
        Set Rs = cnn.Execute("SELECT * FROM [TABLE4] where ID<> 0")
        Me.ListBox1.List = Application.Transpose(Rs.getrows)
      End With
    End With
    End Sub
     
    Private Sub TextBox1_Change()
     Me.ListBox1.Clear
        Me.ListBox1.ColumnWidths = "50;90;90;50;60;60;60;60;60;60"
        Rs.Requery
        If Not Rs.EOF Then
            Rs.filteur = "[ID] Like %" & UCase(Me.TextBox1) & "%' OR [1] Like %" & UCase(Me.TextBox1) & "%'"
            If Not Rs.EOF Then Me.ListBox1.List = Application.Transpose(Rs.getrows)
        End If
        End Sub
    Private Sub UserForm_Terminate()
    cnn.Close
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2017
    Messages : 50
    Points : 28
    Points
    28
    Par défaut
    Bonjour l'ami ,

    Effleuré oui mais pas finalisé. En tous les cas, merci pour ton aide!

    j'ai inséré le code que tu afourni mais il renvoie une erreur :

    Run-time error '-2147217805 (80040e73)':
    Format of the initialization string does not conform to the OLE DB Specification.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source==G:\BaseAccess.accdb;"
    Une idée ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Désolé j'ai mis deux fois égal {Source==G:\BaseAccess.accdb}!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\BaseAccess.accdb;"

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2017
    Messages : 50
    Points : 28
    Points
    28
    Par défaut
    Dysorthographie,

    On avance, petit à petit

    Lors de l'initialisation du Userform, je reçois une erreur à la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ListBox1.List = Application.Transpose(Rs.GetRows)
    "run-time error '13':
    Type mismatch"

    Dans le debug, si je re-lance l'exécution, cette fois-ci j'ai une run-time error '3021':
    "Either BOF or EOF is True, or the current record has been deleted.
    Requested operation requires a current record."

    Y-a t il une rules à respecter dans le nom des colonnes de la BDD ? Peut-il y avoir des champs non remplis ?

    Merci pour ton aide,
    Mandra

Discussions similaires

  1. Modifier dimension d'un commentaire dans EXCEL depuis access
    Par petitours dans le forum VBA Access
    Réponses: 5
    Dernier message: 22/11/2007, 09h08
  2. Inserer image dans excel depuis access
    Par flool dans le forum VBA Access
    Réponses: 11
    Dernier message: 25/07/2006, 09h29
  3. Afficher résultat requete dans Excel depuis Access.
    Par nighthawksf117a dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 23h18
  4. [VBA]Requete Excel vers BDD Acces
    Par Emcy dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 08/11/2005, 09h51

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