Recherche verticale avec 2 conditions : valeurs textbox

doudou33

XLDnaute Nouveau
Bonsoir,

Je fais appel à nouveau à vos talents vba. J'ai pourtant cherché durant plusieurs jours mais je bloque. Dans le fichier ci-joint, j'ai une userform avec 4 texbox qui s'affichage en cliquant sur le bouton :

- texbox 1 : saisie de la référence
- textbox 2 : saisie d'un n° de série
- textbox 3 : affichage de la désignation de la référence en automatique
- textbox 4 : saisie du n° de dérogation

Mon besoin est le suivant :

Lorsque que je clique sur le bouton "enregistrer" du userform, une recherche verticale de la référence saisie associée ou pas avec le n° de série saisie (= recherche verticale 2 conditions) vient se positionner sur la ligne et la bonne colonne afin d'enregistrer le n° de dérogation saisie dans la textbox4. La recherche verticale doit pouvoir fonctionner quand même même si le champ du textbox2 est vide. En effet, le n° de série n'est pas toujours obligatoire.

Attention, je souhaite conserver mon codage vba avec les différents tests, notamment l'affichage d'un msgbox "référence non présente".

Ma macro fonctionne uniquement pour la recherche verticale sur la saisie de la référence (1 condition) mais pas avec en plus le n° de série (2ème condition).

Dans le fichier de l'onglet "Feuil1", si je saisie la référence "tintin" avec le n° de série "2525" et comme n° de dérogation "COCA", la valeur "COCA" doit être renvoyée en cellule "J2".

Merci à vous tous encore pour le temps consacré à ma demande.

Salutations
 

Pièces jointes

  • BON.xls
    157 KB · Affichages: 88

doudou33

XLDnaute Nouveau
Re : Recherche verticale avec 2 conditions : valeurs textbox

Ça fonctionne mais avec toutes ces lignes de codes ou doit on modifier la plage de sélection si celles sont contenues et enregistrées dans un autre fichier excel ayant aussi une feuil1? Merci encore
 

Dranreb

XLDnaute Barbatruc
Re : Recherche verticale avec 2 conditions : valeurs textbox

Une seule ligne est à modifier si la base de donnée est enregistrée ailleurs. Dans l'UserForm_Initialize :
VB:
CL.Plage Workbooks(ClasseurX).Worksheets(1).[A2]
La plage retenue est étendue aux lignes entière depuis cette cellule jusqu'a la dernière renseignée, et cette plage de lignes entières est ensuite partout connue dans l'Userform sous le nom CL.PlgTablo.

P.S. Pour vous en convaincre, après avoir spécifié au CL.Plage une cellule quelconque d'une feuille quelconque d'un classeur ouvert, ajoutez cette instruction:
VB:
MsgBox "Les lignes de la base de données interrogée sont :" _
   & vbLf & CL.PlgTablo.Address(External:=True), vbInformation, "Information"
 
Dernière édition:

doudou33

XLDnaute Nouveau
Re : Recherche verticale avec 2 conditions : valeurs textbox

Bonjour,

Ca fonctionne si je met :

CL.Plage Workbooks("Classeur1").Worksheets(1).[A2] mais si mon classeur s'appelle "10101010", j'ai un message d'erreur sur le lancement de l'userform1! Il ne faut peut être pas utilisé workbooks?

Merci encore pour le temps passé je n'ai pas l'habitude de l'utilsaition des modules de classes : c'est la 1ère fois que je vois ça!

Merci de votre réponse.

Salutations
 

Dranreb

XLDnaute Barbatruc
Re : Recherche verticale avec 2 conditions : valeurs textbox

Bonjour.

Un nouveau classeur peut à la rigueur s'appeler 'Classeur1" avant d'avoir été enregistré, mais s'il porte une autre sorte de nom c'est qu'il l'a été et dans ce cas je doute qu'il ne se termine pas par quelque chose du genre ".xlsx" !

Workbooks est une collection d'objets de type Workbook représentant les classeurs ouverts. Selon le contexte vous pouvez ne pas en avoir besoin: Sa méthode Open renvoie un objet de type Workbook. Si vous avez affecté par un Set l'expression d'ouverture à une variable déclarée As Workbook, vous pouvez aussi l'utiliser comme expression Workbook. Et il y a aussi ActiveWorkbook qui est une expression de type Workbook représentant le classeur actif.

