Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Filtre liste avec plusieurs conditions

39 réponses
Avatar
DAVID
Bonsoir

Je m'en sort pas avec mon projet avec le peu de connaissance en V.B.

J'aimerais filtrer une liste d'une feuille grâce à 2 TextBox et 5 Combos et
visualiser dans un ListBox sans obligation de remplir tous les éléments

Ci joint la partie de mon programme qui me pose problème
http://cjoint.com/?bAxETQeOP5


Merci de votre aide car cela fait plusieurs jours que je cherche.
Si possible avec explications des lignes de code

Cordialement

David

10 réponses

1 2 3 4
Avatar
Daniel.C
En fait tu te servais du listindex du listbox comme numéro de ligne à
supprimer, ce quui induisait une erreur quand les données étaient
filtrées.
Pour trouver le numéro de ligne à supprimer, j'ai fait une recherche
sur l'immatriculation et le kilométrage :

Set c = Feuil2.Range("A65000").End(xlUp)
'Dernière ligne de la base de données
Ligne = c.Row
With LstResultat
Immat = .List(.ListIndex, 1)
Km = .List(.ListIndex, 4)
End With
Feuil2.Select
'Calcul de la ligne à supprimer / Modifier
l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E"
& Ligne & "=" & Km & _
")*row(2:" & Ligne & "))")

J'ai testé les suppressions, pas les modifications. Je t'en laisse le
soin.
Daniel

Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir
sans.
Daniel

Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne
ayant une largeur 0 ce qui fait qu'on ne la voit pas.
Daniel

En complément et après grande réflexion !!

En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro
de ligne et seulement sur celle ci de la colonne A à J puisque quand on
filtre, le numéro de ligne ne change pas.

Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de
"repérer" la ligne correspondante

Enfin c'est qu'une idée de débutant ....






Avatar
Daniel.C
Oups, le classeur est là :
http://cjoint.com/?bDndQ8HDhD
Daniel

Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir
sans.
Daniel

Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne
ayant une largeur 0 ce qui fait qu'on ne la voit pas.
Daniel

En complément et après grande réflexion !!

En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro
de ligne et seulement sur celle ci de la colonne A à J puisque quand on
filtre, le numéro de ligne ne change pas.

Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de
"repérer" la ligne correspondante

Enfin c'est qu'une idée de débutant ....






Avatar
DAVID
Bonsoir Daniel

Désolé de t'avoir lâché aujourd'hui....

En ce qui concerne la finalité, bin je dirais EXTRA GENIAL !!!

Ça fait 45 mns que je fais des essais afin de trouver une faille au system
mais que néni !!!

Un GRAND MERCI de ta patiente, ton aide.....

Sincères salutations

David
Avatar
DAVID
Re

J'ai enfin trouvé un beug !!!!

Le filtre ne fonctionne pas avec l'immatriculation

C'est à dire, si je filtre juste en sélectionnant une immatriculation, cela
ne fonctionne pas.

Désolé pour toi de remettre ça !!

Merci de ton aide

Cordialement

David
Avatar
DAVID
Désolé de ma faute..

Il y avait une erreur dans :

Private Sub FiltreCombos()
If Me.Combo5.Value <> "" Then
Plage.AutoFilter Field:, Criteria1:=Combo5 'Immatriculation
End If
End Sub

à la place

Private Sub FiltreCombos()
If Me.Combo5.Value <> "" Then
Plage.AutoFilter Field:=2, Criteria1:=Combo5 'Immatriculation
End If
End Sub
Avatar
DT
Bonjour/Bonsoir Daniel

Désoler de revenir sur ce fil

Ci-joint la dernière version de mon projet
http://www.cijoint.fr/cjlink.php?file=cj201001/cijD4UIqGb.xls

Il y a un petit souci.

J'explique en disant la manip.

Ouverture UserForm
Dans le combo Alias, sélectionne "V1"

Nous pouvons voir au dernier enregistrement qu'il manque des informations ce
qui est normal puisqu'on les connaisser pas au moment de la saisie.

Double-Clic dans cette enregistrement et remplissage des TextBox vides.

Clic sur modifier et la "Incompatibilité de type"

sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans
CmbModifier_Click

Merci à nouveau de ton aide

Cordialement David
Avatar
DT
Désolé, je pense avoir trouvé

Je vais changer la recherche par une valeur plus sûre

'Trouver le numéro de ligne à partir de l'immatriculation et du kilométrage
Set c = Feuil2.Range("A65000").End(xlUp)
'Dernière ligne de la base de données
Ligne = c.Row
With LstResultat
Immat = .List(.ListIndex, 1)
Km = .List(.ListIndex, 4)
End With
Avatar
michdenis
| Clic sur modifier et la "Incompatibilité de type"

| sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans

