Recherche avec listview

pingouinal

XLDnaute Occasionnel
Bonjour le forum,

Je cherche à adapter un fichier de jp14 qui génère un moteur de recherche avec le résultat dans une listview. Cependant je bloque sur 3 points :

- ma base de donnée (dans laquelle je veux effectuée la recherche) commencé en B12 et non en A2 comme dans la plupart des fichiers que j'ai trouvé. Et je ne sais pas où modifier cela.

- le résultat dans la listview affiche généralement les X premières colonnes, mais là je voudrais qu'il affiche les colonnes B, C, D, E, J, N, O). L'idéal serait que je sache où modifier celà dans le code, car j'aurais peut-être des colonnes à ajouter par la suite.

- dans l'absolu j'aimerais pouvoir chercher soit par nom de fichier (colonne C), soit dans tout le fichier. Donc je voudrais créer un bouton "Recherche par nom" et un "Recherche globale". mais je n'arrive pas à trouver comment définir la zone de recherche.

Je joins en exemple un extrait de fichier très basique (sans donnée confidentielle et avec peu de lignes vu que le fichier original fait 5Mo), ne vous étonnez donc pas si ça ne paraît pas cohérent. Il n'y a pour le moment aucune macro dans ce fichier: non pas que je n'ai rien essayé jusque là, mais comme je bloque complètement, je pense que ça ne sert à rien. Par contre si certains veulent voir le fichier que j'essaie d'adapter, il s'agit de celui donné par jp14 dans le lien suivant : https://www.excel-downloads.com/thr...e-dans-une-base-de-donnees-sous-excel.108743/

D'avance merci à tous ceux qui prendront le temps de m'aider.
 

Pièces jointes

  • Listview.xls
    18.5 KB · Affichages: 368
  • Listview.xls
    18.5 KB · Affichages: 359
  • Listview.xls
    18.5 KB · Affichages: 380

jp14

XLDnaute Barbatruc
Re : Recherche avec listview

Bonjour

Ci joint le fichier avec les modifications suivantes
Indication des colonnes à utiliser dans la listview, à paramétrer dans la procédure "Sub recherche2()"

J'ai rajouter la possibilité de faire une recherche sur une colonne à sélectionner.

Pour figer la colonne il suffit d'écrire dans la procédure "selecvaleur2/UserForm_Initialize"
.Value = "C"
'.Locked = True
'.Enabled = False

A tester

JP
 

Pièces jointes

  • Listviewrecherche.zip
    31.8 KB · Affichages: 691

pingouinal

XLDnaute Occasionnel
Re : Recherche avec listview

Rebonjour jp14 et le forum,

Après un premier test, cette macro me donne exactement le résultat que je souhaitais.
J'aurais par contre quelques petites questions supplémentaires (principalement d'ordre esthétique):

- est-il possible de modifier le format des colonnes dans la listview (centrer le texte sur certaines, et mettre le format heure (hh:mm) sur une autre)? Et si oui, où puis-je l'ajouter dans le code?

- la fonction de recherche par colonne est parfaite pour mon besoin. Cependant, j'aurais voulu savoir si on pouvait avoir dans le combobox le titre de la colonne (Pays par exemple), plutôt que la lettre correspondant à cette colonne pour une utilisation plus simple.

- est-il possible dans une listview d'avoir un compteur qui affiche le nombre de lignes dans cette même listview? Et pourquoi pas un autre qui ferait la somme des données comprises dans une colonne de la listview.

D'avance merci pour votre aide.
 

jp14

XLDnaute Barbatruc
Re : Recherche avec listview

Bonjour

Ci joint le fichier excel avec les modifications demandées.
Pour conserver le même esprit j'ai rajouté des variables pour
définir l'alignement dans la listview
utiliser un format pour l'affichage des données.

J'ai modifié la procédure pour afficher le nom de la colonne, le bouton indiquant la colonne sélectionnée.

A tester

JP
 

Pièces jointes

  • Listviewrecherche (version 2).zip
    48.3 KB · Affichages: 455
Dernière édition:

pingouinal

XLDnaute Occasionnel
Re : Recherche avec listview

Merci beaucoup jp14, tu as parfaitement résolu mon problème de format.
Après un rapide test, ça marche sans problème.

Par contre concernant le total de lignes ou la somme des données d'une colonne, aurais-tu une formule pour les calculer?
J'ai préparé en dessous de la listview des textbox pour accueillir les résultats (nombre total de lignes et somme de la colonne J par exemple, mais je n'arrive pas à trouver la formule à y rattacher.

Et tant que j'y suis, je me demandais si il existait une astuce qui classerait les données de la listview par ordre croissant ou décroissant quand on clique sur le nom de la colonne (comme c'est le cas dans beaucoup d'applications).

D'avance merci pour ta réponse.
 

jp14

XLDnaute Barbatruc
Re : Recherche avec listview

Bonsoir

Merci beaucoup jp14, tu as parfaitement résolu mon problème de format.
Après un rapide test, ça marche sans problème.

Par contre concernant le total de lignes
Et tant que j'y suis, je me demandais si il existait une astuce qui classerait les données de la listview par ordre croissant ou décroissant quand on clique sur le nom de la colonne (comme c'est le cas dans beaucoup d'applications).

D'avance merci pour ta réponse.

Ci joint le fichier qui répond aux demande ci dessus.
Dans une listview les données sont du type "string", trier une colonne date est impossible si la date est sous la forme jj/mm/aaa, il faudrait la mettre au format aaaa/mm/jj.
Pour éviter cette manip j'ai ajouté une colonne supplémentaire en dernière position de taille 0, donc invisible.