Si, tel monsieur Jourdain dans "Le Bourgeois Gentilhomme" de Molière, qui a toujours fais de la prose sans le savoir, vous en aviez l'habitude car bien des choses sont objets dans VBA, et qui dit objet dit module de classe le définissant, même si sa programmation ne vous est pas accessible, du fait qu'elle fait partie des fournitures de l'application hôte.

À ce propos, comme il n'y a pas d'aide, j'ai bien évidemment documenté de commentaires explicatifs chaque propriété, méthode et évènement de mes modules de classe, sinon on ne pourrait pas savoir comment s'en servir.
 

doudou33

XLDnaute Nouveau
Re : Recherche verticale avec 2 conditions : valeurs textbox

Merci pour votre réponse mais pour appeler la recherche sur un fichier qui s'appelle 10101010.xls on fait comment? Je avoues que j'ai vraiment du mal avec les modules de classes merci encore
 

Dranreb

XLDnaute Barbatruc
Re : Recherche verticale avec 2 conditions : valeurs textbox

S'il est ouvert il est membre de la collection Workbooks et peut s'isoler par Workbooks("10101010.xls"). C'est bien une expression de type Workbook, et elle est de ce fait munie d'une collection Worksheets.

j'ai vraiment du mal avec les modules de classes
Oui, mais, au lieu de pêchez à droite à gauche des expressions toutes faites, qu'il s'agisse de ceux d'une bibliothèque comme Excel ou MSForms ou de modules de classe persos, si vous assimilez bien les notions de variable, de type de donnée, d'objet, de méthode, de propriété et d'évènement, songez à toute la liberté que vous aurez de combiner vous même les choses au gré de votre imagination, en sachant d'avance à 99% que ça marchera forcément, pour peu que vous vous baserez toujours sur des choses qui existeront !
 
Dernière édition:

doudou33

XLDnaute Nouveau
Re : Recherche verticale avec 2 conditions : valeurs textbox

Merci pour le temps passé mais je pense que je vais chercher avec un autre codage vu que je ne maitrise pas le vôtre! J'ai cherché pourtant mais codage trop complexe pour moi.

Salutations
 

Dranreb

XLDnaute Barbatruc
Re : Recherche verticale avec 2 conditions : valeurs textbox

Vous parlez du codage de quoi ? Vous n'arriverez pas à faire plus court et plus simple dans l'Userform. Qu'est-ce que vous ne comprenez pas, par exemple ?
S'il s'agit de déterminer une expression Range pour la 1ère cellule de votre base de donnée, j'avais donné au poste #3 de cette ancienne discussion une sorte d'inventaire de toutes les façon de l'exprimer.
Votre classeur est-il au moins ouvert déjà ?
Et si non, est-ce toujours le même qu'il faut ouvrir ou faut-il laissé le choix entre plusieurs ?
Est-ce toujours la 1ère feuille, et sinon la feuille porte-t-elle toujours le même nom ?
Ça fait trop de questions pour que je puisse pour le moment vous donner une solution toute faite !
 
Dernière édition:

doudou33

XLDnaute Nouveau
Re : Recherche verticale avec 2 conditions : valeurs textbox

En fait, je souhaiterai rajouter avec votre codage du fichier "CbxLiésDoudou33.xls" que la recherche des données s'effectue sur la feuille 1 du fichier excel "10249765.xls". Le nom du fichier excel "10249765.xls" sera stockée dans une variable "Nom1".xls car le fichier contenant les données de recherches (choisies en Combobox "CbxRéf" et Combobox "CbxNoSN" pour pouvoir trouver la bonne cellule pour enrgsiter la donnée saisie en TbxDérog) ne sont pas les mêmes suivant le fichier ouvert par défaut.

Je n'arrive pas à modifier le codage avec vos réponses de ce matin : j'ai essayé pourtant.
Merci encore.
 