Je n'ai pas ouvert ton classeur, mais il y a de grosses chances que
ton textbox "TxtDate.value" ne doit pas contenir un format "Date"
reconnu par Excel. Ce que tu dois savoir, la fonction de conversion Cdate()
utilise le format court "Date" défini dans le panneau de configuration
de Windows pour effectuer la conversion d'un string en date.
Avatar
DT
Pas spécialiste, mais je pense pas que cela vienne d'un problème de format
de date.

La solution de Daniel C fonctionne très bien sauf qu'il prend 2 conditions
pour rechercher le numéro de ligne; l'immatriculation et le kilométrage.
Le problème c'est que le kilométrage, nous l'avons pas toujours.

Après essai en remplaçant le "Km" avec une condition comme le "type" ou
"Alias" j'ai compris qu'il fallait une valeur qui change. Donc la je coince.
Avatar
Daniel.C
Bonjour.

Est-ce qu'il peut y avoir deux lignes avec le kilométrage non renseigné
pour le même véhicule ?
J'ai mmodifié le code comme suit :

Private Sub CmbModifier_Click()

If TxtDate.Value = "" Then
MsgBox "Date OBLIGATOIRE pour continuer"
Me.TxtDate.SetFocus
Cancel = True
Calendrier_Form.Show
Else

If Not IsDate(Me.TxtDate.Text) Then
MsgBox "Format date incompatible. Utiliser le Calendrier"
Me.TxtDate.SetFocus
Cancel = True
Calendrier_Form.Show
Else

'Boite Confirmation
Dim réponse
réponse = MsgBox(" Etes vous sur de vouloir MODIFIER cette fiche ? ",
vbYesNo + vbQuestion, "Validation")
If réponse = vbNo Then Exit Sub
'Trouver le numéro de ligne à partir de l'immatriculation et du
kilométrage
Set c = Feuil2.Range("A65000").End(xlUp)
'Dernière ligne de la base de données
Ligne = c.Row
With LstResultat
Immat = .List(.ListIndex, 1)
Km = .List(.ListIndex, 4)
If Km = "" Then Km = 0
End With
Feuil2.Select
'Calcul de la ligne à supprimer / Modifier
l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E"
& Ligne & "=" & Km & _
")*row(2:" & Ligne & "))")


'la 1ère ligne de la BD est 2 qui correspond à LisIndex=0 donc, décaler
d'autant pour retrouver la ligne
With Feuil2
Var = CDate(TxtDate.Value)
.Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne
.Cells(l, 2) = TxtImmat.Value
.Cells(l, 3) = TxtAlias.Value
.Cells(l, 4) = TxtType.Value
.Cells(l, 10) = CmbPaiement.Value
End With

If TxtKms <> "" Then
With Feuil2.Cells(l, 5)
.NumberFormat = "0" 'Si tu as besoin d'appliquer un format
particulier à cette cellule
.Value = CDbl(Me.TxtKms)
End With
Else
Feuil2.Cells(l, 5) = TxtKms.Value
End If


If TxtMontant <> "" Then
With Feuil2.Cells(l, 6)
.NumberFormat = "0.000 ¤"
.Value = CDbl(Me.TxtMontant)
End With
Else
Feuil2.Cells(l, 6) = TxtMontant.Value
End If

If TxtLitre <> "" Then
With Sheets("HISTOCARBU").Cells(l, 7)
.NumberFormat = "0.000"
.Value = CDbl(Me.TxtLitre)
End With
Else
Feuil2.Cells(l, 7) = TxtLitre.Value
End If

If TxtPrixLitre <> "" Then
With Feuil2.Cells(l, 8)
.NumberFormat = "0.000 ¤"
.Value = CDbl(Me.TxtPrixLitre)
End With
Else
Feuil2.Cells(l, 8) = TxtPrixLitre.Value
End If

If TxtCarteInter <> "" Then
With Feuil2.Cells(l, 9)
.NumberFormat = "0"
.Value = CDbl(Me.TxtCarteInter)
End With
Else
Feuil2.Cells(l, 9) = TxtCarteInter.Value
End If

'recalculer la liste
UserForm_Initialize

End If
End If
End Sub

J'ai ajouté la ligne :
If Km = "" Then Km = 0

Au cas où il peut y avoir deux lignes sélectionnées (même
immatriculation, deux lilométrage non renseigné) il faudrait ajouté un
critère de sélection supplémentaire (la date ?)
Daniel

Bonjour/Bonsoir Daniel

Désoler de revenir sur ce fil

Ci-joint la dernière version de mon projet
http://www.cijoint.fr/cjlink.php?file=cj201001/cijD4UIqGb.xls

Il y a un petit souci.

J'explique en disant la manip.

Ouverture UserForm
Dans le combo Alias, sélectionne "V1"

Nous pouvons voir au dernier enregistrement qu'il manque des informations ce
qui est normal puisqu'on les connaisser pas au moment de la saisie.

Double-Clic dans cette enregistrement et remplissage des TextBox vides.

Clic sur modifier et la "Incompatibilité de type"

sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans
CmbModifier_Click

Merci à nouveau de ton aide

Cordialement David


1 2 3 4