Recherche VBA: condition + tri

plouf

XLDnaute Nouveau
Bonsoir à tous,

Je vous sollicite car j'aimerai effectuer une recherche dans une base de données (excel).

Mon fichier est composé de deux feuilles:
-une feuille "Base de données" pour la base de données, avec les champs en première ligne pour chaque colonne.
-une feuille "Recherche" pour effectuer la lecture de la base de données.


Le contexte:
je souhaite faire un historique des livraisons, la base de données représente ces livraisons (date, heure, chauffeur, véhicule, etc..)

Le besoin:
J'aimerai que ma feuille "Recherche" me permette de lire les données en fonction de la date choisie.

  • C'est à dire, qu'après lancement de la macro, le tableau "D4:K28" se remplisse des données correspondante la date "B2" stockées dans la "Base de données" colonne A.
  • Cependant, il faudrait que l'ordre de remplissage des données dans le tableau de recherche soit définie par "l'ordre croissant" des valeurs de la colonne G (dans la "Base de données")

Cela me permettrai d'avoir une liste chaque jour de l'activité des chauffeurs. Une liste croissante: avec les livraisons qui commence le plus tôt jusqu'aux plus tardives.

Je vous remercie d'avances pour vos suggestions et votre aide!

A bientôt

plouf
 

Pièces jointes

  • livraison.xls
    32 KB · Affichages: 85
  • livraison.xls
    32 KB · Affichages: 84
  • livraison.xls
    32 KB · Affichages: 78
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Recherche VBA: condition + tri

Bonjour Plouf le forum
ton fichier en retour avec ce que tu souhaites je pense tu me rediras, tu cliques sur recherche et après tu changes de date et tu recliques
a+
papou:)
 

Pièces jointes

  • livraison Plouf V1.xls
    44 KB · Affichages: 107

plouf

XLDnaute Nouveau
Re : Recherche VBA: condition + tri

Bonsoir Paritec !

Merci pour ta réponse !
Ca marche super pour l'importation qui rapporte bien toutes les valeurs attendues.

Cependant, au niveau du trie par Heure (du plus petit au plus grand) je pense qu'il y a une erreur car elles ne sont pas classées dans l'ordre croissant.

Sinon tout le reste c'est génial !

merci

plouf


Ps: Après quelques tests, j'ai remarqué que ca classé par "Véhicule"
 

Paritec

XLDnaute Barbatruc
Re : Recherche VBA: condition + tri

Bonjour Plouf,
bah c'est sur que si tu ne sais pas lire c'est plus difficile !!!!!
Tu as ta liste classée par véhicule ensuite, par chauffeur, et là par horaire de livraison si ton chauffeur à 20 livraisons tu auras son programme classé par ordre puis le chauffeur suivant pareil
Maintenant si tu veux qu' un classement horaire, je ne vois pas l'intérêt mais je peux te le faire !!!!
redis moi
a+
papou:)
 

Paritec

XLDnaute Barbatruc
Re : Recherche VBA: condition + tri

Re Plouf le forum
le but c'est bien de savoir ce qu'a fait ton chauffeur dans sa tournée? et l'ordre de sa tournée, voilà pourquoi j'ai classé de la sorte ( N'oublie pas de lire le post 4 STP)
enfin redis moi
a+
papou:)
 

plouf

XLDnaute Nouveau
Re : Recherche VBA: condition + tri

Re Paritec, le forum,

haha, j'trouvais ca trop pratique pour être fait naturellement pas le VBA :D
en tout cas joli travail ! encore mieux que ce que souhaitais

Donc je vais rester comme ca pour le moment, par contre, j'aimerai vraiment comprendre dans le cas ou je souhaite ajouter des tris, ou en enlever.

