XL 2010 Récuperer une ligne en fonction de deux combobox

kyasteph

XLDnaute Occasionnel
Bonjour,
je souhaite atteindre une ligne particuliere et récuperer les données de la ligne dans des texbox,en fonction
des données de deux combobox me servant de criteres de choix.
Mon code fonctionne lorsque la colonne "X" (ChoixPRENOM ds le code) ne comporte pas des doublons;
mais lorsqu'elle comporte des doublons,la ligne récupérée est fausse comme c'est le cas dans l'exemple qui suit:
Choix N° de compte = " 221100-TERRAINS D'EXPLOITATION AGRICOLE "
Choix Libellé = " ELECTRICITE "

Ici il y a une erreur! car au lieu de récuperer les données de la ligne 5 représentée par le couple
(" 221100-TERRAINS D'EXPLOITATION AGRICOLE ", " ELECTRICITE "),il recupere les données de la ligne 2 représentée
par le couple (" AAA ", " ELECTRICITE ").

Merci de m'aidez s'il vous plait.
 

Pièces jointes

  • Essai-Immob.xlsm
    66.5 KB · Affichages: 43

kyasteph

XLDnaute Occasionnel
Bonjour
Je vous remercie infiniment,votre solution marche à merveille.Mais je dois avouer que c'est du haut niveau en vba en tout cas pour moi.Je vois que vous avez utilisé le module de class qui est nouveau pour moi.
Dans tous les cas je vais essayer de comprendre mais aussi c'est une solution qui me fera avancer énormément dans mon projet.
Merci encore et longue vie au forum.
 

Dranreb

XLDnaute Barbatruc
Bonjour
La frappe dans les ComboBox est toujours intuitive en ce sens que, selon leurs propriétés optionnelles par défaut, ils proposent toujours dans leur zone le 1èr élément de leur liste commençant par le début tapé. Le classement alpha assumé par l'objet ComboBoxLiées en fait en même temps le premier positionné dans la liste de ceux se suivant et commençant ainsi.
Si ce n'est pas suffisant, il y a moyen de lui faire accepter de petits dispositifs grefés pour une recherche par mots clés, voire par groupes de caractères contenus n'importe où dedans. Qu'est ce qu'il vous faudrait exactement ?
 

kyasteph

XLDnaute Occasionnel
Bonjour
Merci pour la promptitude avec laquelle vous vous penchez sur mon cas.Ce que je voudrais c'est qu'en tapant les premiers caracteres (lettre ou chiffre selon que le mot cherché commence par des lettres ou chiffres..),les combobox m'affichent la liste des éléments de la liste remplissant ces conditions ,car il peut avoir plus de mille éléments dans la liste.
En clair je veux une recherche par groupes de caractères contenus au début du mot ou chiffre recherché.

Merci de m'aider
 

Dranreb

XLDnaute Barbatruc
Pour les caractères de début seulement qu'est ce que ça apporterait de développer autre chose: vous pouvez quand même demander l’affichage de la liste après l'avoir tapé ce début, non ? Le plus souvent d'ailleurs, ça fait venir le tout bien avant, mais si ce n'est pas celui que vous vouliez, je vous le dis la liste est par ordre alpha, alors ce que vous cherchiez n'est pas loin en dessous.

Mais vous pouvez ajouter cette procédure dans l'UserForm si vous trouvez que ça vaut le coup. Moi je ne le pense pas.
VB:
Private Sub CL_SujFltChg(ByVal CBM As ComboBoxMmbr, ByVal Filtré As Boolean)
If Not CBM.CBx Is Me.ActiveControl Then Exit Sub
If Not (CBM.CBx Is Me.ChoixNOM Or CBM.CBx Is Me.ChoixPRENOM) Then Exit Sub
If CBM.CBx.ListIndex >= 0 Or CBM.CBx.Text = "" Then Exit Sub
Dim Suj ' Sujet temporaire pour recherche intuitiuve
Suj = MSujetCBx.SujCBxLike(CBM.SujetFlt, CBM.CBx.Text & "*") ' "*" & CBM.CBx.Text & "*")
If IsEmpty(Suj) Then Exit Sub
CBM.SujetFlt = Suj ' Affectation du sujet corrigé.
CBM.CBx.DropDown ' Affiche la liste
End Sub
 
Dernière édition:

kyasteph

