ListBox multi colonnes discontinues

Le
Péhemme
Bonjour à tous,

(W7 + Excel 2010)
J’ai une base de données sur une feuille Excel.
Aux fins de recherches, sur cette même feuille, j’ai une TextBox et une
ListBox.
Lorsque j’entre les premières lettres d’un nom dans la TextBox, la ListBox
se remplit de la liste des noms commençant par ces lettres (fortement
inspiré du site de Jacques Boisgontier).
Lors de la sélection du nom recherché (click sur le nom dans la ListBox) le
curseur se positionne sur celui-ci dans la base de données.
Seules les informations de la colonne A sont uniques, c’est donc cette
information qui est récupérée.
Tout fonctionne parfaitement bien.
Cependant, ma ListBox comporte 5 colonnes dont seulement 3 (voire 2 si la
combinaison du nom et prénom peut être une clé unique qui me permettrait de
me positionner sur le nom cliqué) me sont utiles.
La question (double) :
. Comment puis-je alimenter ma ListBox avec seulement les éléments des
colonnes A, D et E ?
ou :
. Comment créer et surtout exploiter une clé (nom+prénom) pour
positionnement du curseur ?
Dans ce dernier cas, on n’utiliserait que les colonnes D et E.

Pour une meilleure compréhension vous trouverez un fichier exemple édulcoré
sur :
http://www.cjoint.com/c/FJlpYNBXgCP
Ce fichier est en .xlsm

