OVH Cloud OVH Cloud

RECHERCHE DANS TABLEAU

6 réponses
Avatar
GILLES
BONJOUR A TOUS
j'ai un tableau de 350lignes environ qui g=E8re des documents
Quand l'utilisateur cherche un document, il ne connait pas=20
forc=E9ment son nom exact (ex: fiche de reception travaux)=20
ou (reception travaux)
J'ai plac=E9 26 boutons de macro , correspondant aux lettres=20
de l'alphabet (a,b,c...)pour rechercher dans le tableau le=20
nom d 'un document =E0 partir de la premi=E8re lettre.
Jai =E9crit de petites macro qui cherchent et trient les=20
lignes, =E0 partir de n=B0 de lignes que j'ai trouv=E9 en=20
faisant 'enregistreur macro
Mais si je rajoute des lignes ,la macro renvoie toujours =E0=20
la ligne =E9crite dans le code.
Comment faire pour que le code tienne compte de ces=20
=E9volutions?
ex: macro pour lettre "a"
Sub tria()
' tri_a Macro
Rows("5:350").Select
Range("A350").Activate
Selection.Sort Key1:=3DRange("AA5"),=20
Order1:=3DxlDescending, Header:=3DxlGuess _
, OrderCustom:=3D1, MatchCase:=3DFalse,=20
Orientation:=3DxlTopToBottom
Range("C5").Select
End Sub
Par ailleurs je cherche un moyen , genre moteur de=20
recherche ou l'utilisateur rentre un mot (ex: fiche) et=20
qui irait chercher la 1=E8re ligne , comme dans l'aide en=20
ligne d'excel
Je ne sais pas si je suis bien bien clair
Merci =E0 ceusse qui seraient en mesure de m'=E9clairer

6 réponses

Avatar
Jean-François Aubert
Salut Gilles

Est-ce que ceci ferait ton bonheur ?
tu oublies tes 26 boutons


-le tableau de 350lignes , nommée: ref1

-un Userform nommé: UF1
-un Textbox nommé: TB1
-une Listbox nommée: LB1
(les dimentions et positions de ces éléments seront déterminés par la macro)


-1 bouton ou autre pour lancer : Sub mon_userform()


'.........dans le haut d'un module standard.............................................
Option Explicit
Public tbl()
Sub mon_userform()
Dim i, esp
UF1.Height = 195
UF1.Width = 418
For i = 1 To 80
esp = esp & " "
Next
UF1.Caption = "Recherche" & esp & _
"code vba: MPFE ajf"
UF1.TB1.Height = 24
UF1.TB1.Width = 150
UF1.TB1.Left = 12
UF1.TB1.Top = 12
UF1.LB1.Height = 93
UF1.LB1.Width = 391
UF1.LB1.Left = 12
UF1.LB1.Top = 66
UF1.Show
End Sub 'ajf

Sub leTableau(i, i2)
ReDim Preserve tbl(i2)
tbl(i2) = i
End Sub ' ajf



'.........Dans le module de l'userform UF1..............................

Option Compare Text

Private Sub LB1_Click()
Dim y
y = tbl(UF1.LB1.ListIndex)
[ref1].Item(y).Select
Application.Goto Reference:¬tiveCell, Scroll:=True
Unload UF1
End Sub ' ajf

Private Sub TB1_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i, i2
If KeyCode = 16 Then Exit Sub ' touche Majuscule
UF1.LB1.Clear
i2 = -1
For i = 1 To [ref1].Count
If [ref1].Item(i) Like "*" & UF1.TB1 & "*" Then
UF1.LB1.AddItem [ref1].Item(i)
i2 = i2 + 1
leTableau i, i2
End If
Next
End Sub 'ajf