XLDnaute Occasionnel
Bonjour,
Permettez moi de revenir une fois de plus vers vous.
Je souhaite cette fois ,une fois ma recherche effectuée,utiliser mon bouton valider afin de renvoyer le contenu de ma texbox 6 (je lui affecterai un numero de compte ex :481 000), à la ligne correspondante de la colonne AE.
Par ailleurs est ce possible de modifier donc les valeurs de mes texbobx et les affecter aux cellules correspondantes de ma base de données,histoire de corriger les éventuelles erreurs contenues dans ma base de données?
j'ai une fois de plus besoin de vos lumieres car je cherche mais je ne trouve pas.

Merci de m'aidez s'il vous plait.
 

kyasteph

XLDnaute Occasionnel
Bonjour,
je vous remercie pour le fichier qui me fait énormément avancer,
Mais je viens encore faire appel à vos lumieres.dans la poursuite de mon projet j'ai encore quelques préoccupations:

1)Je souhaiterais afficher le contenu de mes texbox 3 et 4 au format "#,##0.00"

2)Je souhaiterais que les résultats de ma recherche (les texbox 1,2,3,4,5) par défaut ne soit pas modifiable ,
sauf si l'utilisateur appuie sur le bouton "Modifier"

3)Il y a un probleme avec le bouton "Modifier" car sans changer le contenu des texbox quand on appuie sur le bouton
"Modifier",il inverse les dates (par exemple 05/02/16 est transformé en 02/05/16) et ce à partir de la deuxieme ligne.

4)Le bouton "Ajouter" insere sur toute la ligne,je souhaiterais qu'elle insere les données dans le
tableau,c'est à dire dans la plage (X2:AE20) par exemple;aussi une fois que les données sont insérées
que la copie soit désactivée.

5)Dans la feuille nommée "Fiche immob",à partir de la ligne 3,je souhaiterais renvoyer les valeurs
des combobox suivantes (ChoixNOM,ChoixPRENOM et ModeAMORT), et des texbox suivantes
(texbox 7 et 9); comme indiqué dans la piece jointe
Dans la colonne "F" de la feuille "Fiche immob",je souhaiterais affecter la différence suivante
(Texbox4.Value - Texbox3.Value)

Merci de m'aider s'il vous plait
 

Pièces jointes

  • CBxLiéesKyasteph (2).xlsm
    127.9 KB · Affichages: 42

Dranreb

XLDnaute Barbatruc
Bonjour.
1) - Utilisez la fonction Format au chargement (et probablement CCur au déchargement alors)
2) - Ça complique inutilement. Sur des réalisations plus abouties j'ai plutôt fait l'inverse: le bouton de validation n'est accessibles que si au moins une modification a été effectuée et que le bouton "Effacer" se soit transformé en "Annuler" pour revenir à la situation initiale en réexécutant simplement GarnirChamps.
3) - Utilisez la fonction CDate à l'écriture de cette colonne, il se peut que ça règle le bogue, ça dépend de votre version d'Excel. Si ça ne le règle pas il faudrait y écrire VLgn(1, 30) = Format(CDate(TBxDate.Text),"dd mmmm yyyy")
4) - Ce n'est pas très habituel que le tableau soit en colonne X dans la feuille. Pourquoi ne pouvez vous le mettre en colonne A ? Vous pourriez aussi employer la fonctionnalité de mise sous forme de tableau du groupe Styles de l'onglet Accueil. Ça simplifierait deux trois choses: CL.Plgtablo ne couvrirait plus des lignes entières mais seulement la DataBodyRange du ListObject, et CL.Lignes conserverait sa ListRows. Sinon il devrait être possible de circonscrire la plage de colonnes considérées en précisant à CL.PLage la cellule de départ et derrière le nombre de colonnes, ou bien les colonnes exactes de la 1ère ligne et True derrère mais ça n'a jamais vraiment été utilisé. Que ce soit fait comme ça ou par création d'un ListObject il faudrait alors aussi retrancher 23 à tous les numéros de colonnes.
5) - Vous n'avez pas l'air de le souhaiter tant que ça, puisque dans le classeur joint vous ne l'avez pas fait ! Est ce que c'est parce que ça vous pose un problème ? Je me demande bien lequel…

Conseil: Donnez à vos contrôles des noms mnémoniques commençant par un préfixe de trois lettres formé le plus souvent des majuscules et de la dernière lettre du nom de type du contrôle. Plus facile de s'y retrouver avec TBxDate au lieu de TextBox1 qui ne veut rien dire par exemple.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 137
Membres
112 668
dernier inscrit
foyoman