Tous avis, critiques et commentaires sont les bienvenus.
Merci d’avance de vos conseils.
Michel
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #26412748
bonjour Michel,
je ne sais pas si tu avais l'intention d'ajouter un 2ème textbox pour le prénom...
http://www.cjoint.com/c/FJnpKHr8u3a
Sub Test()
Dim n As Long, ncol As Long, k As Long, i As Long
Dim Sh As Worksheet, BdD(), Clé
Dim R As Long
ListBox1.Clear
Set Sh = Sheets("Plusieurs_Colonnes")
R = Range("D" & Rows.Count).End(xlUp).Row
BdD = Sh.Range("D11:E" & R).Value
With ListBox1
.ColumnCount = 2
.ColumnWidths = "100;75"
' .List = BdD
End With
Clé1 = UCase(TextBox1) & "*"
Dim Tbl1()
Dim Tbl2()
n = 0
ncol = 2
For i = LBound(BdD) To UBound(BdD)
If UCase(BdD(i, 1)) Like Clé1 Then
n = n + 1
ReDim Preserve Tbl1(1 To 2, 1 To n)
For k = 1 To ncol
Tbl1(k, n) = BdD(i, k)
Next
End If
Next i
ListBox1.List = Application.Transpose(Tbl1)
Clé2 = UCase(TextBox2) & "*"
For i = 1 To n
If UCase(Tbl1(2, i)) Like Clé2 Then
m = m + 1
ReDim Preserve Tbl2(1 To 2, 1 To n)
For k = 1 To 2
Tbl2(k, m) = Tbl1(k, i)
Next
End If
Next i
If n > 0 Then
ReDim Preserve Tbl2(1 To 2, 1 To n + 1)
ListBox1.List = Application.Transpose(Tbl2)
ListBox1.RemoveItem n
End If
End Sub
isabelle
Le 2016-10-11 à 11:56, Péhemme a écrit :
Bonjour à tous,
(W7 + Excel 2010)
J’ai une base de données sur une feuille Excel.
Aux fins de recherches, sur cette même feuille, j’ai une TextBox et une ListBox.
Lorsque j’entre les premières lettres d’un nom dans la TextBox, la ListBox se
remplit de la liste des noms commençant par ces lettres (fortement inspiré du
site de Jacques Boisgontier).
Lors de la sélection du nom recherché (click sur le nom dans la ListBox) le
curseur se positionne sur celui-ci dans la base de données.
Seules les informations de la colonne A sont uniques, c’est donc cette
information qui est récupérée.
Tout fonctionne parfaitement bien.
Cependant, ma ListBox comporte 5 colonnes dont seulement 3 (voire 2 si la
combinaison du nom et prénom peut être une clé unique qui me permettrait de me
positionner sur le nom cliqué) me sont utiles.
La question (double) :
. Comment puis-je alimenter ma ListBox avec seulement les éléments des colonnes
A, D et E ?
ou :
. Comment créer et surtout exploiter une clé (nom+prénom) pour positionnement du
curseur ?
Dans ce dernier cas, on n’utiliserait que les colonnes D et E.
Pour une meilleure compréhension vous trouverez un fichier exemple édulcoré sur :
http://www.cjoint.com/c/FJlpYNBXgCP
Ce fichier est en .xlsm
Tous avis, critiques et commentaires sont les bienvenus.
Merci d’avance de vos conseils.
Michel
Péhemme
Le #26412770
Bonsoir Isabelle,
Merci de t'être penchée sur ma question.
J'ai chargé ton fichier que, pardonne-moi, je ne regarderai que demain.
Je me précipite sur mon poste de TV afin de voir le débat des candidats à la
primaire des Républicains (information politique oblige :-) ... Les
présidentielles : l'année prochaine... )
Je reviens vers toi
Bien amicalement
Michel
"isabelle" a écrit dans le message de groupe de discussion :
nto9mp$17e2$
bonjour Michel,
je ne sais pas si tu avais l'intention d'ajouter un 2ème textbox pour le
prénom...
http://www.cjoint.com/c/FJnpKHr8u3a
Sub Test()
Dim n As Long, ncol As Long, k As Long, i As Long
Dim Sh As Worksheet, BdD(), Clé
Dim R As Long
ListBox1.Clear
Set Sh = Sheets("Plusieurs_Colonnes")
R = Range("D" & Rows.Count).End(xlUp).Row
BdD = Sh.Range("D11:E" & R).Value
With ListBox1
.ColumnCount = 2
.ColumnWidths = "100;75"
' .List = BdD
End With
Clé1 = UCase(TextBox1) & "*"
Dim Tbl1()
Dim Tbl2()
n = 0
ncol = 2
For i = LBound(BdD) To UBound(BdD)
If UCase(BdD(i, 1)) Like Clé1 Then
n = n + 1
ReDim Preserve Tbl1(1 To 2, 1 To n)
For k = 1 To ncol
Tbl1(k, n) = BdD(i, k)
Next
End If
Next i
ListBox1.List = Application.Transpose(Tbl1)
Clé2 = UCase(TextBox2) & "*"
For i = 1 To n
If UCase(Tbl1(2, i)) Like Clé2 Then
m = m + 1
ReDim Preserve Tbl2(1 To 2, 1 To n)
For k = 1 To 2
Tbl2(k, m) = Tbl1(k, i)
Next
End If
Next i
If n > 0 Then
ReDim Preserve Tbl2(1 To 2, 1 To n + 1)
ListBox1.List = Application.Transpose(Tbl2)
ListBox1.RemoveItem n
End If
End Sub
isabelle
Le 2016-10-11 à 11:56, Péhemme a écrit :
Bonjour à tous,
(W7 + Excel 2010)
J’ai une base de données sur une feuille Excel.
Aux fins de recherches, sur cette même feuille, j’ai une TextBox et une
ListBox.
Lorsque j’entre les premières lettres d’un nom dans la TextBox, la ListBox
se
remplit de la liste des noms commençant par ces lettres (fortement inspiré
du
site de Jacques Boisgontier).
Lors de la sélection du nom recherché (click sur le nom dans la ListBox)
le
curseur se positionne sur celui-ci dans la base de données.
Seules les informations de la colonne A sont uniques, c’est donc cette
information qui est récupérée.
Tout fonctionne parfaitement bien.
Cependant, ma ListBox comporte 5 colonnes dont seulement 3 (voire 2 si la
combinaison du nom et prénom peut être une clé unique qui me permettrait
de me
positionner sur le nom cliqué) me sont utiles.
La question (double) :
. Comment puis-je alimenter ma ListBox avec seulement les éléments des
colonnes
A, D et E ?
ou :
. Comment créer et surtout exploiter une clé (nom+prénom) pour
positionnement du
curseur ?
Dans ce dernier cas, on n’utiliserait que les colonnes D et E.
Pour une meilleure compréhension vous trouverez un fichier exemple
édulcoré sur :
http://www.cjoint.com/c/FJlpYNBXgCP
Ce fichier est en .xlsm
Tous avis, critiques et commentaires sont les bienvenus.
Merci d’avance de vos conseils.
Michel
Péhemme
Le #26412888
Merci Isabelle de ta proposition.
Je n'envisageais pas la création d'une nouvelle TextBox.
Ma difficulté est de récupérer l'information (clé unique) de la ListBox afin
de me positionner sur le nom (ou plus précisément sur une colonne de la même
ligne).
Je n'ai que peu de cas où l'information du prénom est nécessaire.
Je vais donc conserver ma présentation actuelle, au pire, je modifierai la
présentation de ma base de données (et donc des macros du UserForm qui me
permet de la gérer) afin de ne présenter que 3 colonnes dans la ListBox.
Merci encore de tes aides et suggestions.
Bien amicalement
Michel

