Afficher une plage de cellules variables dans une List Box
tiketie
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
tiketie Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
tiketie Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Débutant en VBA, j'ai pour projet de stage de créer un formulaire "Fiche Client" avec infos du client/Infos sur les commandes du client.
Dans la deuxième partie de mon UserForm (Celle sur les commandes), j'ai voulu mettre un ListBox pour faciliter la lecture des commandes.
J'ai deux feuilles de tableur une pour chacune des parties de mon Userform. La seule colonne en commun est l'ID du client (afin de pouvoir afficher toutes les commandes pour un seul client).
Seulement, j'aimerai qu'à la sélection d'un client (dans une ComboBox), le formulaire compare les deux colonnes "ID client" des deux feuilles, et à chaque fois qu'il trouve une correspondance, il affiche la ligne dans la listBox, ainsi nous y verrons uniquement les commandes du client sélectionné :
Une macro me groupe les ID clients dans la feuille 2, j'ai bidouillé le code suivant :
With Ws2 'la deuxième feuille du tableur avec les commandes
For k = 1 To .Cells(Rows.Count, 1).End(xlUp).Row 'Pour toutes les lignes de Ws2
DerL = Ws.Cells(Rows.Count, 1).End(xlUp)(2).Row 'Dernière ligne de la feuille 1
'On essaye de trouver les mêmes valeurs dans les deux colonnes ID Client
If Not IsError(Application.Match(.Cells(k, 1), Ws.Columns(14), 0)) Then
For l = 1 To DerL 'Pour toutes les lignes jusqu'à la dernière
If Cells(l, 1) = .Cells(k, 14) Then 'Si il y a correspondance...
'On affiche la ligne dans la listBox
With Ws2.Columns("B:G").Rows(k)
ListBox1.RowSource = Range(.Cells, .End(xlDown)(1, 1)).Address(External:=True)
End With
End If
Next
End If
Next
End With
Débutant en VBA, j'ai pour projet de stage de créer un formulaire "Fiche Client" avec infos du client/Infos sur les commandes du client.
Dans la deuxième partie de mon UserForm (Celle sur les commandes), j'ai voulu mettre un ListBox pour faciliter la lecture des commandes.
J'ai deux feuilles de tableur une pour chacune des parties de mon Userform. La seule colonne en commun est l'ID du client (afin de pouvoir afficher toutes les commandes pour un seul client).
Seulement, j'aimerai qu'à la sélection d'un client (dans une ComboBox), le formulaire compare les deux colonnes "ID client" des deux feuilles, et à chaque fois qu'il trouve une correspondance, il affiche la ligne dans la listBox, ainsi nous y verrons uniquement les commandes du client sélectionné :
Une macro me groupe les ID clients dans la feuille 2, j'ai bidouillé le code suivant :
With Ws2 'la deuxième feuille du tableur avec les commandes
For k = 1 To .Cells(Rows.Count, 1).End(xlUp).Row 'Pour toutes les lignes de Ws2
DerL = Ws.Cells(Rows.Count, 1).End(xlUp)(2).Row 'Dernière ligne de la feuille 1
'On essaye de trouver les mêmes valeurs dans les deux colonnes ID Client
If Not IsError(Application.Match(.Cells(k, 1), Ws.Columns(14), 0)) Then
For l = 1 To DerL 'Pour toutes les lignes jusqu'à la dernière
If Cells(l, 1) = .Cells(k, 14) Then 'Si il y a correspondance...
'On affiche la ligne dans la listBox
With Ws2.Columns("B:G").Rows(k)
ListBox1.RowSource = Range(.Cells, .End(xlDown)(1, 1)).Address(External:=True)
End With
End If
Next
End If
Next
End With
A voir également:
- Afficher une plage de cellules variables dans une List Box
- Set-top box - Accueil - Box & Connexion Internet
- Créer une liste déroulante excel - Guide
- List disk - Guide
- Aller à la ligne dans une cellule excel - Guide
- Afficher cellules masquées excel - Forum Excel
Tout d'abord merci de votre réponse !
Et je m'excuse également de la mienne si tardive !
J'ai résolu le problème :
1)A l'aide d'une macro, j'effectue un tri sur la feuille, cela me permet de regrouper toutes les lignes apparentées à un même client (même ID)
2) Je parcours (à l'aide de mon code) toutes les cellules des deux colonnes à l'aide d'une variable k.
3) Dès qu'il y a correspondance entre les deux idées (même ID), je stock la valeur de la variable k à ce moment dans un tableau de k.
Tant que cette correspondance est vérifiée, je continue de stocker les k dans le tableau.
4) Je stock une dernière valeur de k quand on arrive à la dernière correspondance.
5) Je récupère enfin dans le tableau la première et la dernière valeur de k, et j'obtiens ainsi ma plage !
C'est simple mais il suffisait d'y penser ;)