PB pour HERVE et le forum - multi recherche avec listbox

kolivier

XLDnaute Occasionnel
Bonsoir Hervé et bonsoir le forum,

Je ne souhaite vexer personne en m'adressant en premier lieu a Herve car je ne doute absolument pas de la competence des autres membres du forum dont les conseils avisés et sympatie ne sont plus a démontrer.

seulement comme le PB avait été vu en partie préalablement par Hervé, d'ou mon titre.

Merci cependant a tout le forum pour le temps que chacun octroira a me lire.

Voici mon PB :
J'ai une macro : http://www.listebebe.com/exemple3.zip

Le but de cette macro est double.

1- pouvoir retrouver dans une listbox multi colonnes une ligne soit avec la recherche 1 (parmis la premiere colonne de la listbox) soit avec la recherche2, (parmis la deuxieme colonne de la listbox).
Les deux recherches fonctionnent.................

2 - une fois la ligne trouvée, il suffit de double-cliquer dessus pour faire apparaitre les données de la ligne dans les cellules TEXBOX.

voila le hic :
lorsque je procédait avec une seule recherche, tout le programme fonctionnait, la recherche et le double-click listbox, mais depuis que je procede a l'une ou l'autre des recherches, il y a un PB entre les recherche lorsque aprés je double clique sur la listbox, il n'apparait pas du tout la ligne selectionnée un peu comme si les deux recherches se parasitaient.

Je pense que ca vient du fait qu'il faille remplir a chaque fois les deux recherche, mais ce n'est pas le sens que je souhaitait donner a mon Programme.

Si quelqu'un a des conseils a me donner, je sui spreneur ou une correction a me proposer, j'en serai ravi.

En attendant, je vous souhaite a tous une excellente nuit et merci a vous tous
 

G.David

XLDnaute Impliqué
Re : PB pour HERVE et le forum - multi recherche avec listbox

dans un module
Public classeurDestination As Workbook
Public feuilleDestination As Worksheet

dans l'initialize
supprime les reference definissant ces deux parametre
dim classeurDestination As Workbook
dim feuilleDestination As Worksheet
chez moi ça marche
G.David
PS le tuto pour "joindre un fichier" est trés joli mais la fonction serait mieux impossible de joindre un fichier j'ai plutot l'impression que ce tuto datye de l'ancien forum?
 

Hervé

XLDnaute Barbatruc
Re : PB pour HERVE et le forum - multi recherche avec listbox

bonjour olivier, G.david

olivier, meme si je suis sur que ceci partait d'un bon sentiment, appeler un membre directement dans le nom du post ne se fait pas.

en plus, personnellement ca me fait plus fuir que ouvrir le post.

J'ai pas testé la proposition de david.

je suis repartit sur autre chose, en faite, j'ai tout refait.

j'ai essayé de simplifier ton code en regroupant des procédures communes, et en allégeant celles-ci.

dans ton fichier exemple, tes données vont jusqu'a la colonne BP, j'ai pensé que c'etait juste pour l'exemple, et je me suis limité à la colonne Z dans le code.

si mon interprétation est fausse corrige cette ligne dans l'initialize :

tablo = .Range("B3:Z" & .Range("B65536").End(xlUp).Row) 'a adapter

en remplacant z par ta derniere colonne.

