Code pour userform de recherche

Bonjour chers amis

Je voulais solliciter de votre aide pour la réalisation d'un programme.

J'ai un fichier excel qui comporte un tableau. je voulais mettre une age (combox1) ou intervalle d'age (combox1 et combox2) et quand je sélectionne un mois ou une année donnée (combox3 et combox4), la liste box affiche les personnes concernées.

exemples: quand je mets 12 (ans) dans le combox1, avril dans combox3 et 2020 dans combox4, la listbox calcul et affiche les personnes qui ont 12 ans en avril 2020 ou

quand je mets 6 (ans) dans le combox1et 8 (ans) dans combox 2, décembre dans combox3 et 2023 dans combox4, la listbox calcul et affiche les personnes qui ont entre 6 à 8 ans en décembre 2023 ..... et affiche le résultat dans la listbox.

J'ai créé un userform qui comporte:

- une listbox pour afficher le résultat

- 4 combox: les 2 premières pour selectionner les valeurs à rechercher, le 3è et 4è pour selectionner le mois et année

- 2 boutons commandes pour rechercher et quitter

- 1 textbox pour afficher le nombre de lignes ou résultat dans la listbox.

je voudrais que vous m'aidiez à coder le fichier.

ci-joint le fichier.

Merci

26classeur1.xlsm (37.90 Ko)

Salut,

Je te propose une solution en annexe, mais je présume que c'est plus une démonstration de ce qui est possible de faire qu'un fichier définitif. Il y a probablement bien des choses à affiner encore. J'y ai ajouté quelques exemples afin de pouvoir faire un ou deux tests spéciaux.

Tout d'abord, je trouve bizarre ta manière de calculer les âges dans la colonne G. Si une personne est née aujourd'hui le 19 septembre 2021, ta formule indique qu'elle a déjà 1 jour. Selon moi cet enfant aura un jour dans un jour tout comme elle aura 1 an dans un an.

Ensuite, est-ce bien correcte de dire d'un enfant qui a 31 jours qu'il a 0 mois ?

Enfin, tu n'as pas de s à "2 jour".

image

Ceci mis à part, lorsque tu indiques des données dans les ComboBox 1 à 4 et que tu cliques sur ton bouton ''Rechercher'', le code du fichier joint va calculer l'âge de chaque personne à la date indiquée dans le formulaire, l'inscrire en colonne H et comparer cet âge avec tes critères. Si ça correspond, cette personne est reportée sur la liste du formulaire. A ce moment là, le calcul provisoire de l'âge à une certaine date est visible en colonne H (si nécessaire, déplace un peu ton formulaire).

Tu peux effectuer plusieurs recherches sans fermer le formulaire ; la colonne H sera alors actualisée si nécessaire mais elle sera effacée lorsque tu refermeras le formulaire.

Afin que tu saches comment j'ai calculé l'âge à une certaine date, j'ai placé les mêmes calculs qu'en colonne H dans la colonne I, mais ceux-ci ne sont pas effacés afin que tu puisses aller voir les formules utilisées pour la dernière recherche. Tout ceci pour te montrer que ces calculs provisoires peuvent être ou non effacer en finale et que tu saches quand même quels calculs ont été utilisés.

Si nécessaire explique avec précision la fourchette de quels enfants ont tel âge à telle période, quelque chose du genre : les enfants nés entre le jj.mm.aaaa et le jj.mm.aaaa ont entre 20 et 22 ans en mars 2025 et fournis si possible une formule qui permet de comprendre ces extrêmes.

Si tu effectues une recherche à une date antérieure à la personne la plus jeune, soit pour le fichier ci-joint avant le mois d'octobre 2021, la macro bloque. J'ai trouvé inutile de placer un garde-fou afin d'éviter cela, mais si nécessaire, fais-le-moi savoir.

La mise en place de formules dans les colonnes H et I ralenti passablement le déroulement de la macro. Par la suite, on pourrait remplacer ces formules par des résultats, ce qui allégerait considérablement les choses.

A te relire.

23salem-v1.xlsm (41.77 Ko)

Bonjour Salem, Yvouille , le forum,

Un autre essai, comme j'avais commencé à bosser dessus....

N'étant pas très à l'aise avec les listbox, ça ressemble plus à du bricolage que du codage mais par contre les combobox semblent indépendantes...

7salem.xlsm (44.50 Ko)

Si lune des combobox est vide, cela équivaut à tout sélectionner.

Cordialement,

Bonsoir chers amis,

c'est avec un grand plaisir pour moi de se retrouver dans ce forum et merci à tous pour vos diverses interventions.

Pour monsieur Yvouille :

J'ai beaucoup aimé votre travail et pourtant, si seulement monsieur Yvouille pouvais encore m'aider avec le code afin d'effectuer une recherche à une date antérieure au mois d'octobre 2021 sinon pour les recherche à une date postérieure au mois d'octobre 2021le code marche bien.


