OVH Cloud OVH Cloud

Boite de dialogue et longue liste

8 réponses
Avatar
MIKE
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et faire
dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue, dans la
quelle, en entrant les premières lettres du nom de l'article j'obtiendrai
l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE

8 réponses

Avatar
SL
Bonjour Mike

Tes articles sont-ils dans l'ordre alphabétique ou en désordre ?
Y a t-il des vides, des doublons dans la listes ?

Stéphane

"MIKE" a écrit dans le message de news:
42ca9daa$0$25013$
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et faire
dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue, dans
la
quelle, en entrant les premières lettres du nom de l'article j'obtiendrai
l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE





Avatar
Hervé
Bonsoir Mike,
En utilisant la cellule A1 comme zone de texte pour la recherche, un tableau
est rempli avec la référence des cellules correspondant au critère de
recherche. Installe un bouton issus de la barre d'outils "Formulaires" et
affecte lui la macro "Selectionner" (elle sera précédée du nom de la feuille
où elle se trouve) après la recherche, tu cliques sur le bouton pour
selectionner les cellules les unes après les autres. La recheche est
effectuée une fois la valeur en A1 validée (touche Entrée, tabulation,
etc.).
A mettre dans le module de ta feuille :

Dim TblCel() As Range '(doit être en tête de module)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
Dim I As Integer
Dim Adresse As String
'vide le tableau
Erase TblCel
'si A1
If Not Intersect(Target, [A1]) Is Nothing Then
'plage de recherche en colonne A
'à partir de A3
Set Plage = Range([A3], [A65536].End(3))
'la recherche est faite à partir
'des premiers caractères
Set Cel = Plage.Find([A1] & "*", [A3], xlValues)
If Not Cel Is Nothing Then
Adresse = Cel.Address
Do
'stocke la référence de la cellule
'dans le tableau
I = I + 1
ReDim Preserve TblCel(1 To I)
Set TblCel(I) = Cel
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
Else
MsgBox "Mot non trouvé !"
End If

End If

Set Cel = Nothing
Set Plage = Nothing
End Sub

Sub Selectionner()
Static J As Integer
'évite l'erreur du tableau
'non initialisé
On Error Resume Next
If J >= UBound(TblCel) Then J = 0
J = J + 1
TblCel(J).Select
End Sub

Hervé.

"MIKE" a écrit dans le message news:
42ca9daa$0$25013$
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et faire
dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue, dans
la

quelle, en entrant les premières lettres du nom de l'article j'obtiendrai
l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE





Avatar
Hervé
Petite précision,
En mettant ton bouton à coté de A1, tu peux figer les volets. Tu
dimensionnes la ligne 1 à ton bouton, ou le contraire, tu sélectionne A2 et
puis Fenêtres|Figer les volets. De ctte façon, quand les cellules du bas de
ta liste seront sélectionnées ton bouton sera toujours visible.

Hervé.

"Hervé" a écrit dans le message news:

Bonsoir Mike,
En utilisant la cellule A1 comme zone de texte pour la recherche, un
tableau

est rempli avec la référence des cellules correspondant au critère de
recherche. Installe un bouton issus de la barre d'outils "Formulaires" et
affecte lui la macro "Selectionner" (elle sera précédée du nom de la
feuille

où elle se trouve) après la recherche, tu cliques sur le bouton pour
selectionner les cellules les unes après les autres. La recheche est
effectuée une fois la valeur en A1 validée (touche Entrée, tabulation,
etc.).
A mettre dans le module de ta feuille :

Dim TblCel() As Range '(doit être en tête de module)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
Dim I As Integer
Dim Adresse As String
'vide le tableau
Erase TblCel
'si A1
If Not Intersect(Target, [A1]) Is Nothing Then
'plage de recherche en colonne A
'à partir de A3
Set Plage = Range([A3], [A65536].End(3))
'la recherche est faite à partir
'des premiers caractères
Set Cel = Plage.Find([A1] & "*", [A3], xlValues)
If Not Cel Is Nothing Then
Adresse = Cel.Address
Do
'stocke la référence de la cellule
'dans le tableau
I = I + 1
ReDim Preserve TblCel(1 To I)
Set TblCel(I) = Cel
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
Else
MsgBox "Mot non trouvé !"
End If