--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"GILLES" a écrit dans le message de
news:103e501c43f3c$422dc520$
BONJOUR A TOUS
j'ai un tableau de 350lignes environ qui gère des documents
Quand l'utilisateur cherche un document, il ne connait pas
forcément son nom exact (ex: fiche de reception travaux)
ou (reception travaux)
J'ai placé 26 boutons de macro , correspondant aux lettres
de l'alphabet (a,b,c...)pour rechercher dans le tableau le
nom d 'un document à partir de la première lettre.
Jai écrit de petites macro qui cherchent et trient les
lignes, à partir de n° de lignes que j'ai trouvé en
faisant 'enregistreur macro
Mais si je rajoute des lignes ,la macro renvoie toujours à
la ligne écrite dans le code.
Comment faire pour que le code tienne compte de ces
évolutions?
ex: macro pour lettre "a"
Sub tria()
' tri_a Macro
Rows("5:350").Select
Range("A350").Activate
Selection.Sort Key1:=Range("AA5"),
Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom
Range("C5").Select
End Sub
Par ailleurs je cherche un moyen , genre moteur de
recherche ou l'utilisateur rentre un mot (ex: fiche) et
qui irait chercher la 1ère ligne , comme dans l'aide en
ligne d'excel
Je ne sais pas si je suis bien bien clair
Merci à ceusse qui seraient en mesure de m'éclairer
Avatar
...Patrick
Salut Gilles,

tu dois déterminer la dernière ligne et éventuellement la dernière colonne
de ton tableau qui "vit" puisque tu y ajoutes des lignes donc ta macro est
figée sur un nombre qui évoluera...
par exemple pour la dernière ligne occupée de la colonne L"

LastrowL = Range("L65000").End(xlUp).Row


tu peux également nommer tout le tableau comme ceci :
.......
Range("A1").select ' première cellule occupée en principe
Selection.CurrentRegion.Select
Selection.Name = "Mydata"
' tri
Selection.Sort Key1:=Range("AA5"),
Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom
............


Patrick

ps reviens si pas comris :-)

"GILLES" a écrit dans le message de
news:103e501c43f3c$422dc520$
BONJOUR A TOUS
j'ai un tableau de 350lignes environ qui gère des documents
Quand l'utilisateur cherche un document, il ne connait pas
forcément son nom exact (ex: fiche de reception travaux)
ou (reception travaux)
J'ai placé 26 boutons de macro , correspondant aux lettres
de l'alphabet (a,b,c...)pour rechercher dans le tableau le
nom d 'un document à partir de la première lettre.
Jai écrit de petites macro qui cherchent et trient les
lignes, à partir de n° de lignes que j'ai trouvé en
faisant 'enregistreur macro
Mais si je rajoute des lignes ,la macro renvoie toujours à
la ligne écrite dans le code.
Comment faire pour que le code tienne compte de ces
évolutions?
ex: macro pour lettre "a"
Sub tria()
' tri_a Macro
Rows("5:350").Select
Range("A350").Activate
Selection.Sort Key1:=Range("AA5"),
Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom
Range("C5").Select
End Sub
Par ailleurs je cherche un moyen , genre moteur de
recherche ou l'utilisateur rentre un mot (ex: fiche) et
qui irait chercher la 1ère ligne , comme dans l'aide en
ligne d'excel
Je ne sais pas si je suis bien bien clair
Merci à ceusse qui seraient en mesure de m'éclairer
Avatar
gilles
merci à patricket JF
je m'atteles et j'essaie vos propositions
à+
-----Message d'origine-----
Salut Gilles

Est-ce que ceci ferait ton bonheur ?
tu oublies tes 26 boutons


-le tableau de 350lignes , nommée: ref1

-un Userform nommé: UF1
-un Textbox nommé: TB1
-une Listbox nommée: LB1
(les dimentions et positions de ces éléments seront
déterminés par la macro)



-1 bouton ou autre pour lancer : Sub mon_userform()


'.........dans le haut d'un module
standard.............................................

Option Explicit
Public tbl()
Sub mon_userform()
Dim i, esp
UF1.Height = 195
UF1.Width = 418
For i = 1 To 80
esp = esp & " "
Next
UF1.Caption = "Recherche" & esp & _
"code vba: MPFE ajf"
UF1.TB1.Height = 24
UF1.TB1.Width = 150
UF1.TB1.Left = 12
UF1.TB1.Top = 12
UF1.LB1.Height = 93
UF1.LB1.Width = 391
UF1.LB1.Left = 12
UF1.LB1.Top = 66
UF1.Show
End Sub 'ajf

Sub leTableau(i, i2)
ReDim Preserve tbl(i2)
tbl(i2) = i
End Sub ' ajf



