[Résolu]Listbox doublons avec plusieurs critère

fouzyyy

XLDnaute Nouveau
Bonjour

j'ai une base de donnés remplis a l'aide d'un userform (multipage). page concernat le véhicule et une page concerne la consommation carburant...voila tout ce pass bien sauf pour la partie ou je fais une recharche par date . selon 3 critére

1/critère= doublon + addition de leur valeur
2/critère= doublon + affiche grand valeur (kilométrage)
3/ critère = doublon + affiche petit valeur (kilométrage)

- la recherche par date c'est ok tout vas bien
- les doublons sont traiter et leur somme sont aditionne ...un peti hic adition de doublon avec le reste de véhicule non double ne passe pas bien .
- la partie ou je dois géré les doublon avec les valeur minimum et maximum de kilométrage Je sèche.


voila ce je veux si que ma liste box sera alimenter a a partir de la base des donnés avec :
les infos des véhicules sans doublon avec leur valeur ( addition de nombre des bons, kilométrage min, kilométrage max)
Ainsi je vais pouvoir remplir la feuil (model conso) sans doublons ...

je joins mon fichier pour bien comprendre mon cas
et merci infiniment
 

Pièces jointes

  • TEST.xlsm
    164.4 KB · Affichages: 52

fouzyyy

XLDnaute Nouveau
bonjour vgendron

je fais la recherche via la page nomme etat Carburant ce que je cherche, si quand je click sur le boutton GO la list box sera alimenter avec les donne trouver sur la base de donné " feuil consommation" sans doublons et somme ainsi le kilometrage min et max de doublons...

j 'ai trouver un code pour eliminer les doublons et aditionner leur valeur mais je bloque sur 2 problem :

01- la liste box m'affiche seulement 3 clonne or si je recherche sans eliminer les doublon la listbox affiche tout les colonne
02- les valeur minimum et maximumu des doublon j'ai rien trouver comme code vba pour l'essaier

si tu veux je upload le fichier avec le code de que j'ai pu avec eliminer les doublons et additionner leur valeur

voila j'esper que je me suis bien explique mon cas et merci...
 

ChTi160

XLDnaute Barbatruc
Bonjour Fouzyyy
Bonjour le Fil (vgendron) ,le Forum
je regarde ce fil et j'ai quelques questions.

Fouzyyy peux tu nous dire pourquoi il y a des Données qui sont en N/c par exemple , que doit on en faire lors du traitement des Données
Pourquoi en colonne Km Mensuel , il y a N/c , alors que le Km Depart et Km Arrivée sont connus ?
Pourquoi en colonne Energy , y a t'il des véhicules qui ne sont pas renseignés ?
Pourquoi dans les Colonnes Km y a t'il parfois 1000 Km et d'autres Non 1000 ?
Bonne journée
Amicalement
jean marie
 

fouzyyy

XLDnaute Nouveau
Bonjour Fouzyyy
Bonjour le Fil (vgendron) ,le Forum
je regarde ce fil et j'ai quelques questions.

Fouzyyy peux tu nous dire pourquoi il y a des Données qui sont en N/c par exemple , que doit on en faire lors du traitement des Données
Pourquoi en colonne Km Mensuel , il y a N/c , alors que le Km Depart et Km Arrivée sont connus ?
Pourquoi en colonne Energy , y a t'il des véhicules qui ne sont pas renseignés ?
Pourquoi dans les Colonnes Km y a t'il parfois 1000 Km et d'autres Non 1000 ?
Bonne journée
Amicalement
jean marie
Bonjour jean marie
n/c = kiilometrage non comuniquer
en cas ou km Depart ou km arriver est en N/c dans ce cas la la k/m mensuel seras N/c et Moyen bon 0
si le km depart = une valeur et km arriver est n/c le km mensuel sera n/c et moyen bon sera 0 et vise versa.