End If

Set Cel = Nothing
Set Plage = Nothing
End Sub

Sub Selectionner()
Static J As Integer
'évite l'erreur du tableau
'non initialisé
On Error Resume Next
If J >= UBound(TblCel) Then J = 0
J = J + 1
TblCel(J).Select
End Sub

Hervé.

"MIKE" a écrit dans le message news:
42ca9daa$0$25013$
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et
faire


dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue,
dans


la
quelle, en entrant les premières lettres du nom de l'article
j'obtiendrai


l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE









Avatar
MIKE
Bonjour Stéphane
Merci de regarder mon problème
Mes articles sont dans l'ordre alpha, il n'y a pas de vides

Slts
Mike


"SL" a écrit dans le message de news:

Bonjour Mike

Tes articles sont-ils dans l'ordre alphabétique ou en désordre ?
Y a t-il des vides, des doublons dans la listes ?

Stéphane

"MIKE" a écrit dans le message de news:
42ca9daa$0$25013$
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et
faire
dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue, dans
la
quelle, en entrant les premières lettres du nom de l'article j'obtiendrai
l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE









Avatar
MIKE
Bonjour HERVE

Merci pour ta solution
Je vais la mettre en oeuvre et te tiens au courant
Salutations
MIKE


"Hervé" a écrit dans le message de news:
Or%
Petite précision,
En mettant ton bouton à coté de A1, tu peux figer les volets. Tu
dimensionnes la ligne 1 à ton bouton, ou le contraire, tu sélectionne A2
et
puis Fenêtres|Figer les volets. De ctte façon, quand les cellules du bas
de
ta liste seront sélectionnées ton bouton sera toujours visible.

Hervé.

"Hervé" a écrit dans le message news:

Bonsoir Mike,
En utilisant la cellule A1 comme zone de texte pour la recherche, un
tableau

est rempli avec la référence des cellules correspondant au critère de
recherche. Installe un bouton issus de la barre d'outils "Formulaires" et
affecte lui la macro "Selectionner" (elle sera précédée du nom de la
feuille

où elle se trouve) après la recherche, tu cliques sur le bouton pour
selectionner les cellules les unes après les autres. La recheche est
effectuée une fois la valeur en A1 validée (touche Entrée, tabulation,
etc.).
A mettre dans le module de ta feuille :

Dim TblCel() As Range '(doit être en tête de module)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
Dim I As Integer
Dim Adresse As String
'vide le tableau
Erase TblCel
'si A1
If Not Intersect(Target, [A1]) Is Nothing Then
'plage de recherche en colonne A
'à partir de A3
Set Plage = Range([A3], [A65536].End(3))
'la recherche est faite à partir
'des premiers caractères
Set Cel = Plage.Find([A1] & "*", [A3], xlValues)
If Not Cel Is Nothing Then
Adresse = Cel.Address
Do
'stocke la référence de la cellule
'dans le tableau
I = I + 1
ReDim Preserve TblCel(1 To I)
Set TblCel(I) = Cel
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
Else
MsgBox "Mot non trouvé !"
End If

End If

Set Cel = Nothing
Set Plage = Nothing
End Sub

Sub Selectionner()
Static J As Integer
'évite l'erreur du tableau
'non initialisé
On Error Resume Next
If J >= UBound(TblCel) Then J = 0
J = J + 1
TblCel(J).Select
End Sub

Hervé.

"MIKE" a écrit dans le message news:
42ca9daa$0$25013$
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et
faire


dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue,
dans


la
quelle, en entrant les premières lettres du nom de l'article
j'obtiendrai


l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE













Avatar
SL
Bonjour