le code : (attention, c'est long) :

Code:
Dim tablo
Dim cherche As Boolean

Private Sub Ident_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
cherche = True
End Sub

Private Sub NOMEMP_AP_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
cherche = True
End Sub

Private Sub UserForm_Initialize()
Dim wbactuel As Workbook
Dim wbdestination As Workbook

Application.ScreenUpdating = False
Set wbactuel = ActiveWorkbook
Workbooks.Open ("c:\fichier.xls")
Set wbdestination = ActiveWorkbook
wbactuel.Activate
Application.ScreenUpdating = True

With wbdestination.Worksheets("DEMANDES")
    tablo = .Range("B3:Z" & .Range("B65536").End(xlUp).Row) 'a adapter
End With


ListBox2.ColumnCount = UBound(tablo)
ListBox2.ColumnWidths = "40;60;60;60;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"
ListBox2.List = tablo

End Sub

Private Sub Ident_Change()
If cherche Then recherche Ident, 1, "Ident"
End Sub

Private Sub NOMEMP_AP_Change()
If cherche Then recherche NOMEMP_AP, 2, "NOMEMP_AP"
End Sub


Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim nom
Dim i As Byte

cherche = False
nom = Array("Ident", "NOMEMP_AP", "PRENOM_AP", "DN1_AP") 'a adapter

With ListBox2
    For i = 0 To UBound(nom)
        Controls(nom(i)) = .List(.ListIndex, i)
    Next i
End With
        
End Sub

Public Sub recherche(texte As String, col As Integer, nom As String)
Dim tablores()
Dim i As Integer, x As Integer
Dim j As Byte
Dim ctrl As Control

For Each ctrl In Me.Controls
    If TypeName(ctrl) = "TextBox" Then
        If ctrl.Name <> nom Then
            ctrl = ""
        End If
    End If
Next ctrl

For i = 1 To UBound(tablo)
    If Mid(tablo(i, col), 1, Len(texte)) = texte Then
        x = x + 1
        ReDim Preserve tablores(1 To UBound(tablo, 2), 1 To x)
        For j = 1 To UBound(tablo, 2)
            tablores(j, x) = tablo(i, j)
        Next j
    End If
Next i

If Not x = 0 Then
    ListBox2.Clear
    ListBox2.Column = tablores
End If
End Sub
l'utilisation de nom personnalisée pour les controles est à mon avis une mauvaise idée, car on se retrouve à devoir faire des boucles compliquées.

salut
 

kolivier

XLDnaute Occasionnel
Re : PB pour HERVE et le forum - multi recherche avec listbox

Merci beaucoup a tous et toutes mes excuses a HERVE, je n'aurai pas du, je ne le ferai plus.

Par contre j'ai un probleme dans le programme.

Ma listbox ne doit pâs afficher les colonnes les unes aprés les autres mais plutot de ce style :

Private Sub userform_initialize()
Dim wbactuel As Workbook
Dim wbdestination As Workbook

Application.ScreenUpdating = False
Set wbactuel = ActiveWorkbook
Workbooks.Open ("c:\fichier.xls")
Set wbdestination = ActiveWorkbook
wbactuel.Activate
Application.ScreenUpdating = True

With wbdestination.Worksheets("DEMANDES")
tablo = .Range("B3:B" & .Range("B65536").End(xlUp).Row) 'a adapter


For Each cel In tablo
'colonne 0
ListBox2.AddItem .Range("B" & cel.Row).Value
'colonne 1
ListBox2.list(L, 1) = .Range("C" & cel.Row).Value
'colonne 2
ListBox2.list(L, 2) = .Range("BL" & cel.Row).Value
L = L + 1
Next
End With
ListBox2.ColumnCount = 4
ListBox2.ColumnWidths = "35;80;50;0"
ListBox2.list = tablo
End Sub

j'ai essayé cette syntaxe, mais cela ne fonctionne pas.


Tout le probleme vient du fait que la troisieme colonne dans la listbox ne doit pas essentiellement etre la troisieme colonne de la feuille excel mais plutot la colonne BL de la feuille excel.

Si je peux encore vous demander cette petite aide, je vous en serai reconnaissant.

Merci a tous et encore toutes mes excuses HERVE
 
Dernière édition:

G.David

XLDnaute Impliqué
Re : PB pour HERVE et le forum - multi recherche avec listbox

Windows("fichier.xls").Activate
Sheets("DEMANDES").Select
Dim tablo1() As Variant
Dim tablo2() As Variant
Dim list As Variant
Dim i As Variant
tablo1 = Range("b3:bz" & Range("b65536").End(xlUp).Row)
'constitution du tableau la liste d'index
For i = 2 To UBound(tablo1) + 1
ReDim Preserve tablo2(2, i)
tablo2(0, i - 2) = Cells(i, 2).Value
tablo2(1, i - 2) = Cells(i, 3).Value
tablo2(2, i - 2) = Cells(i, 64).Value
Next i

With Me.ListBox2
.ColumnCount = 3
.ColumnWidths = "90;90;90"
.Column() = tablo2

End With
 

kolivier

XLDnaute Occasionnel
Re : PB pour HERVE et le forum - multi recherche avec listbox

Je suis vraiment désolés mais j'ai bossé toute la nuit et je ne comprends toujours pas pourquoi cela ne fonctionne pas.

voici un exemple avec les problemes décrits sous l'url :
http://www.listebebe.com/exemple3.zip

La triple recherche plante (recherche 1 (colonne1) ou recherche 2 (colonne2)ou recherche par combobox(colonne3))

et le double clicage sur la listbox2 ne distribue plus les infos sur les textbox.
Je précise deux choses
1 - "dans la listbox, apparait en premier colonne, la premiere colonne de la feuille DEMANDES, en deuxieme colonne, la deuxieme colonne de la feuille, MAIS en troisieme colonne doit appraitre la colonne BZ ou 64"
2 - il se peut que j'ai effacé certains bouts de codes en voulant adapter certains, j'en suis désolés, mais je n'ai plu sles yeux en face des trou.

Merci infiniment de votre secours
 

Hervé

XLDnaute Barbatruc
Re : PB pour HERVE et le forum - multi recherche avec listbox

salut oliver :)