Pour monsieur xorsankukai

J'ai beaucoup apprécié également le travail de monsieur xorsankukai seulement que quand je lance une recherche rien ne s'affiche. J'ai fais le test avec plusieurs différentes ages, mois et annéés mais toujour vide la listbox. S'il vous plait j'ai encore toujours besoin de votre intervention.

Donc je continue de solliciter l'aide de tous pour m'aider à finaliser ce programme.

Merci d'avance

En ce qui me concerne, j'ai précisé que la date à laquelle on effectue une recherche est limitée par le plus jeune participant. Comme j'ai placé sur mon fichier - pour une autre raison expliquée - un participant né ce jour, les recherches sont limitées à octobre 2021 et plus tard. En supprimant ces jeunes personnes sur la feuille Excel, des recherches dans un passé plus ou moins limité seront possibles.

Je n'arrive à aucun résultat non plus avec le fichier de Xorsankukai - que je salue au passage - mais son idée de placer des titres séparément de la ListBox1 me plait bien. Si mon fichier est finalement retenu, je vais piquer cette très bonne idée sans gêne

J'avais trouvé sur internet qu'il y avait la possibilité de placé des titres de colonnes directement dans la ListBox, mais il faut apparemment passer par l'intermédiaire d'une liste comportant ces titres sur une feuille Excel. La solution proposée par notre ami est bien plus simple, semble-t-il.

Rebonsoir cher Yvouille,

La vérité est que les 2 fichiers me plaisent bien. Pour le plus jeune age je verai ce que je peux faire. Donc vous pouvez toujours le'adapter comme vous le proposez.

Merci

J'ai écrit :

En supprimant ces jeunes personnes sur la feuille Excel, des recherches dans un passé plus ou moins limité seront possibles.

Ce n'est pas à moi d'adapter la macro, c'est à toi d'effacer les personnes trop jeunes sur la feuille Excel

Re,

Pour monsieur xorsankukai

J'ai beaucoup apprécié également le travail de monsieur xorsankukai seulement que quand je lance une recherche rien ne s'affiche. J'ai fais le test avec plusieurs différentes ages, mois et annéés mais toujour vide la listbox. S'il vous plait j'ai encore toujours besoin de votre intervention.

Bizarre, chez moi si je sélectionne Juin et 2003 et que je clique sur Recherche, j'obtiens:

image

Si je sélectionne Âge mini 13, âge maxi 18, mois décembre et année 2006 et que je clique sur Recherche, j'obtiens:

image

Désolé mais je ne peux t'aider d'avantage, je ne peux faire mieux.

Mais tu es entre de bonnes mains avec Yvouille,

Bonne continuation,

Salut Salem, Salut xorsankukai,

@ xorsankukai

J'ai voulu comprendre pourquoi ton code ne fonctionnait encore et toujours pas chez moi et je l'ai lancé au pas à pas. Les variables se chargeaient correctement et dans ta deuxième boucle For/Next, j'ai dû accélérer un peu le mouvement. J'ai donc placé un point d'arrêt sur la ligne ListBox2.AddItem et - oh miracle - ça a tout à coup fonctionné. Pour en avoir le coeur net - soupçonnant un problème au téléchargement - je suis reparti une fois depuis ton fichier sur le fil et ça n'a plus embêté. C'est à n'y rien comprendre !!

Mais tu as, selon moi, malgré tout pas compris le souhait de Salem. Ta macro ne fait que lister les personnes qui sont nées tel année à tel mois - toutes les personnes listées ont le même âge - alors que j'ai compris qu'il faut lister toutes les personnes qui auront entre tel et tel âge à un certain moment donné.

Dans l'exemple ci-dessous, on voit que les personnes qui auront entre 19 et 21 ans en février 2024 ont plusieurs années de naissance possibles.

image

Comme tu l'as fait pour ton fichier, je vais également charger tous les ComboBox à l'initialisation et placer une ligne de titre au-dessus des données reportées. Mais j'attends tout d'abord que Salem réponde à mes questions.

@ Salem

J'attends maintenant de ta part que tu répondes à mes questions posées dans mon premier message quant à la précision des âges que tu souhaites. Fournis-moi les exemples demandés.

Cordialement.

Salut Yvouille,

Pour ce qui est de la fourchette d'enfants je n'ai pas une précision particulière sinon je travail avec la liste entière.

Et étant donné que je pourrai ajouter d'autres enfants plus jeunes, j'ai fais cette manipulation au niveau du code et ça marche : j'ai ajouté On Error Resume Next