Un variable de type array contient une info qui indiquera à la procédure si la colonne à trier contient une date (0 pas de date 1 une date).
Quand on clique sur la colonne qui contient des dates la procédure transforme la date en valeur numérique, ce qui permet de faire le tri. Cette technique fonctionne avec les heures.

A tester

JP
 

Pièces jointes

  • Listviewrecherche (version 3).zip
    44.8 KB · Affichages: 505
Dernière édition:

pingouinal

XLDnaute Occasionnel
Re : Recherche avec listview

Bonjour jp14,

Merci pour ce fichier.
Le compteur de ligne marche parfaitement.

En ce qui concerne le tri en cliquant sur les colonnes, dans le fichier que tu m'envoie, c'est parfait. Mais lorsque je le copie dans mon fichier (copie intégrale du code sans modification), j'ai le message d'erreur "Compile Error: User-defined type not defined". Et dans le code la ligne suivante est surlignée : "Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader".

Si j'enlève les modules "usfAffichage/ListView1_ColumnClick" et "usfAffichage/tierliste", le reste marche très bien.
Y a-t-il une manipulation particulière à faire pour que ces modules fonctionnent?

D'avance merci.
 

jp14

XLDnaute Barbatruc
Re : Recherche avec listview

Bonjour

Bonjour jp14,
En ce qui concerne le tri en cliquant sur les colonnes, dans le fichier que tu m'envoie, c'est parfait. Mais lorsque je le copie dans mon fichier (copie intégrale du code sans modification), j'ai le message d'erreur "Compile Error: User-defined type not defined". Et dans le code la ligne suivante est surlignée : "Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader".

Si j'enlève les modules "usfAffichage/ListView1_ColumnClick" et "usfAffichage/tierliste", le reste marche très bien.
Y a-t-il une manipulation particulière à faire pour que ces modules fonctionnent?

D'avance merci.

Cela fait partie des mystères d'excel, le système ne reconnait pas cette commande.

Eventuellement vérifier les options cochées dans "Références VBA Project" du menu Outil.

Un exemple pour résoudre le problème
https://www.excel-downloads.com/threads/formulaire-excel.114676/

JP
 

jp14

XLDnaute Barbatruc
Re : Recherche avec listview

Bonjour

Par contre concernant le total de lignes ou la somme des données d'une colonne, aurais-tu une formule pour les calculer?

D'avance merci pour ta réponse.

Ci joint les procédures modifiées pour tenir compte de cette demande.
Une variable ("Public sommcol As Variant ' mettre 0 si pas de somme, 1 si somme") contient des infos pour que la procédure détermine les sommations à faire.
La procédure ("Private Sub sommecolonne()") positionne les labels en fonction des dimensions des colonnes, et réalise la somme de la colonne.
A tester

JP
 

Pièces jointes

  • varpublique.zip
    5.3 KB · Affichages: 324
  • varpublique.zip
    5.3 KB · Affichages: 273
  • varpublique.zip
    5.3 KB · Affichages: 301

pingouinal

XLDnaute Occasionnel
Re : Recherche avec listview

Bonjour jp14,

Merci pour le lien, il m'a permis de trouver la solution à mon problème.
Maintenant le tri marche très bien pour le texte, pour les années ou les heures. Mais pour les nombres, au delà de 10, j'ai le problème suivant:

- tri effectif : 1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9

- tri voulu : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

Y a-t-il un moyen de corriger celà? Dans mon fichier original, j'ai plusieurs milliers de lignes, du coup le tri donne quelque chose comme : 1, 12, 154, 1014, 2, 24, 258, 2178 etc...

D'avance merci pour ton aide.
 

jp14

XLDnaute Barbatruc
Re : Recherche avec listview

Bonjour

On retrouve ce problème dans excel quand les valeurs numériques sont saisi avec le format texte.
Pour résoudre le problème il faut déterminer le nombre de caractères et ajouter des 0 à gauche.

JP
 
Dernière édition:

CG2000

XLDnaute Occasionnel
Re : Recherche avec listview

Bonsoir a tous, et merci(s) pour l'emsemble des questions et des réponses ... que du plaisir ...

Génial le résultat. Est-il possible après la confirmation de l'emplacement de la recherche d'être orienté directement sur la case de recherche ?

Merci pour m'orienter.

CG2000
 

jp14

XLDnaute Barbatruc
Re : Recherche avec listview

Bonsoir

Ci joint l'userform et le module pour réaliser un tri sur des valeurs numériques.

J'ai rajouté une option à la variable datecol : 2
Public datecol As Variant ' mettre 0 si pas date 1 si date 2 si nombre
Dans la procédure
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

J'ai remplacé un "if" par "select case"
ce qui permet de sélectionner le code à éxécuter
Case 1 pour une date
case 2 pour une valeur numérique
Pour éviter de refaire les calculs je mémorise dans une variable statique la dernière colonne utilisée.

Algorithme simplifié
Recherche du nombre maximum de chiffres dans un nombre
Ajout de zéros à gauche pour que tout les nombres comportent un nombre de chiffre identique.

Pour visualiser les données, j'ai modifié la ligne dessous
.Add , , "tridate", 80
Après les essais mettre
.Add , , "tridate", 0


A tester

JP
 

Pièces jointes

  • varpublique.zip
    5.4 KB · Affichages: 406
  • varpublique.zip
    5.4 KB · Affichages: 377
  • varpublique.zip
    5.4 KB · Affichages: 429
Dernière édition:

Discussions similaires

Réponses
19
Affichages
1 K

Statistiques des forums

Discussions
312 207
Messages
2 086 246
Membres
103 163
dernier inscrit
Pelaez