remplir listbox avec des conditions

supercrapaud

XLDnaute Occasionnel
Bonjour à tous.

Après des recherches infructueuses, je viens vers vous pour avoir des précisions. Je souhaite créer un formulaire qui comprendrait une listbox avec quelques paramètres :
- cette listbox doit contenir 4 colonnes
- cette listbox doit contenir un titre pour chaque colonne
- cette listbox doit contenir des données provenant de 4 colonnes non adjacentes
- Les données ne doivent être inscrites dans la listbox que si 2 conditions sont remplies.

Ma question est simple comment faire ? Dois-je passer par un dictionnaire ou une boucle ou autre ? Voilà un petit fichier exemple pour vous montrer ce que je cherche car là je sèche.

En vous remerciant par avance.
 

Pièces jointes

  • test.zip
    35.5 KB · Affichages: 67
  • test.zip
    35.5 KB · Affichages: 71
  • test.zip
    35.5 KB · Affichages: 74

PMO2

XLDnaute Accro
Re : remplir listbox avec des conditions

Bonjour,

Faites la démarche suivante

1) dans votre UserForm replacez le code par le code suivant

Code:
Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim S As Worksheet
Dim R As Range
Dim var
Dim i&
If Client = "" Then Exit Sub
Set S = Sheets(FEUILLE_SOURCE)
S.Copy After:=Sheets(1)
Set S = ActiveSheet
S.Columns("H:I").Delete
S.Columns("E:F").Delete
S.Columns("A").Delete
S.Columns("C:C").Cut
S.Columns("A:A").Insert Shift:=xlToRight
S.Columns("C:C").Cut
S.Columns("B:B").Insert Shift:=xlToRight
var = S.[a1].CurrentRegion
For i& = UBound(var, 1) To 2 Step -1
  If var(i&, 1) <> Client Or UCase(Trim(var(i&, 5))) <> "N" Then S.Rows(i&).Delete
Next i&
i& = S.[a1].CurrentRegion.Rows.Count
If i& > 1 Then
  Set R = S.Range("a2:d" & i& & "")
  With ListBox1
    .ColumnCount = 4
    .ColumnWidths = "80;80;80;80"
    .ColumnHeads = True
    .RowSource = R.Address
  End With
End If
Application.DisplayAlerts = False
S.Delete
Application.DisplayAlerts = True
Client = ""
End Sub

2) dans un module standard copiez le code suivant

Code:
'### Constante à adapter ###
Public Const FEUILLE_SOURCE As String = "Liste doc émis"
'###########################

Public Client

Sub aff_form()
Dim var
Dim bool As Boolean
Dim i&
Client = InputBox("Entrez le nom du client recherché.")
If Client = "" Then Exit Sub
var = Sheets(FEUILLE_SOURCE).UsedRange
'--- On vérifie si le nom demandé figure dans la feuille ---
For i& = 2 To UBound(var)
  If UCase(Trim(var(i&, 4))) = UCase(Trim(Client)) Then
    bool = True
    Exit For
  End If
Next i&
If Not bool Then
  MsgBox "Le client ''" & Client & "'' est introuvable"
  Exit Sub
End If
UserForm1.Show 0
End Sub

Cordialement.

PMO
Patrick Morange
 

supercrapaud

XLDnaute Occasionnel
Re : remplir listbox avec des conditions

Bonjour et merci d'avoir pris le temps de regarder mon problème.

J'ai bien essayé votre solution sur le fichier (je n'ai pas eu le temps sur mon fichier à moi) mais en fait ce que je voudrait c'est que lorsque l'on choisit un client, une listbox apparaisse et contient la liste de toutes les factures non réglées et pas qu'une seule.

Je pensais à un truc du genre
for each c in range...
if c.value = "a1" then
if c.offset (0,5) then ajout de la facture dans la listbox.

Est-ce possible ou c'est moi qui n'a pas compris votre solution ? En tout cas merci pour votre proposition ^^.
 

PMO2

XLDnaute Accro
Re : remplir listbox avec des conditions

Bonjour,

Ce que j'ai considéré :

A partir de la feuille "Liste doc émis", recherche des factures dont le client en colonne D correspond au client recherché à condition qu'en colonne J on trouve "N" (que j'ai interprété comme "non réglée")

Il est donc normal de ne pas trouver toutes les factures du client recherché, certaines (voire toutes) ayant été réglées.

Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Réponses
8
Affichages
518
Réponses
18
Affichages
1 K

Statistiques des forums

Discussions
315 261
Messages
2 117 859
Membres
113 355
dernier inscrit
aithalibi.yassmine@gmail.