For i = 2 To DerLig
Range("H" & i).FormulaR1C1 = "=DATEDIF(RC[-3],DATE(" & ComboBox4 & "," & Mois_retourné & ",1),""y"")"
On Error Resume Next
If ComboBox2 = "" Then
If Range("H" & i) = ComboBox1 * 1 Then
Nbr_Lignes = Nbr_Lignes + 1
ListBox1.AddItem WorksheetFunction.Text(Range("B" & i), "00000")
ListBox1.List(ListBox1.ListCount - 1, 1) = Range("C" & i)
ListBox1.List(ListBox1.ListCount - 1, 2) = Range("D" & i)
ListBox1.List(ListBox1.ListCount - 1, 3) = Range("E" & i)
ListBox1.List(ListBox1.ListCount - 1, 4) = Range("H" & i)
End If

Le petit souci que j'ai c'est comment masquer les lignes vides dans la listbox1. Les lignes dont il n'ya rien comme encerclé sur l'image.

image

De manière générale le code me plait bien, idem pour le code de monsieur xorsankukai

Merci

Bonjour Salem, Yvouille, le forum,


@ Yvouille:

Merci d'avoir pris le temps d'analyser mon code,

Mais tu as, selon moi, malgré tout pas compris le souhait de Salem. Ta macro ne fait que lister les personnes qui sont nées tel année à tel mois - toutes les personnes listées ont le même âge - alors que j'ai compris qu'il faut lister toutes les personnes qui auront entre tel et tel âge à un certain moment donné.

Tu as tout à fait raison, je suis hors sujet, ,mais bon, ça aura eu le mérite de me faire travailler avec les Listbox,

Bravo pour ton travail, , bonne continuation,


@Salem:

A tester: (en attendant le retour d'Yvouille)

If Not IsError(Range("H" & i)) Then
image

Cordialement,

Salut @Yvouille, @xorsankukai et tout le forum,

Je tiens à vous remercier sincèrement pour votre disponibilité et votre bonne volonté.

En reanalysant tous les divers fichiers, je me suis rendu compte le premier fichier de monsieur @xorsankukai (salem.xlsm (44.50 Ko)) recherche le mois et l'année de naissance de la colonne E tandis que pour celui de monsieur @Yvouille, le calcul est plus centré sur l'année d'où j'ai compris l'inquiétude de la fourchette d'age.

Je ne sais pas si je m'explique mal.

Mon souci est le suivant: qui a age x en mois y et année z ? exemple 1 : cbx 1= 10, cbx 3= Avril et cbx 4=2018, le code recherche ceux qui ont exactement 10 ans 0 mois en Avril 2018 (le nombre de jours n'importe pas). autrement dit ceux qui sont né en entre 1er et 31 Avril 2008 (04/2018 - 10ans)

exemple 2: cbx 1= 15, cbx 3= Décembre et cbx 4=2021, le code recherche ceux qui ont exactement 15 ans 0 mois en Décembre 2021 (le nombre de jours n'importe pas). autrement dit ceux qui sont né en entre 1er et 31 Décembre 2006 (12/2021 - 15 ans).

J'affirme que le dernier fichier de @xorsankukai (copie-de-salem-v1.xlsm (43.74 Ko)) marche bien en masquant les lignes d'erreur, merci.

Merci d'avance à tous.

Bonsoir,

Je laisse xorsankukai terminer ce sujet.

Bonne continuation.

Bonjour le fil,

Je laisse xorsankukai terminer ce sujet.

@ Yvouille: Je suis honoré de la confiance que tu me témoignes, j'espère me montrer à la hauteur (et compter sur toi le cas contraire)


@Salem: voici ce que j'ai compris:

Combobox1=12 combobox2= vide combobox3= Décembre combobox4 = 2017

  • Je dois lister toutes les personnes qui sont nées entre le 1er et le 31 décembre 2005.
image

Combobox1=12 combobox2= 15 combobox3= Décembre combobox4 = 2017

  • Je dois lister toutes les personnes qui auront entre nées entre le 1er décembre 2002 et le 31 décembre 2005.
image

Un essai à partir du fichier de Yvouille:

16salem-v2.xlsm (46.06 Ko)

Cordialement,

Bonsoir @Yvouille, bonsoir @xorsankukai et bonsoir à tout le forum,

Du très fond de mon coeur je vous dis un très grand merci. Merci à tous les chers membres du forum, et plus particulièrement aux frères Yvouille et xorsankukai.

Vous avez sacrifié vos temps, energies et connaissances pour m'aider à venir au bout de mon inquiétude.

J'ai testé le dernier fichier de xorsankukai et ca marche bien. Encore une fois merci à vous deux car vous vous etes completés pour enfin rendre ce gros travail qui pesait sur moi très très leger. Sans vous je sais vraiment pas quoi faire.

Que le Bon Dieu récompense tout ce que vous avez perdu ou dépensé à cause de moi.

Merci.

Rechercher des sujets similaires à "code userform recherche"