'.........Dans le module de l'userform
UF1..............................


Option Compare Text

Private Sub LB1_Click()
Dim y
y = tbl(UF1.LB1.ListIndex)
[ref1].Item(y).Select
Application.Goto Reference:¬tiveCell, Scroll:=True
Unload UF1
End Sub ' ajf

Private Sub TB1_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i, i2
If KeyCode = 16 Then Exit Sub ' touche Majuscule
UF1.LB1.Clear
i2 = -1
For i = 1 To [ref1].Count
If [ref1].Item(i) Like "*" & UF1.TB1 & "*"
Then

UF1.LB1.AddItem [ref1].Item(i)
i2 = i2 + 1
leTableau i, i2
End If
Next
End Sub 'ajf



--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"GILLES" a écrit
dans le message de

news:103e501c43f3c$422dc520$
BONJOUR A TOUS
j'ai un tableau de 350lignes environ qui gère des
documents

Quand l'utilisateur cherche un document, il ne connait
pas

forcément son nom exact (ex: fiche de reception travaux)
ou (reception travaux)
J'ai placé 26 boutons de macro , correspondant aux
lettres

de l'alphabet (a,b,c...)pour rechercher dans le tableau
le

nom d 'un document à partir de la première lettre.
Jai écrit de petites macro qui cherchent et trient les
lignes, à partir de n° de lignes que j'ai trouvé en
faisant 'enregistreur macro
Mais si je rajoute des lignes ,la macro renvoie toujours
à

la ligne écrite dans le code.
Comment faire pour que le code tienne compte de ces
évolutions?
ex: macro pour lettre "a"
Sub tria()
' tri_a Macro
Rows("5:350").Select
Range("A350").Activate
Selection.Sort Key1:=Range("AA5"),
Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom
Range("C5").Select
End Sub
Par ailleurs je cherche un moyen , genre moteur de
recherche ou l'utilisateur rentre un mot (ex: fiche) et
qui irait chercher la 1ère ligne , comme dans l'aide en
ligne d'excel
Je ne sais pas si je suis bien bien clair
Merci à ceusse qui seraient en mesure de m'éclairer


.



Avatar
claudy
Bonjour, Jean-François ....
Pourrais tu m'envoyer un classeur exemple de cette macro?
En enlevant nos_pam...:
Merci d'avance,
Bon dimanche
Claudy

"Jean-François Aubert" <à a écrit dans le message de
news:
Salut Gilles

Est-ce que ceci ferait ton bonheur ?
tu oublies tes 26 boutons


-le tableau de 350lignes , nommée: ref1

-un Userform nommé: UF1
-un Textbox nommé: TB1
-une Listbox nommée: LB1
(les dimentions et positions de ces éléments seront déterminés par la
macro)



-1 bouton ou autre pour lancer : Sub mon_userform()


'.........dans le haut d'un module
standard.............................................

Option Explicit
Public tbl()
Sub mon_userform()
Dim i, esp
UF1.Height = 195
UF1.Width = 418
For i = 1 To 80
esp = esp & " "
Next
UF1.Caption = "Recherche" & esp & _
"code vba: MPFE ajf"
UF1.TB1.Height = 24
UF1.TB1.Width = 150
UF1.TB1.Left = 12
UF1.TB1.Top = 12
UF1.LB1.Height = 93
UF1.LB1.Width = 391
UF1.LB1.Left = 12
UF1.LB1.Top = 66
UF1.Show
End Sub 'ajf

Sub leTableau(i, i2)
ReDim Preserve tbl(i2)
tbl(i2) = i
End Sub ' ajf



'.........Dans le module de l'userform UF1..............................

Option Compare Text

Private Sub LB1_Click()
Dim y
y = tbl(UF1.LB1.ListIndex)
[ref1].Item(y).Select
Application.Goto Reference:¬tiveCell, Scroll:=True
Unload UF1
End Sub ' ajf

Private Sub TB1_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i, i2
If KeyCode = 16 Then Exit Sub ' touche Majuscule
UF1.LB1.Clear
i2 = -1
For i = 1 To [ref1].Count
If [ref1].Item(i) Like "*" & UF1.TB1 & "*" Then
UF1.LB1.AddItem [ref1].Item(i)
i2 = i2 + 1
leTableau i, i2
End If
Next
End Sub 'ajf