Pourrais-tu me montrer les zones correspondantes à ces tris stp?
Code:
Sub classer()
    Dim i&, fin&, aa As Variant, bb As Variant, y&, a&
    fin = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
    aa = Feuil1.Range("A2:J" & fin)
    y = 1
    For i = 1 To UBound(aa)
        If CDate(aa(i, 1)) = CDate(Feuil2.Range("B2")) Then aa(i, 10) = "oui": y = y + 1
    Next i
    If y = 1 Then Exit Sub
    ReDim bb(y - 1, 8)
    y = 1
    For i = 1 To UBound(aa)
        If aa(i, 10) = "oui" Then
            For a = 1 To UBound(bb, 2)
                bb(y, a) = aa(i, a + 1)
            Next a
          y = y + 1
        End If
    Next i
    Feuil2.Range("D5:K2000").ClearContents
    Feuil2.Range("D5").Resize(UBound(bb), UBound(bb, 2)) = bb
    fin = Feuil2.Range("D" & Rows.Count).End(xlUp).Row
    Feuil2.Range("D5:K" & fin).Sort Key1:=Feuil2.Range("E5") _
   , Order1:=xlAscending, Key2:=Feuil2.Range("F5"), Order2:=xlAscending, Key3:=Feuil2.Range("I5") _
   , order3:=xlAscending, Header:=xlNo
End Sub

merci d'avance

plouf
 

Paritec

XLDnaute Barbatruc
Re : Recherche VBA: condition + tri

Re Plouf le forum
c'est là
Code:
Feuil2.Range("D5:K" & fin).Sort Key1:=Feuil2.Range("E5") _
   , Order1:=xlAscending, Key2:=Feuil2.Range("F5"), Order2:=xlAscending, Key3:=Feuil2.Range("I5") _
   , order3:=xlAscending, Header:=xlNo
le reste c'est le tri par rapport à tes dates, et la récupération des lignes concernées
a+
papou:)
 

plouf

XLDnaute Nouveau
Re : [Résolu] Recherche VBA: condition + tri

Bonsoir le forum,

J'ai repris le code (j'y ai fait de légères modifications):
Code:
Sub classer()
    Dim i&, fin&, vaa As Variant, vbb As Variant, y&, a&
    'délimitation de la base de données
    fin = Sheets("bd activité").Range("A" & Rows.Count).End(xlUp).Row
    vaa = Sheets("bd activité").Range("A2:J" & fin)
    y = 1
    'on recherche les valeurs correspondant à la date
    For i = 1 To UBound(vaa)
        If CDate(vaa(i, 1)) = CDate(Sheets("lecture activité").Range("B1")) Then vaa(i, 10) = "oui": y = y + 1
    Next i
    If y = 1 Then Exit Sub
    
    ReDim vbb(y - 1, 8)
    y = 1
    For i = 1 To UBound(vaa)
        If vaa(i, 10) = "oui" Then
            For a = 1 To UBound(vbb, 2)
               vbb(y, a) = vaa(i, a + 1)
            Next a
          y = y + 1
        End If
    Next i
    
    
    Sheets("lecture activité").Range("A5:h2000").ClearContents
    Sheets("lecture activité").Range("a5").Resize(UBound(vbb), UBound(vbb, 2)) = vbb
    fin = Sheets("lecture activité").Range("D" & Rows.Count).End(xlUp).Row
    
    'tri
    Sheets("lecture activité").Range("a5:h" & fin).Sort Key1:=Sheets("lecture activité").Range("f5") _
   , Order1:=xlAscending, Key2:=Sheets("lecture activité").Range("b5"), Order2:=xlAscending
End Sub



Ca serait bien que je puisse définir plus manuellement la position de colonne de lecture et la position de la colonne d'écriture.
ex: la colonne B de la base de données s'écrira dans la colonne D de la feuille de lecture..

Sauriez-vous comment faire?

merci d'avance

plouf
 
Dernière édition:

plouf

XLDnaute Nouveau
Re : Recherche VBA: condition + tri

Salut Paritec,

Tant pis pour moi !
C'est sur que c'est revenir en arrière par rapport à un code aussi automatisé que le premier. Ca aurait juste permis à un novice comme moi de pouvoir l'adapter.
Je trouverai la solution :)

A+

plouf
 

Statistiques des forums

Discussions
312 379
Messages
2 087 765
Membres
103 662
dernier inscrit
rterterert