Pourquoi en colonne [B à dit:
Energy , [/B]y a t'il des véhicules qui ne sont pas renseignés ?

ben il y a des véhicule que j'ai saisie leur nature de carburant ' d'autre non.. car ici je teste seulement pour cette case tout vas bien.

Pourquoi en colonne [B à dit:
Km Mensuel[/B] , il y a N/c , alors que le Km Depart et Km Arrivée sont connus ?
là je suis entraîne de remédier ce blem quand je rantre les donne au départ n/c les résultat seront comme il faut mais que je modifier ces donner par des valeur les modification s’enregistre bien mais dans les colonne moyen km mensuelle et moyen bon les donne resteront sans mise jour..

Pourquoi dans les Colonnes [B à dit:
Km[/B] y a t'il parfois 1000 Km et d'autres Non 1000 ?
km mensuelle si égale a KMARRIVER -KMDEPART ....la moyen si cette résultat elle sera utiliser pour connaitre la moyenne de km par bon de carburant ( km mensuelle diviser par nombre de bon..

le filtrage sera fait par rapport Immatriculation des véhicules comme ca en filtre les doublons
merci
 
Dernière édition:

fouzyyy

XLDnaute Nouveau
re bonjour
je crois que des exemples si mieux pour comprendre ce que voulais vous dire :

Véhicule .............km D ........... km A...............Km mensulle ......... Nbrbon ...........moyen bon

A .................. 1500 ........... N/c .....................N/c .........................2......................... 0
A .................. n/C .............n/c .................... n/c ..................... 3..........................0
B .................... 2500..............4500 ................... 1000 ......................2 ......................500
B.................... 4550 ................5700 ....................1150 ..................... 4 ....................287.5


Le resultat de filtrage qui sera affiche dans la listebox sera comme ceci :

Véhicule..............km D..............km A ........Km mensulle .....Nbrbon .........moyen bon

A .................. 1500 .............N/c ................N/c.................5......................0

B.................. 2500..................5700.............3200................6.................. 500

j 'espers que comme ca j'ai bien expliquer mon besoin..

par contre la base des donne sera sans changement ' c'est a dire je supprime pas les doublon de la base des donnée

amicalement
 
Dernière édition:

fouzyyy

XLDnaute Nouveau
Bonsoir

j'ai travailler sur le projet et voila ce que j'ai pu faire

fichier joint :::
Reste a Faire.....

- Retenir la valeur minimum et maximum (kilométrage) des doublons
- Affichage dans listbox de tous les élément or j'ai pu affiche que les clone suivant type , immatriculation , nbr bon)..
= Recherche par date un peu problème pourtant avant tout marche bien quand je choisi par exemple de chercher entre 01-03-2018 et 31-003-2018 la listbox m'affiche tout LES donne pourtan il y qu'une seul donne avec la date de 20-03-2018 ,,, je sais pas pourquoi

voic le fichier joint pour bien comprendre...


bonjour à tous
mis un mot dans fichier
en plus tu as un code dans module1 à tester et à arranger
j 'ai essayer mais ca pas marcher les doublon ne sont pas eliminer leur valeur n'est pas additionner ...je sais pas j'ai beau essayer avec votre fichier mais helas rien n'as marcher.... je vous Remercier bebere.... avec mon dernier fichier uploader peut être vous comprendriez ce que je veux....
 

Pièces jointes

  • TEST........ 2 essai.xlsm
    165.6 KB · Affichages: 36

Bebere

XLDnaute Barbatruc
bonjour
Fouzy commence par corriger le fichier en comparant avec celui que j'ai mis
Je regarde de mon côté pour compléter
Jean Marie tu as rejoint le club des personnes(pensionnées) qui n'ont pas le temps
Ceçi d'après plusieurs réflexions entendues
BIENVENUE
 

fouzyyy

XLDnaute Nouveau
bonjour
Fouzy commence par corriger le fichier en comparant avec celui que j'ai mis
Je regarde de mon côté pour compléter
Jean Marie tu as rejoint le club des personnes(pensionnées) qui n'ont pas le temps
Ceçi d'après plusieurs réflexions entendues
BIENVENUE
OK bebere je vais essayer ..
Bonjour fouzyyy
Bonjour Bebere
Pas Evident pour moi lol , je laisse la main a mon ami Bebere !
Bonne continuation
Amicalement
jean marie
Merci infiniment chti ..
 

vgendron

XLDnaute Barbatruc
Hello

Dans cette macro.. je ne comprend pas la finalité..
VB:
Private Sub GO4_Click()
Dim Debut As String, Fin As String
Dim S As Double, Total As Double
Dim Nblg As Long, lig As Long, L As Long
Dim Cel As Range, Plage As Range
Dim Dico, Tablo, P, m
Dim e, j As Integer
Dim Nombre As Double

TotalBonMois = ""

ConsoMois.Clear
ConsoMois.ColumnCount = 9
Debut = Me.Date4Deb4
if Not IsDate(Debut) Then
    MsgBox "Veuillez Choisir Une Date"
    Exit Sub
End If

Fin = Me.Date4Fin
If Not IsDate(Fin) Then
    MsgBox "Veuillez Choisir Une Date"
    Exit Sub
End If

Application.ScreenUpdating = False
With fc
    Nblg = .Range("B" & .Rows.Count).End(xlUp).Row
    .Range("A1:A" & Nblg).AutoFilter field:=1, Criteria1:=">=" & CSng(CDate(Debut)), Operator:=xlAnd, Criteria2:="<=" & CSng(CDate(Fin))
    On Error Resume Next
    Set Plage = .Range("B6:B" & Nblg).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    .Range("B6:B" & Nblg).AutoFilter

    If Not Plage Is Nothing Then
        Set Dico = CreateObject("Scripting.dictionary")
        Tablo = .Range("B6:H" & Nblg).Resize(, 9).Value
        For m = 1 To UBound(Tablo, 1)
            If Tablo(m, 1) <> "" Then
                If Not Dico.Exists(Tablo(m, 2)) Then Dico.Add Tablo(m, 2), Tablo(m, 1)
            End If
        Next m
        m = Dico.keys
        P = Dico.items
        For lig = LBound(m) To UBound(m)
            Me.ConsoMois.AddItem
            Me.ConsoMois.List(lig, 0) = P(lig)
            Me.ConsoMois.List(lig, 1) = m(lig)

            For L = 1 To UBound(Tablo, 1)
                If Tablo(L, 2) = m(lig) Then
                    Total = Total + Tablo(L, 7)
                End If
            Next L
            ConsoMois.List(lig, 6) = Total
            Total = 0
        Next lig

        j = ConsoMois.ListCount - 1
        For e = 0 To j
            Nombre = CDbl(ConsoMois.List(e, 6))
            S = CDbl(S) + CDbl(Nombre)
        Next
        TotalBonMois = S

    End If
End With
End Sub

Tu set une plage suite à un filtre;. mais après. tu n'en fais strictement rien...??
la ligne Tablo = .Range("B6:H" & Nblg).Resize(, 9).Value me semble un peu farfelue niveau syntaxe... B6:H, c'est déjà 7 colonnes.. que tu étends à 9 ?
 

vgendron

XLDnaute Barbatruc
Peut etre avec ceci..?
VB:
Private Sub GO4_Click()
Dim Debut As String, Fin As String
Dim S As Double, Total As Double
Dim Nblg As Long, lig As Long, L As Long
Dim Cel As Range, Plage As Range
Dim Dico, Tablo, P, m
Dim e, j As Integer
Dim Nombre As Double

TotalBonMois = ""

ConsoMois.Clear
ConsoMois.ColumnCount = 9

Debut = Me.Date4Deb4
If Not IsDate(Debut) Then
    MsgBox "Veuillez Choisir Une Date"
    Exit Sub
End If

Fin = Me.Date4Fin
If Not IsDate(Fin) Then
    MsgBox "Veuillez Choisir Une Date"
    Exit Sub
End If

Application.ScreenUpdating = False
With fc
    .Cells.AutoFilter
    Nblg = .Range("B" & .Rows.Count).End(xlUp).Row
       
    .Range("A1:A" & Nblg).AutoFilter field:=1, Criteria1:=">=" & CSng(CDate(Debut)), Operator:=xlAnd, Criteria2:="<=" & CSng(CDate(Fin))
    On Error Resume Next
    Set Plage = .Range("A6:K" & Nblg).SpecialCells(xlCellTypeVisible)
    Tablo = Plage.Value
    On Error GoTo 0

    If Not Plage Is Nothing Then
        Set Dico = CreateObject("Scripting.dictionary") 'dico des immat sans doublon
        For m = LBound(Tablo, 1) To UBound(Tablo, 1)
            If Tablo(m, 1) >= CDate(Debut) And Tablo(m, 1) <= CDate(Fin) And Tablo(m, 2) <> "" Then
                If Not Dico.Exists(Tablo(m, 3)) Then Dico.Add Tablo(m, 3), Tablo(m, 2)
            End If
        Next m
       
        m = Dico.keys       'liste des immat sans doublon
        P = Dico.items      'type associé à l'immat
        For lig = LBound(m) To UBound(m)
            Me.ConsoMois.AddItem
            Me.ConsoMois.List(lig, 0) = P(lig)
            Me.ConsoMois.List(lig, 1) = m(lig)
   
            For L = LBound(Tablo, 1) To UBound(Tablo, 1)
                If Tablo(L, 3) = m(lig) Then
                    Total = Total + Tablo(L, 8)
                End If
            Next L
            ConsoMois.List(lig, 6) = Total
            Total = 0
        Next lig
   
       
        j = ConsoMois.ListCount - 1
        For e = 0 To j
            Nombre = CDbl(ConsoMois.List(e, 6))
            S = CDbl(S) + CDbl(Nombre)
        Next
        TotalBonMois = S
    End If
End With
Application.ScreenUpdating = True
End Sub
 

fouzyyy

XLDnaute Nouveau
Peut etre avec ceci..?
bonjour le Forum..
Bonjour Vgendron.

j'essayer ton code Vraiment tu me sauve la...car j'ai passer une nuit blanche avec mon application car j’étais concentre sur le problème des doublon et le la recherche entre 2 dates et la tu me sauve avec ton code ,, J e vous remercier infiniment ..

ce soir je vais essayer de terminer ton code pour afficher les autre élément dans la liste box parce que jusqua mtn la listebox m'affiche seulemnt :

type véhicule, immatriculation et le nombre des bons

ainsi je vais me concentre sur le problème de retenir la valeur kilométrage maximum et kilométrage minimum des doublons

"Tu set une plage suite à un filtre;. mais après. tu n'en fais strictement rien...??
la ligne Tablo = .Range("B6:H" & Nblg).Resize(, 9).Value me semble un peu farfelue niveau syntaxe... B6:H, c'est déjà 7 colonnes.. que tu étends à 9 ?
oui j'avoue que je suis pas un pro de vba mais j'essaye de comprendre ..

je vous remercier bcp ainsi que les autre membres qui essaye de m'aider...
 

Discussions similaires

Réponses
3
Affichages
457
Réponses
7
Affichages
485

Statistiques des forums

Discussions
311 724
Messages
2 081 938
Membres
101 844
dernier inscrit
pktla