--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"GILLES" a écrit dans le message de
news:103e501c43f3c$422dc520$
BONJOUR A TOUS
j'ai un tableau de 350lignes environ qui gère des documents
Quand l'utilisateur cherche un document, il ne connait pas
forcément son nom exact (ex: fiche de reception travaux)
ou (reception travaux)
J'ai placé 26 boutons de macro , correspondant aux lettres
de l'alphabet (a,b,c...)pour rechercher dans le tableau le
nom d 'un document à partir de la première lettre.
Jai écrit de petites macro qui cherchent et trient les
lignes, à partir de n° de lignes que j'ai trouvé en
faisant 'enregistreur macro
Mais si je rajoute des lignes ,la macro renvoie toujours à
la ligne écrite dans le code.
Comment faire pour que le code tienne compte de ces
évolutions?
ex: macro pour lettre "a"
Sub tria()
' tri_a Macro
Rows("5:350").Select
Range("A350").Activate
Selection.Sort Key1:=Range("AA5"),
Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom
Range("C5").Select
End Sub
Par ailleurs je cherche un moyen , genre moteur de
recherche ou l'utilisateur rentre un mot (ex: fiche) et
qui irait chercher la 1ère ligne , comme dans l'aide en
ligne d'excel
Je ne sais pas si je suis bien bien clair
Merci à ceusse qui seraient en mesure de m'éclairer




Avatar
Jean-François Aubert
Claudy, c'est parti....

--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"claudy" a écrit dans le message de
news:40b066ac$0$8420$
Bonjour, Jean-François ....
Pourrais tu m'envoyer un classeur exemple de cette macro?
Merci d'avance,
Bon dimanche

Claudy

"Jean-François Aubert" <à a écrit dans le message de
news:
Salut Gilles

Est-ce que ceci ferait ton bonheur ?
tu oublies tes 26 boutons


-le tableau de 350lignes , nommée: ref1

-un Userform nommé: UF1
-un Textbox nommé: TB1
-une Listbox nommée: LB1
(les dimentions et positions de ces éléments seront déterminés par la
macro)



-1 bouton ou autre pour lancer : Sub mon_userform()


'.........dans le haut d'un module
standard.............................................

Option Explicit
Public tbl()
Sub mon_userform()
Dim i, esp
UF1.Height = 195
UF1.Width = 418
For i = 1 To 80
esp = esp & " "
Next
UF1.Caption = "Recherche" & esp & _
"code vba: MPFE ajf"
UF1.TB1.Height = 24
UF1.TB1.Width = 150
UF1.TB1.Left = 12
UF1.TB1.Top = 12
UF1.LB1.Height = 93
UF1.LB1.Width = 391
UF1.LB1.Left = 12
UF1.LB1.Top = 66
UF1.Show
End Sub 'ajf

Sub leTableau(i, i2)
ReDim Preserve tbl(i2)
tbl(i2) = i
End Sub ' ajf



'.........Dans le module de l'userform UF1..............................

Option Compare Text

Private Sub LB1_Click()
Dim y
y = tbl(UF1.LB1.ListIndex)
[ref1].Item(y).Select
Application.Goto Reference:¬tiveCell, Scroll:=True
Unload UF1
End Sub ' ajf

Private Sub TB1_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i, i2
If KeyCode = 16 Then Exit Sub ' touche Majuscule
UF1.LB1.Clear
i2 = -1
For i = 1 To [ref1].Count
If [ref1].Item(i) Like "*" & UF1.TB1 & "*" Then
UF1.LB1.AddItem [ref1].Item(i)
i2 = i2 + 1
leTableau i, i2
End If
Next
End Sub 'ajf



--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}