En reprenant une réponse que j'ai donnée à une problème similaire il y a une
semaine :
Nomme "liste" ta plage d'article.
En A1 : taper la ou les premières lettres de ce que tu cherches,
en B1 Données/validation/liste
ÞCALER(liste;EQUIV(A1;GAUCHE(liste;NBCAR(A1));0)-1;0;EQUIV(A1;GAUCHE(liste;NBCAR(A1));1)+1-EQUIV(A1;GAUCHE(liste;NBCAR(A1));0);1)

Ensuite une combinaison index(..equiv()) ou un recherchev te donnera la
totalité de la ligne cherchée.

ça marche ?

Stéphane

"MIKE" a écrit dans le message de news:
42cb7c1f$0$6388$
Bonjour Stéphane
Merci de regarder mon problème
Mes articles sont dans l'ordre alpha, il n'y a pas de vides

Slts
Mike


"SL" a écrit dans le message de news:

Bonjour Mike

Tes articles sont-ils dans l'ordre alphabétique ou en désordre ?
Y a t-il des vides, des doublons dans la listes ?

Stéphane

"MIKE" a écrit dans le message de news:
42ca9daa$0$25013$
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et
faire
dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue,
dans la
quelle, en entrant les premières lettres du nom de l'article
j'obtiendrai
l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE













Avatar
MIKE
Merci HERVE
Ca marche Génial
Mike


"Hervé" a écrit dans le message de news:

Bonsoir Mike,
En utilisant la cellule A1 comme zone de texte pour la recherche, un
tableau
est rempli avec la référence des cellules correspondant au critère de
recherche. Installe un bouton issus de la barre d'outils "Formulaires" et
affecte lui la macro "Selectionner" (elle sera précédée du nom de la
feuille
où elle se trouve) après la recherche, tu cliques sur le bouton pour
selectionner les cellules les unes après les autres. La recheche est
effectuée une fois la valeur en A1 validée (touche Entrée, tabulation,
etc.).
A mettre dans le module de ta feuille :

Dim TblCel() As Range '(doit être en tête de module)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
Dim I As Integer
Dim Adresse As String
'vide le tableau
Erase TblCel
'si A1
If Not Intersect(Target, [A1]) Is Nothing Then
'plage de recherche en colonne A
'à partir de A3
Set Plage = Range([A3], [A65536].End(3))
'la recherche est faite à partir
'des premiers caractères
Set Cel = Plage.Find([A1] & "*", [A3], xlValues)
If Not Cel Is Nothing Then
Adresse = Cel.Address
Do
'stocke la référence de la cellule
'dans le tableau
I = I + 1
ReDim Preserve TblCel(1 To I)
Set TblCel(I) = Cel
Set Cel = Plage.FindNext(Cel)
Loop While Adresse <> Cel.Address
Else
MsgBox "Mot non trouvé !"
End If

End If

Set Cel = Nothing
Set Plage = Nothing
End Sub

Sub Selectionner()
Static J As Integer
'évite l'erreur du tableau
'non initialisé
On Error Resume Next
If J >= UBound(TblCel) Then J = 0
J = J + 1
TblCel(J).Select
End Sub

Hervé.

"MIKE" a écrit dans le message news:
42ca9daa$0$25013$
Bonjour

J'ai une longue liste d'articles 300 lignes
Pour trouver la bonne ligne je peux passer par filtre automatique et
faire
dérouler
Mais c'est un peu longuet

Y a-t-il un moyen de faire en tête de colonne une boite de dialogue, dans
la

quelle, en entrant les premières lettres du nom de l'article j'obtiendrai
l'affichage de la ou des lignes qui le contienne

Merci de vos astuces et solutions

MIKE









Avatar
AV
Alternative :
La liste (triée alpha.) nommée "liste" est en A1:Axx
En C1 : Données > Validation > Liste > :
=INDIRECT("A"
&MIN(SI(GAUCHE(liste;1)=$B$1;LIGNE(liste);""))&":A"&MAX(SI(GAUCHE(liste;1)=$B$1;
LIGNE(liste);"")))
En B1 saisie d'une lettre

AV