Userform VBA probleme d'affichage de données filtrées par combobox

capc93

XLDnaute Junior
Bonjour,

Je souhaite pouvoir trier mes clients (combo nom client) par region (combo DEC) et à afficher le resultat dans les zones en dessous.(voir fichier joint)
Je pense avoir réussi à coder les combo pour filtrer les resultats mais maintenant mon probleme est que lorsque les clients sont filtrés, l'index ne correspond plus à la ligne du fichier excel et me sort donc un client qui est bien filtré dans la région souhaitée mais avec les informations d'un autre client.

Pourriez vous m'aider à sortir de cette impasse svp?

Je vous remercie par avance.
 

Pièces jointes

  • Base2.xls
    196 KB · Affichages: 71
  • Base2.xls
    196 KB · Affichages: 52
  • Base2.xls
    196 KB · Affichages: 68

Robert

XLDnaute Barbatruc
Repose en paix
Re : Userform VBA probleme d'affichage de données filtrées par combobox

Bonjour Capc et bienvenu(e), bonjour le forum,

Pour éviter ce problème, je stocke le numéro de ligne dans une colonne masquée de la ComboBox.
Le code modifié :
Code:
Private Sub CbDEC_Change()

' Initialisation menu deroulant
'Modifier la Combobox CbCli à deux colonnes dont la seconde et masqueé voir les propriétés [ColumnsCount] = 2 et [ColumnsWidths] = ;0

Dim i As Long
Dim nb_ligne As Integer
Dim nom_DEC As String

nom_DEC = CbDEC.Value
Me.CbCli.Clear
With Sheets("Import")
    'compter nb lignes
    nb_lignes = .Cells(1, 1).End(xlDown).Row
    For i = 2 To nb_lignes
        If .Range("B" & i) = CbDEC.Value Then
        CbCli.AddItem .Cells(i, 1)
        CbCli.Column(1, CbCli.ListCount - 1) = i 'récupère le numéro de ligne
        End If
    Next i
End With
End Sub
Code:
Private Sub CbCli_Change()
'Affichage des information selon client selection dans le combobox
Dim Isociete

With Sheets("Import")
    'compter nb lignes
    nb_lignes = .Cells(1, 1).End(xlDown).Row
    For i = 2 To nb_lignes
        Me.Lsociete.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 5).Value
        Me.LSiren.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 11).Value
        Me.Tactivite = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 4).Value
        Me.Linterlocuteur.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 6).Value
        Me.Lcompte1.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 9)
        Me.Lcompte2.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 10)
        Me.LTel.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 7)
        Me.Ltel2.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 8)
        Me.LDEC.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 2)
        Me.LSogetrade.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 3)
        Me.Lcom.Text = .Cells(Me.CbCli.Column(1, CbCli.ListIndex), 12)
    Next i
End With
End Sub

Remarques :
N'oublie pas de mettre un point (.) quand tu utilises With...
Un Exit For en fin de boucle a à peu près autant d'effet que d'uriner dans une contrebasse...

Le fichier :
 

Pièces jointes

  • Capc_v01.xls
    210 KB · Affichages: 56

Paf

XLDnaute Barbatruc
Re : Userform VBA probleme d'affichage de données filtrées par combobox

bonjour à tous,

j'arrive trop tard, rajouter une colonne non visible était la proposition que j'allais faire !!

J'ai noté par ailleurs dans Private Sub CbCli_Change()
la boucle For i = 2 To nb_lignes ne sert à rien, puisqu'on écrit sur une ligne non indexée à cette boucle. on peut donc la supprimer. sinon on écrit une seule ligne au même endroit autant de fois qu'on a de ligne dans la feuille Import.
et pour alléger l'écriture du code on pourrait écrire mettre Me.CbCli.Column(1, CbCli.ListIndex) dans une variable puis remplacer chaque Me.CbCli.Column(1, CbCli.ListIndex) par cette variable.

Bonne suite
 

capc93

XLDnaute Junior
Re : Userform VBA probleme d'affichage de données filtrées par combobox

Merci beaucoup!!!!

J'aurai jamais trouvé un truc de ce type!

Par contre j'ai un bug quand je decide de changer ma selection de le combo DEC (région) il me dit: Impossible de lire la propriété column. Index de table de propriete non valide. (voir le fichier ci joint). Des idées pour résoudre ce petit bug?
 

Pièces jointes

  • Base3.xls
    201.5 KB · Affichages: 46
Dernière édition:

capc93

XLDnaute Junior
Re : Userform VBA probleme d'affichage de données filtrées par combobox

D'apres ce que je comprends du bug, le code fait que lorsque je veux modifier la valeur de la combo DEC apres avoir consulter les données d'un client une 1ere fois, il met un index à 0 et lorsque qu'on clique sur une autre valeur il la calcule par rapport à sa derniere position ce qui fait tout planter...

Je n'arrive pas à trouver de solution...:confused:
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Userform VBA probleme d'affichage de données filtrées par combobox

Bonsoir Capc, Paf, bonsoir le forum,

En pièce jointe la version 2 qui prend en compte les remarques judicieuses de Paf et devrait résoudre tes problèmes...

Remarques :
Show = charge et affiche
Unload = décharge et ferme
il est donc inutile de faire :
Load Userform1 suivi de Userform1.Show car Userform1.Show suffit
Userform1.Hide suivi de Unload UserForm1 car Unload Me suffit

• Encore une fois, si tu utilises With, pense à mettre un point (.) devant l'élément correspondant...

Le fichier :
 

Pièces jointes

  • Capc_v02.xls
    223 KB · Affichages: 43

capc93

XLDnaute Junior
Re : Userform VBA probleme d'affichage de données filtrées par combobox

Un grand merci à vous d'avoir passé un peu de temps sur mon fichier ça fonctionne nickel!

Et merci également pour les nuances show / load et unload /hide je ne savais pas!
 

Discussions similaires

Statistiques des forums

Discussions
312 112
Messages
2 085 417
Membres
102 885
dernier inscrit
AISSOU