tout d'abord, je te rassure, je ne me suis pas senti offensé.

il m'en faut plus que voir apparaitre mon prénom dans le titre d'un post d'un forum :D

bon reprenons ton souci, et asseyons d'y trouver une solution.

par l'intermediaire de ce lien, tu trouveras ton fichier corrigé :

http://cjoint.com/?hko13wjfyj

je n'ai pas compris qu'elle colonne devait etre renvoyé dans la colonne 3 de la listbox, tu parles de la colonne 64, BZ ou BL, à toi de me dire le nom de cette colonne et je corrigerais le code.

lorsque tu double clic sur ta listbox tu veux renvoyer les infos dans 4 textbox (ident, nom, prenom et apmachintruc) mais ta listbox ne contient que 3 colonnes, d'ou le bug.

dis moi quel textbox doit recevoir qu'elle colonne de la listbox?

enfin, ta combobox contient des lettres (A,B,C) ce qui doit correspondre je pense à des données se trouvant dans la 3ème colonne de la listbox, mais celle-ci ne contient que des chiffres, difficile de comprendre.

merci de nous fournir un exemple des données pouvant se trouver dans la 3ème colonne de la listbox.

en attendant de te lire, je te souhaite un bon apres midi.

salut
 

kolivier

XLDnaute Occasionnel
Re : PB pour HERVE et le forum - multi recherche avec listbox

Effectivment je n'ai plus les yeux en face des trous
Donc je vais m'appliquer a etre claire? voila mon SOUCI :

Ma listebox doit faire apparaittre 3 colonnes qui reprend les colonnes de la feuil dans fichier.xls
colonne 1 de la listbox = colonne B de la feuille
colonne 2 de la listbox = colonne C de la feuille
colonne 3 de la listbox = colonne BL de la feuille