Avatar
claudy
Bonsoir...
sur mon PC(Win XP, Office XP), pas de prob...tout va bien :-))
mais sur mon Mac (Mac OS X, Office X), ça ne va plus:
il affiche le Userform, UF1, il prend ce que je tape dans TB1, mais rien ne
se produit dans LB1!
Je crois que le prob vient de KeyCode dans la procédure:
(Car en cherchant dans mon aide VBA d'Office X, je ne trouve rien!)
Private Sub TB1_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i, i2
If KeyCode = 16 Then Exit Sub ' touche Majuscule
UF1.LB1.Clear
i2 = -1
For i = 1 To [ref1].Count
If [ref1].Item(i) Like "*" & UF1.TB1 & "*" Then
UF1.LB1.AddItem [ref1].Item(i)
i2 = i2 + 1
leTableau i, i2
End If
Next
End Sub 'ajf
Merci, a+


Claudy


"claudy" a écrit dans le message de
news:40b066ac$0$8420$
Bonjour, Jean-François ....
Pourrais tu m'envoyer un classeur exemple de cette macro?
En enlevant nos_pam...:
Merci d'avance,
Bon dimanche
Claudy

"Jean-François Aubert" <à a écrit dans le message
de

news:
Salut Gilles

Est-ce que ceci ferait ton bonheur ?
tu oublies tes 26 boutons


-le tableau de 350lignes , nommée: ref1

-un Userform nommé: UF1
-un Textbox nommé: TB1
-une Listbox nommée: LB1
(les dimentions et positions de ces éléments seront déterminés par la
macro)



-1 bouton ou autre pour lancer : Sub mon_userform()


'.........dans le haut d'un module
standard.............................................

Option Explicit
Public tbl()
Sub mon_userform()
Dim i, esp
UF1.Height = 195
UF1.Width = 418
For i = 1 To 80
esp = esp & " "
Next
UF1.Caption = "Recherche" & esp & _
"code vba: MPFE ajf"
UF1.TB1.Height = 24
UF1.TB1.Width = 150
UF1.TB1.Left = 12
UF1.TB1.Top = 12
UF1.LB1.Height = 93
UF1.LB1.Width = 391
UF1.LB1.Left = 12
UF1.LB1.Top = 66
UF1.Show
End Sub 'ajf

Sub leTableau(i, i2)
ReDim Preserve tbl(i2)
tbl(i2) = i
End Sub ' ajf



'.........Dans le module de l'userform UF1..............................

Option Compare Text

Private Sub LB1_Click()
Dim y
y = tbl(UF1.LB1.ListIndex)
[ref1].Item(y).Select
Application.Goto Reference:¬tiveCell, Scroll:=True
Unload UF1
End Sub ' ajf

Private Sub TB1_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i, i2
If KeyCode = 16 Then Exit Sub ' touche Majuscule
UF1.LB1.Clear
i2 = -1
For i = 1 To [ref1].Count
If [ref1].Item(i) Like "*" & UF1.TB1 & "*" Then
UF1.LB1.AddItem [ref1].Item(i)
i2 = i2 + 1
leTableau i, i2
End If
Next
End Sub 'ajf



--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"GILLES" a écrit dans le message
de


news:103e501c43f3c$422dc520$
BONJOUR A TOUS
j'ai un tableau de 350lignes environ qui gère des documents
Quand l'utilisateur cherche un document, il ne connait pas
forcément son nom exact (ex: fiche de reception travaux)
ou (reception travaux)
J'ai placé 26 boutons de macro , correspondant aux lettres
de l'alphabet (a,b,c...)pour rechercher dans le tableau le
nom d 'un document à partir de la première lettre.
Jai écrit de petites macro qui cherchent et trient les
lignes, à partir de n° de lignes que j'ai trouvé en
faisant 'enregistreur macro
Mais si je rajoute des lignes ,la macro renvoie toujours à
la ligne écrite dans le code.
Comment faire pour que le code tienne compte de ces
évolutions?
ex: macro pour lettre "a"
Sub tria()
' tri_a Macro
Rows("5:350").Select
Range("A350").Activate
Selection.Sort Key1:=Range("AA5"),
Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom
Range("C5").Select
End Sub
Par ailleurs je cherche un moyen , genre moteur de
recherche ou l'utilisateur rentre un mot (ex: fiche) et
qui irait chercher la 1ère ligne , comme dans l'aide en
ligne d'excel
Je ne sais pas si je suis bien bien clair
Merci à ceusse qui seraient en mesure de m'éclairer