[VBA] Erreur dans un array

Bonjour,

J'ai un problème sur mon fichier excel, je met en place un bouton de recherche dans mon fichier mais j'ai une erreur "Index out of bounds" que je n'arrive pas à résoudre,

je ne comprend pas pourquoi il y a cette erreur, le code :

Sub cb_Recherche()

UserForm1.ListView1.ListItems.Clear

If UserForm1.ComboBox1.Text <> "" Then
    For Ligne = LBound(Tableau, 1) To UBound(Tableau, 1)
        If Tableau(Ligne, 1) Like "*" & UserForm1.ComboBox1.Text & "*" Then
            UserForm1.ListView1.ListItems.Add Text:=Tableau(Ligne, 1)
                For Colonne = LBound(Tableau, 2) + 1 To UBound(Tableau, 2) - 1
                    UserForm1.ListView1.ListItems(Ligne).ListSubItems.Add Text:=Tableau(Ligne, Colonne)
                Next Colonne
        End If
    Next Ligne
End If

End Sub

L'erreur est sur la ligne :

UserForm1.ListView1.ListItems(Ligne).ListSubItems.Add Text:=Tableau(Ligne, Colonne)
4listview.xlsm (34.00 Ko)

Bonjour,

Un essai ...

Sub cb_Recherche()
Dim Lc As Integer

    UserForm1.ListView1.ListItems.Clear

    If UserForm1.ComboBox1.Text <> "" Then
        For Ligne = LBound(Tableau, 1) To UBound(Tableau, 1)
            If Tableau(Ligne, 1) Like "*" & UserForm1.ComboBox1.Text & "*" Then
                UserForm1.ListView1.ListItems.Add Text:=Tableau(Ligne, 1)
                Lc = UserForm1.ListView1.ListItems.Count    ' compte le nombre de ligne du ListView
                For Colonne = LBound(Tableau, 2) To UBound(Tableau, 2) - 1
                    UserForm1.ListView1.ListItems(Lc).ListSubItems.Add , , Tableau(Ligne, Colonne + 1)
                Next Colonne
            End If
        Next Ligne
    End If
End Sub

ric

Merci, ça marche parfaitement !

Aurais-tu une idée pour étendre le code en multi-critère, avec 2 combobox ?

Par exemple si combobox1 est : Nono et combobox2 est vide, alors ça sort la liste avec le critère1,

si combobox1 et vide et combobox2 est : Bordeaux, alors ça sort la liste avec le critère2,

ou si combobox1 est : Nono et combobox2 est : Bordeaux, alors ça sort la liste avec les 2 critères.

Je ne sais pas trop comment procéder, j'ai essayer un code, mais ça me sort soit la liste avec uniquement le critère1 ou uniquement le critère2

Merci,

5listview.xlsm (34.22 Ko)

Bonjour,

Dans "Userform1" > ajoute ceci > afin qu'un seul des 2 combobox puisse avoir une donnée sélectionnée >>

Private Sub ComboBox1_Change()
    If Me.ComboBox1.ListIndex > -1 Then Me.ComboBox2.ListIndex = -1
End Sub

Private Sub ComboBox2_Change()
    If Me.ComboBox2.ListIndex > -1 Then Me.ComboBox1.ListIndex = -1
End Sub

Puis, remplace cette macro dans le module "AlimenterListeView" >>

Sub cb_Recherche()
Dim Lc As Integer
Dim Vrech As String  ' valeur recherché
Dim iCol As Byte     ' colonne de recherche

    UserForm1.ListView1.ListItems.Clear

    If UserForm1.ComboBox1.Text <> "" Then
        Vrech = UserForm1.ComboBox1.Text
        iCol = 1        ' colonne nom
    ElseIf UserForm1.ComboBox2.Text <> "" Then
        Vrech = UserForm1.ComboBox2.Text
        iCol = 10       ' colonne ville
    End If

        For Ligne = LBound(Tableau, 1) To UBound(Tableau, 1)
            If Tableau(Ligne, iCol) Like Vrech & "*" Then
                UserForm1.ListView1.ListItems.Add Text:=Tableau(Ligne, 1)
                Lc = UserForm1.ListView1.ListItems.Count
                For Colonne = LBound(Tableau, 2) To UBound(Tableau, 2) - 1
                    UserForm1.ListView1.ListItems(Lc).ListSubItems.Add , , Tableau(Ligne, Colonne + 1)
                Next Colonne
            End If
        Next Ligne
End Sub

ric

Bonjour ric,

Merci pour le code, mais ça ne fonctionne pas, en faite j'ai des combobox en cascade, si tel choix sur le combobox1 alors tu auras tel résultat en combobox2,

et avec le code que tu me propose, c'est soit l'un soit l'autre.

J'ai essayé d'enlever le code dans les Combobox_Change mais ça ne fonctionne pas non plus

Bonjour,

Pour des combobox en cascade ... il y a un exemple ici ...

https://forum.excel-pratique.com/viewtopic.php?t=104738

ric

Bonjour ric,

Merci, oui j'ai fais les combobox en cascade, j'ai mis à jour le code ci-dessous,

mais en faite pour la recherche je voudrais que les choix dans les combobox peuvent être faits dans le désordre comme dans un filtre automatique

(sur mon fichier final j'ai 6-7 critères de recherche)

4listview.xlsm (37.25 Ko)

J'ai réussi à faire ce que je voulais avec ce code :

Sub ListviewFiltre()

Dim rNom As String, rDpt As String, rVille As String
Dim Lc As Integer

rNom = UserForm1.ComboBox1.Text
rDpt = UserForm1.ComboBox3.Text
rVille = UserForm1.ComboBox2.Text

UserForm1.ListView1.ListItems.Clear

    For Ligne = LBound(Tableau, 1) To UBound(Tableau, 1)
        If Tableau(Ligne, 1) Like "*" & rNom & "*" And Tableau(Ligne, 8) Like "*" & rDpt & "*" And Tableau(Ligne, 10) Like "*" & rVille & "*" Then
        UserForm1.ListView1.ListItems.Add Text:=Tableau(Ligne, 1)
        Lc = UserForm1.ListView1.ListItems.Count
        For Colonne = LBound(Tableau, 2) + 1 To UBound(Tableau, 2)
            UserForm1.ListView1.ListItems(Lc).ListSubItems.Add Text:=Tableau(Ligne, Colonne)
        Next Colonne
        End If
    Next Ligne

End Sub

J'ensère le ListviewFiltre sur chaque ComboBox_Clique et ça me fais un filtre dynamique, merci

6listview.xlsm (37.55 Ko)

Bonjour,

Bravo

ric

Rechercher des sujets similaires à "vba erreur array"