"isabelle" a écrit dans le message de groupe de discussion :
nto9mp$17e2$
bonjour Michel,
je ne sais pas si tu avais l'intention d'ajouter un 2ème textbox pour le
prénom...
http://www.cjoint.com/c/FJnpKHr8u3a
Sub Test()
Dim n As Long, ncol As Long, k As Long, i As Long
Dim Sh As Worksheet, BdD(), Clé
Dim R As Long
ListBox1.Clear
Set Sh = Sheets("Plusieurs_Colonnes")
R = Range("D" & Rows.Count).End(xlUp).Row
BdD = Sh.Range("D11:E" & R).Value
With ListBox1
.ColumnCount = 2
.ColumnWidths = "100;75"
' .List = BdD
End With
Clé1 = UCase(TextBox1) & "*"
Dim Tbl1()
Dim Tbl2()
n = 0
ncol = 2
For i = LBound(BdD) To UBound(BdD)
If UCase(BdD(i, 1)) Like Clé1 Then
n = n + 1
ReDim Preserve Tbl1(1 To 2, 1 To n)
For k = 1 To ncol
Tbl1(k, n) = BdD(i, k)
Next
End If
Next i
ListBox1.List = Application.Transpose(Tbl1)
Clé2 = UCase(TextBox2) & "*"
For i = 1 To n
If UCase(Tbl1(2, i)) Like Clé2 Then
m = m + 1
ReDim Preserve Tbl2(1 To 2, 1 To n)
For k = 1 To 2
Tbl2(k, m) = Tbl1(k, i)
Next
End If
Next i
If n > 0 Then
ReDim Preserve Tbl2(1 To 2, 1 To n + 1)
ListBox1.List = Application.Transpose(Tbl2)
ListBox1.RemoveItem n
End If
End Sub
isabelle
Le 2016-10-11 à 11:56, Péhemme a écrit :
Bonjour à tous,
(W7 + Excel 2010)
J’ai une base de données sur une feuille Excel.
Aux fins de recherches, sur cette même feuille, j’ai une TextBox et une
ListBox.
Lorsque j’entre les premières lettres d’un nom dans la TextBox, la ListBox
se
remplit de la liste des noms commençant par ces lettres (fortement inspiré
du
site de Jacques Boisgontier).
Lors de la sélection du nom recherché (click sur le nom dans la ListBox)
le
curseur se positionne sur celui-ci dans la base de données.
Seules les informations de la colonne A sont uniques, c’est donc cette
information qui est récupérée.
Tout fonctionne parfaitement bien.
Cependant, ma ListBox comporte 5 colonnes dont seulement 3 (voire 2 si la
combinaison du nom et prénom peut être une clé unique qui me permettrait
de me
positionner sur le nom cliqué) me sont utiles.
La question (double) :
. Comment puis-je alimenter ma ListBox avec seulement les éléments des
colonnes
A, D et E ?
ou :
. Comment créer et surtout exploiter une clé (nom+prénom) pour
positionnement du
curseur ?
Dans ce dernier cas, on n’utiliserait que les colonnes D et E.
Pour une meilleure compréhension vous trouverez un fichier exemple
édulcoré sur :
http://www.cjoint.com/c/FJlpYNBXgCP
Ce fichier est en .xlsm
Tous avis, critiques et commentaires sont les bienvenus.
Merci d’avance de vos conseils.
Michel
isabelle
Le #26412938
bonjour Michel,
pour récupérer le numero de ligne (dans la base de données) du nom et prenom (sélectionner dans le ListBox)
nom = ListBox1.List(ListBox1.ListIndex, 0)
prenom = ListBox1.List(ListBox1.ListIndex, 1)
match_formula = "=MATCH(""" & nom & """&""" & prenom & """, $D:$D&$E:$E , 0)"
rw = Evaluate(match_formula)
il faut juste modifier le numéro 0 et 1 sur les lignes
nom = ListBox1.List(ListBox1.ListIndex, 0)
prenom = ListBox1.List(ListBox1.ListIndex, 1)
pour l'adapter au résultat de ton ListBox
1er colonne du ListBox = 0
isabelle
Le 2016-10-15 à 03:26, Péhemme a écrit :> Ma difficulté est de récupérer l'information (clé unique) de la ListBox a fin de
me positionner sur le nom (ou plus précisément sur une colonne de la même ligne).
Péhemme
Le #26413018
Merci Isabelle,
En conservant la structure du fichier publié afin de d'observer le
fonctionnement de ta proposition, j'ai adapté ta macro de cette façon :
Sub TestIsabelle()
Dim Nom As Variant, Prénom As Variant
Dim Match_Formula, Rw
Nom = ListBox1.List(ListBox1.ListIndex, 3)
Prénom = ListBox1.List(ListBox1.ListIndex, 4)
Match_Formula = "=Match(""" & Nom & """ & """ & Prénom & """,$D$D &
$E$E,0)"
Rw = Evaluate(Match_Formula)
End Sub
Les variables Nom et Prénom récupèrent bien les valeurs recherchées.
Match_Formula me renvoie bien la formule de recherche, cependant, Rw me
renvoie :
"Erreur 2015".
Qu'ai-je mal transcrit ?
Merci d'avance de ton aide
Bien amicalement
Michel
"isabelle" a écrit dans le message de groupe de discussion :

bonjour Michel,
pour récupérer le numero de ligne (dans la base de données) du nom et prenom
(sélectionner dans le ListBox)
nom = ListBox1.List(ListBox1.ListIndex, 0)
prenom = ListBox1.List(ListBox1.ListIndex, 1)
match_formula = "=MATCH(""" & nom & """&""" & prenom & """, $D:$D&$E:$E, 0)"
rw = Evaluate(match_formula)
il faut juste modifier le numéro 0 et 1 sur les lignes
nom = ListBox1.List(ListBox1.ListIndex, 0)
prenom = ListBox1.List(ListBox1.ListIndex, 1)
pour l'adapter au résultat de ton ListBox
1er colonne du ListBox = 0
isabelle
isabelle
Le #26413037
bonjour Michel,
j'ai refais le test avec le fichier original et tous fonctionne bien,
peut tu essayer,
http://www.cjoint.com/c/FJqpoqc1Mca
isabelle
Le 2016-10-16 à 05:22, Péhemme a écrit :
Les variables Nom et Prénom récupèrent bien les valeurs recherchées.
Match_Formula me renvoie bien la formule de recherche, cependant, Rw me renvoie :
"Erreur 2015".
Péhemme
Le #26413040
Ahrrr !...
Isabelle, je suis un sot ; j'irai mourir dans le cachot XFD 1048576 (Excel
2010 oblige).
Dans "=Match..." j'ai en effet écrit :
$D$D&$E$E...
au lieu de :
$D:$D&$E:$E...
À quoi cela tient ?... On est peu de chose.
:-)
Merci Isabelle, tu es égale à toi-même, càd Formidable !
Bises à la Geôlière
Michel

"isabelle" a écrit dans le message de groupe de discussion :
nu05jl$dsb$
bonjour Michel,
j'ai refais le test avec le fichier original et tous fonctionne bien,
peut tu essayer,
http://www.cjoint.com/c/FJqpoqc1Mca
isabelle
Le 2016-10-16 à 05:22, Péhemme a écrit :
Les variables Nom et Prénom récupèrent bien les valeurs recherchées.
Match_Formula me renvoie bien la formule de recherche, cependant, Rw me
renvoie :
"Erreur 2015".
isabelle
Le #26413054
idem moi moi, j'avais beau regarder les 2 codes et je ne voyais pas la
différence %-)
disons que le souper d'hier a été bien arrosé et que je n'ai pas les yeux très
clair ce matin ;-)
isabelle
Le 2016-10-16 à 12:14, Péhemme a écrit :
Ahrrr !...
Isabelle, je suis un sot ; j'irai mourir dans le cachot XFD 1048576 (Excel 2010
oblige).
Dans "=Match..." j'ai en effet écrit :
$D$D&$E$E...
au lieu de :
$D:$D&$E:$E...
À quoi cela tient ?... On est peu de chose.
:-)
Merci Isabelle, tu es égale à toi-même, càd Formidable !
Bises à la Geôlière
Michel

"isabelle" a écrit dans le message de groupe de discussion :
nu05jl$dsb$
bonjour Michel,
j'ai refais le test avec le fichier original et tous fonctionne bien,
peut tu essayer,
http://www.cjoint.com/c/FJqpoqc1Mca
isabelle
Le 2016-10-16 à 05:22, Péhemme a écrit :
Les variables Nom et Prénom récupèrent bien les valeurs recherchées.
Match_Formula me renvoie bien la formule de recherche, cependant, Rw me
renvoie :
"Erreur 2015".

Jacquouille
Le #26413072
Hé hé, Isabelle
In vino veritas ....
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"isabelle" a écrit dans le message de groupe de discussion :
nu0egc$te9$
idem moi moi, j'avais beau regarder les 2 codes et je ne voyais pas la
différence %-)
disons que le souper d'hier a été bien arrosé et que je n'ai pas les yeux
très
clair ce matin ;-)
isabelle
Le 2016-10-16 à 12:14, Péhemme a écrit :
Ahrrr !...
Isabelle, je suis un sot ; j'irai mourir dans le cachot XFD 1048576 (Excel
2010
oblige).
Dans "=Match..." j'ai en effet écrit :
$D$D&$E$E...
au lieu de :
$D:$D&$E:$E...
À quoi cela tient ?... On est peu de chose.
:-)
Merci Isabelle, tu es égale à toi-même, càd Formidable !
Bises à la Geôlière
Michel

"isabelle" a écrit dans le message de groupe de discussion :
nu05jl$dsb$
bonjour Michel,
j'ai refais le test avec le fichier original et tous fonctionne bien,
peut tu essayer,
http://www.cjoint.com/c/FJqpoqc1Mca
isabelle
Le 2016-10-16 à 05:22, Péhemme a écrit :
Les variables Nom et Prénom récupèrent bien les valeurs recherchées.
Match_Formula me renvoie bien la formule de recherche, cependant, Rw me
renvoie :
"Erreur 2015".



---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Péhemme
Le #26413119
:-)
Merci en tout cas de ta gentillesse.
Profite bien de la vie.
Bises
Michel
"isabelle" a écrit dans le message de groupe de discussion :
nu0egc$te9$
idem moi moi, j'avais beau regarder les 2 codes et je ne voyais pas la
différence %-)
disons que le souper d'hier a été bien arrosé et que je n'ai pas les yeux
très
clair ce matin ;-)
isabelle
Le 2016-10-16 à 12:14, Péhemme a écrit :
Ahrrr !...
Isabelle, je suis un sot ; j'irai mourir dans le cachot XFD 1048576 (Excel
2010
oblige).
Dans "=Match..." j'ai en effet écrit :
$D$D&$E$E...
au lieu de :
$D:$D&$E:$E...
À quoi cela tient ?... On est peu de chose.
:-)
Merci Isabelle, tu es égale à toi-même, càd Formidable !
Bises à la Geôlière
Michel

"isabelle" a écrit dans le message de groupe de discussion :
nu05jl$dsb$
bonjour Michel,
j'ai refais le test avec le fichier original et tous fonctionne bien,
peut tu essayer,
http://www.cjoint.com/c/FJqpoqc1Mca
isabelle
Le 2016-10-16 à 05:22, Péhemme a écrit :
Les variables Nom et Prénom récupèrent bien les valeurs recherchées.
Match_Formula me renvoie bien la formule de recherche, cependant, Rw me
renvoie :
"Erreur 2015".

Publicité
Poster une réponse
Anonyme