Pièces jointes

  • 10249765.xls
    23.9 KB · Affichages: 35
  • CbxLiésDoudou33.xls
    319 KB · Affichages: 48
  • CbxLiésDoudou33.xls
    319 KB · Affichages: 37
  • CbxLiésDoudou33.xls
    319 KB · Affichages: 47

Dranreb

XLDnaute Barbatruc
Re : Recherche verticale avec 2 conditions : valeurs textbox

Je n'ai nulle part trouvé de variable Nom1 contenant un nom de fichier dans votre classeur CbxLiésDoudou33.xls
S'il faut l'ouvrir, il serait bon que le chemin y figure aussi, à moins que ce soit à coup sûr le même que l'autre.
Le FullName du fichier pourrait aussi être noté dans une plage.
Après un Workbooks.Open le classeur est actif. Vous pourriez l'ouvrir juste avant le Show du Userform et mettre simplement dans son Userform_Initialize CL.Plage Cells(2, 1), ou pour documenter un peu CL.Plage ActiveSheet.Cells(2, 1) ou bien CL.Plage ActiveWorkbook.Worksheets(1).Cells(2, 1)
 

doudou33

XLDnaute Nouveau
Re : Recherche verticale avec 2 conditions : valeurs textbox

Bonjour,

Merci beaucoup car cela fonctionne trés bien avec CL.Plage ActiveWorkbook.Worksheets(1).Cells(2, 1). De plus, j'ai appellé l'ouverture de mon fichier dans la macro qui permet d'afficher l'userform.

Par contre, est-ce que vous savez comment imposer un format "0" ""000"" ""00"" "000"""0" dans le choix des références dans le comboboxCbxRéf ?

Merci à vous
 

Dranreb

XLDnaute Barbatruc
Re : Recherche verticale avec 2 conditions : valeurs textbox

Bonjour.

Vous avez déjà installé la procédure qui fabriquerait le dictionnaire spécial pour ça. Il ne reste plus qu'à faire en sorte qu'il ne sache plus fabriquer tout seul un dictionnaire pour le 1er ComboBox, et pour cela, il suffit qu'il ne sache plus de quelle colonne le prendre, et donc de ne plus la préciser au CL.Add.

J'en ai fait une version où, l'Userform étant lancé, vous pouvez ouvrir ou activer manuellement n'importe quel classeur, que l'Userform soit affiché ou non. Il vous prévient de ce qu'il y voit et vous demande si vous vouez travailler dessus.

P.S. Pour en revenir à la condition de mise en œuvre de DicBdDPersoSVP, je vous l'avais déjà indiquée. Apparemment vous n'aviez pas compris. C'est pourquoi j'ajoute cette dernière ligne de commentaire explicatif soulignant le caractère facultatif du second argument de la méthode Add de ComboBoxLiés. Ça devient :
VB:
Public Sub Add(ByVal CBx As ComboBox, Optional ByVal Colonne As Variant = -1)
Rem. —— Cette méthode ajoute un ComboBox à la collection.
'   Cbx : Le ComboBox à ajouter.
'   Colonne : La colonne dans la plage. Ce peut être un Range, un numéro de colonne, une lettre de colonne, un nom de plage.
'             Facultatif, son omission entrainera des décrets de DicBdDPersoSVP(CBM) lors des Actualiser.
Avec ça, bien que ce soit aussi déjà expliqué par ailleurs, on aura peut être des chance de comprendre plus vite qu'on peut ne pas préciser la colonne à laquelle devra correspond le ComboBox à gérer, et que dans ce cas il vous demandera poliment de lui fabriquer vous même le dictionnaire arborescent correspondant, par l'intermédiaire d'une procédure DicBdDPersoSVP.
 

Pièces jointes

  • CbxLiésDoudou33.xls
    341.5 KB · Affichages: 39
  • CbxLiésDoudou33.xls
    341.5 KB · Affichages: 53
  • CbxLiésDoudou33.xls
    341.5 KB · Affichages: 50
Dernière édition:

Discussions similaires

Réponses
10
Affichages
218
Réponses
8
Affichages
285

Statistiques des forums

Discussions
312 280
Messages
2 086 743
Membres
103 384
dernier inscrit
bakhtibenabbey