XL 2010 Besoin d'aide programmation VBA pour fonction recherche

dukoko

XLDnaute Nouveau
Bonjour,

Je souhaiterai réaliser deux fonctions recherches différentes.

- RECHERCHE ANALYSE, malgré une première programmation qui ma été bien utile je souhaiterai l'améliorer, j'aimerai définir les critères par un ordre de priorité la date de l'analyse, ensuite le service et pour finir le nom et le prénom.

-RECHERCHE CHARGE CALCIQUE, pour celle-ci j'ai crée une feuille résultat charge calcique je souhaiterai récupérer les mesures de calcium (entouré en rouge) pour les différents temps.
Une userform 4 est associé pour la recherche, j'aimerai mettre un critère fixe qui est le type d'analyse "charge calcique" et ensuite affiner la recherche avec la date et le nom et le prénom pour ensuite transposé toutes les mesures dans le tableau de la feuille sur le même principe que l'autre recherche.

Merci et j'espère avoir été assez compréhensible.
 

Pièces jointes

  • GAZO ESSAI .xlsm
    149 KB · Affichages: 48

Dranreb

XLDnaute Barbatruc
Bonjour.
Le plus simple, à mon avis, pour des recherches selon critères entrés dans plusieurs ComboBox c'est de les lier en une sorte d'un seul objet virtuel de type ComboBoxLiées.
J'ai les modules qui permettent de définir un tel objet, si ça vous intéresse.
Mais vous trouverez aussi de nombreux exemples en tapant ce nom de type dans la zone de recherche.
 

Dranreb

XLDnaute Barbatruc
Votre classeur équipé des modules de service nécessaires, ainsi que toute la partie recherche Charge calcique déjà opérationnelle.
Bien sûr, là il trouve tout se suite sans qu'on n'ai besoin de saisir quoi que ce soit, vu qu'il n'y a qu'une combinaison date/nom/prénom
 

Pièces jointes

  • CBxLiéesDukoko.xlsm
    209.2 KB · Affichages: 38

Dranreb

XLDnaute Barbatruc
Oui, pas de problème. Il suffit de remplacer les TextBox par des ComboBox et d'en confier la charge à un objet ComboBoxLiées, sur le même modèle.
Conseil: mettez à tous vos contrôles des noms mnémoniques commençant par un trigramme reprenant les majuscules et la dernière lettre de leurs noms de type.
(ne serait ce que pour m’épargner, si vous en veniez à devoir me soumettre pour vérification le code que vous allez mettre en place)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Je suppose que vous avez terminé depuis longtemps la programmation du début de l'autre UserForm et constaté que les réactions des ComboBox sont correctes dès le 1er essai, comme toujours.
Pouvez vous me montrer le code que vous avez écrit pour voir ?
Pour la sortie sur les fiches à imprimer j'ai pensé à un truc qui me parait plus autoadaptatif :
Il s'agirait de définir des noms dans le classeur avec, par exemple, pour le nom "Nom", la référence
"=SAISIES!$B:$B LCou" qui définirait ainsi l'intersection entre la colonne B et une ligne nommée "LCou",
et en 'RESULTAT ANALYSE'!C2 simplement la formule "=Nom".
Naturellement, il ne faudrait plus les effacer puisqu'elles contiendraient des formules.
L'avantage c'est que comme ça, dans la programmation, au lieu d'affectations compliquées, il n'y aurait plus qu'à faire : CL.PlgTablo.Rows(LCou).Name = "LCou"
Il serait éventuellement possible de prévoir un dispositif dans la feuille des tables (DONNEES) pour mettre en place plus facilement ces noms.
J'aurais bien commencé quelque chose dans ce sens, mais elle est protégée par un mot de passe…
Qu'est ce que vous en pensez ?
 

dukoko

XLDnaute Nouveau
Bonjour,
Désolé je n'ai pas eu le temps de me pencher sur le sujet des combobox liées.
Pour l'utilisation en laboratoire, il suffit que le fichier soi intuitif et surtout facile d’accès aux résultats pour les différents utilisateurs.
Je vous laisse carte blanche.
Encore merci de votre aide.
 

Pièces jointes

  • CBxLiéesDukoko.xlsm
    208.9 KB · Affichages: 36

Dranreb

XLDnaute Barbatruc
Bonjour.
Bon alors j'attendrais que vous trouviez le temps de refaire et de me montrer au moins le code de la UserForm_Initialize de l'UserForm2 (qui s'appelle désormais UFmRecherche chez moi) avec mise en route d'un objet ComboBoxLiées nommé CL, comme dans la UFmRechCC, et je joindrai mon corrigé après.
Vous ne retouchez décidément jamais la 1ère propriété des choses dans la fenêtre de propriété. Du coup moi j'y ai tout retouché partout y compris les noms des objet Worksheet, sauf les noms des contrôles dans la UFmSaisie, votre actuelle UserForm2.
Ou alors, si vous préférez, et ce sera votre choix, je vous joins mon classeur tel qu'il est, mais je me désabonne aussitôt de cette discussion pour être sûr de ne pas y trouver de demande de rectification, et afin que vous vous débrouillez ensuite tout seul. Je ne suis pas votre larbin, bon sang ! Je ne fais que vous aider à le faire vous même, je ne le fais pas à votre place.
Et pour le principe des formules, vous êtes d'accord ? Dans mon classeur la commande "Effacer la feuille" remet actuellement les titres en face des nom des rubriques en nommant "LCou" la ligne 1 de la feuille "SAISIES" (objet nommé WshSaisie dans la rubrique Microsoft Excel Objets de l'explorateur de projets). On pourrait aussi nommé ainsi la ligne vide après les données, mais je ne vois pas pourquoi vous préfèreriez.
 

Dranreb

XLDnaute Barbatruc
Oups. Une erreur s'est glissée. Voulez vous la corriger:
Dans UFmRechCC, Private Sub CBnRésultat_Click(),
l'instruction LDon = TLgn(LLgn) ne doit pas être en commentaire.
Seules les deux autres doivent l'être, puisqu'on ne change plus les contenus de cellules, on change seulement la référence des LCCLn
 

Dranreb

XLDnaute Barbatruc
Ah puis j'ai complètement oublier d'adopter le même principe pour la 1ère partie de la feuille
La procédure devient :
VB:
Private Sub CBnRésultat_Click()
Dim LDon As Long, LLgn As Long, L As Long ', TDon()
'TDon = CL.PlgTablo.Resize(, 26).Value
LDon = TLgn(1)
'For L = 20 To 24: WshRésCC.Cells(L, "C").Value = TDon(LDon, L - 18): Next L
'WshRésCC.[F20].Value = TDon(LDon, 1)
'WshRésCC.[F26].Value = TDon(LDon, 26)
CL.PlgTablo.Rows(LDon).Name = "LCou"
For LLgn = 1 To UBound(TLgn)
  LDon = TLgn(LLgn)
'  WshRésCC.Cells(LDon + 31, "C") = TDon(LDon, 8)
'  WshRésCC.Cells(LDon + 31, "D") = TDon(LDon, 18)
  CL.PlgTablo.Rows(LDon).Name = "LCCL" & LLgn
  Next LLgn
End Sub
Il ne reste plus qu'à mettre les formules correspondantes dans la "RESULTAT CHARGE CALCIQUE"
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
297
Réponses
1
Affichages
102

Statistiques des forums

Discussions
312 199
Messages
2 086 159
Membres
103 147
dernier inscrit
tubaman