Ensuite en double cliquant sur la listbox, je devrais avoir la ligne complete de la feuille qui remplie tous les textbox (meme si dans mon exemple je n'ai mis que 4 textbox, en réalité, je voulais que le double cliques remplisse tous les TEXBOX (soit 68 textbox)

Enfin concernant la recherche, je voulais qu'elle soit selon 3 choix possibles
soit une saisie qui recherche dans la premiere colonne de la listbox, soit une autre saisie qui recherche dans la seconde, soit un choix (combobox) qui recherche dans la troisiéme colonne.

J'ai modifié le fichier.xls car dans la colonne BL doit apparaittre les lettres ABC.
et j'ai modifié le fichier exemple3.zip en y ajoutant un autre textbox que j'aimerai voir remplir sans que la colonne apparaissent dans la listbox. Je souhaiterai qu'il n'apparaissent dans la listebox uniquement les 3 colonnes du début

http://www.listebebe.com/exemple3.zip

Merci milles fois hervé


-------------------------------------
J'ai trouvé une piste, je la test et si ca ne fonctionne pas, je reviendrais l'indiquer, sinon milles merci déja pour tous cette gentillesse HERVE
-------------------------------------
 
Dernière édition:

Hervé

XLDnaute Barbatruc
Re : PB pour HERVE et le forum - multi recherche avec listbox

re

Dans le fichier que tu trouveras en lien, j'ai essayer de coller à ta demandes.

j'ai placé quelques textbox pour faire des essais, mais pas 68, je te laisse le faire (bon courage)

j'ai aussi renommé les textbox car avec 68 controles, tu as interet à etre logique dans tes appelations (textbox1 à textbox68, me parait pas mal)

je te laisse faire les tests et me dire ce qui ne va pas.

si tu veux me renvoyer un fichier, merci de m'adresser le dernier en date avec les corrections que j'ai apporté.

http://cjoint.com/?hkqDcE3hbQ

salut
 

kolivier

XLDnaute Occasionnel
Re : PB pour HERVE et le forum - multi recherche avec listbox

Merci HERVE pour ton travail au combien précieux.

J'ai aussi fait un test de mon coté qui apparemment est presque bon, car je ne peux pas appeler les textbox de 1 a 68, ils portent tous des noms qui me permettent de les gérer avec d'autres fonctions d'une autre macro, c'est pourquoi mon fichier joint prend en compte 68 lignes, donc un peut lourd c'est évident.

Enfin, j'ai essayé de mettre des entetes a la listbox mais cela perturbe la recherche aussi?????

Merci de ton aide:

http://www.listebebe.com/exemple3.zip


PS : le probleme des recherches est résolu en fait il faut que je force toutes les celulles (meme si il ne suffit d'en forcer qu'une seule pour la recherche, c'est mieux pour moi que toutes les cellules de la macro soient forcées en majuscule, je ne pense pas que les cellules numerique ou DATE seront génées) de ma macro en majuscule car avec des minuscules la recherche n'aboutie pas.
Quelle est la bonne syntaxe dans userform_initialize pour forcer les toutes cellules de la macro avec UCASE ?

sinon je rajouterai simplement : Me!NOMDELACELULE = UCase(Me!NOMDELACELULE)
pour chaque cellule


Enfin MON DERNIER VRAI SOUCI EST que les ententes de ma listbox perturbent la recherche.
Je souhaiterai mettre une entete sur chacune des colonnes de la listbox mais cela brouille la recherche!!!

MERCI infiniment de tout ce temps que tu m'as accordé.
 
Dernière édition:

Hervé

XLDnaute Barbatruc
Re : PB pour HERVE et le forum - multi recherche avec listbox

bonjour olivier

Franchement, je me demande pourquoi je m'ennui à faire des codes en rationnalisant les procedures et en recherchant toujours plus de vitesse,

La procédure que je t'avais donné permettait de gérer 68 colonnes sans avoir des codes de 3km, on ajoutait simplement un champ ligne permettant de retrouver rapidement la ligne sélectionnée, et voilà ce que je vois dans ton dernier fichier :

Code:
For i = 1 To UBound(tablo)
tablopourlistebox(i, 1) = tablo(i, 1)
tablopourlistebox(i, 2) = tablo(i, 2)
tablopourlistebox(i, 3) = tablo(i, 63)
tablopourlistebox(i, 4) = tablo(i, 3)
tablopourlistebox(i, 5) = tablo(i, 4)
tablopourlistebox(i, 6) = tablo(i, 5)
tablopourlistebox(i, 7) = tablo(i, 6)
tablopourlistebox(i, 8) = tablo(i, 7)
tablopourlistebox(i, 9) = tablo(i, 8)
tablopourlistebox(i, 10) = tablo(i, 9)
tablopourlistebox(i, 11) = tablo(i, 10)
tablopourlistebox(i, 12) = tablo(i, 11)
tablopourlistebox(i, 13) = tablo(i, 12)
tablopourlistebox(i, 14) = tablo(i, 13)
tablopourlistebox(i, 15) = tablo(i, 14)
tablopourlistebox(i, 16) = tablo(i, 15)
tablopourlistebox(i, 17) = tablo(i, 16)
tablopourlistebox(i, 18) = tablo(i, 17)
tablopourlistebox(i, 19) = tablo(i, 18)
tablopourlistebox(i, 20) = tablo(i, 19)
tablopourlistebox(i, 21) = tablo(i, 20)
tablopourlistebox(i, 22) = tablo(i, 21)
tablopourlistebox(i, 23) = tablo(i, 22)
tablopourlistebox(i, 24) = tablo(i, 23)
tablopourlistebox(i, 25) = tablo(i, 24)
tablopourlistebox(i, 26) = tablo(i, 25)
tablopourlistebox(i, 27) = tablo(i, 26)
tablopourlistebox(i, 28) = tablo(i, 27)
tablopourlistebox(i, 29) = tablo(i, 28)
tablopourlistebox(i, 30) = tablo(i, 29)
tablopourlistebox(i, 31) = tablo(i, 30)
tablopourlistebox(i, 32) = tablo(i, 31)
tablopourlistebox(i, 33) = tablo(i, 32)
tablopourlistebox(i, 34) = tablo(i, 33)
tablopourlistebox(i, 35) = tablo(i, 34)
tablopourlistebox(i, 36) = tablo(i, 35)
tablopourlistebox(i, 37) = tablo(i, 36)
tablopourlistebox(i, 38) = tablo(i, 37)
tablopourlistebox(i, 39) = tablo(i, 38)
tablopourlistebox(i, 40) = tablo(i, 39)
tablopourlistebox(i, 41) = tablo(i, 40)
tablopourlistebox(i, 42) = tablo(i, 41)
tablopourlistebox(i, 43) = tablo(i, 42)
tablopourlistebox(i, 44) = tablo(i, 43)
tablopourlistebox(i, 45) = tablo(i, 44)
tablopourlistebox(i, 46) = tablo(i, 45)
tablopourlistebox(i, 47) = tablo(i, 46)
tablopourlistebox(i, 48) = tablo(i, 47)
tablopourlistebox(i, 49) = tablo(i, 48)
tablopourlistebox(i, 50) = tablo(i, 49)
tablopourlistebox(i, 51) = tablo(i, 50)
tablopourlistebox(i, 52) = tablo(i, 51)
tablopourlistebox(i, 53) = tablo(i, 52)
tablopourlistebox(i, 54) = tablo(i, 53)
tablopourlistebox(i, 55) = tablo(i, 54)
tablopourlistebox(i, 56) = tablo(i, 55)
tablopourlistebox(i, 57) = tablo(i, 56)
tablopourlistebox(i, 58) = tablo(i, 57)
tablopourlistebox(i, 59) = tablo(i, 58)
tablopourlistebox(i, 60) = tablo(i, 59)
tablopourlistebox(i, 61) = tablo(i, 60)
tablopourlistebox(i, 62) = tablo(i, 61)
tablopourlistebox(i, 63) = tablo(i, 62)
tablopourlistebox(i, 64) = tablo(i, 64)
tablopourlistebox(i, 65) = tablo(i, 65)
tablopourlistebox(i, 66) = tablo(i, 66)
tablopourlistebox(i, 67) = tablo(i, 67)
Next i

pour les majuscules, il existe les modules de classes permettant de gérer d'une maniere globale les evenements d'un controle.

mais si tu as renommée tes textbox, cela devient presque impossible (a moins de sortir l'artillerie lourde)

donc tu es bon pour faire 68 macros.

Pour les entetes de ta listbox, tu ne peux pas utiliser la propriété columnheads, celle ci ne fonctionne qu'avec la propriété rowsource (autre méthode d'initialisation d'une listbox).

la méthode classique dans ces cas là, est de rajouter des labels au dessus des colonne de ta listbox.

salut :)
 

kolivier

XLDnaute Occasionnel
Re : PB pour HERVE et le forum - multi recherche avec listbox

effectivement je n'avais pas pensé au labels, mais je vais tenter un autre truc quand meme.

Par contre pour ta simplification, je comprends ta stupeur, mais j'ai un PB de taille qui m'a obligé a faire une usine a gaz, je ne peux pas appeler mes textbox : textbox1, textbox2, etc.....

Tous mes texbox ont un nom bien précis, donc la formule textbox(i) ne pouvait pas fonctionner.

Désolés, mais en tout cas milles merci a toi pour tout ton temps, bonne journée et au plaisir un jour de pouvoir te rendre l'appareil.
 

Hervé

XLDnaute Barbatruc
Re : PB pour HERVE et le forum - multi recherche avec listbox

re olivier :)


la simplification que je t'avais proposé ne faisait pas intervenir les textbox :confused:

tu pouvais donc l'utiliser en parallèle de ton code de remplissage de tes textboxs.

salut
 

kolivier

XLDnaute Occasionnel
PB multi recherche avec listbox

ben non justement ce n'était pas possible a cause de ça :

Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer
cherche = False
For i = 1 To 14
Controls("textbox" & i) = tablo(ListBox2.list(ListBox2.ListIndex, 3), i)
Next i
End Sub


Cet bout de code indique bien qqu'au cout de doubleclick, toutes les textbox, dont le nom est composé de textbox & i, ou i est compris en 1 et 14 mais mes textbox ne s'appellent pas textbox1, textbox2, etc.....
ils s'appelle NOEMP, PRENOMEMP, etc...

voici un nouvel exemple avec les divers PB repetitif si je prend un code plutot qu'un autre.

http://www.listebebe.com/exemple3.zip

si je saisie une lettre dans la premiére recherche, il trouve bien le nom mais si je double click dessus il plante, la recerche par combobox ne fonctionne pas non plus.

Merci de ta patience
 
Dernière édition:

Discussions similaires

Réponses
18
Affichages
1 K

Statistiques des forums

Discussions
314 644
Messages
2 111 528
Membres
111 189
dernier inscrit
Laurent.