Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recherche type INDEX dans l'aide

5 réponses
Avatar
ced
Bonjour,

Je recherche un code pour faire comme dans l'index des aide.

Quelqu'un a ca ou sait ou je peut trouver un truc de ce genre qq part?

En gros, j'ai un fichier excel avec une base de données...de noms

Je voudrais retrouver rapidement ces noms grace à un userform qui affiche la
liste et qui la reduit au fur et a mesure que je tatone en entrant
progressivement le nom

Merci

ced

5 réponses

Avatar
ced
On m'a donné ca,
Mais ca bloque à Ubound ?????

VAR est vide et j'ai une incompatibilité de type

J'ai une feuille avec une liste de valeurs
J'ai un Userform avec un textbox et une listbox

ced

-------------------------------------------------------

Public var As Variant

Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub

Private Sub TextBox1_Change()
Dim i&
For i& = 1 To UBound(var, 1)
If UCase(Mid(var(i&, 1), 1, Len(TextBox1))) = UCase(TextBox1) Then
ListBox1.ListIndex = i& - 1
ListBox1.TopIndex = i& - 1
Exit For
End If
Next i&
End Sub

''### Activez cette procédure si les données sont
''### dans ce classeur.
''### Adaptez le nom de la feuille contenant les données
Private Sub UserForm1_Initialize()
Dim S As Worksheet
Set S = Sheets("test") 'Adapter selon le nom de la feuille
var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
ListBox1.List = var
End Sub


''### Activez cette procédure si les données sont
''### dans un classeur externe fermé.
''### Adaptez le nom de la feuille contenant les données
''### et le chemin du classeur externe
'Private Sub UserForm_Initialize()
'Dim WB As Workbook
'Dim S As Worksheet
'Set WB = GetObject("C:CEDVBAessai.xls") 'Adapter selon le chemin
'Set S = WB.Sheets("test") 'Adapter selon le nom de la feuille
'var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
'WB.Close savechanges:úlse
'Set WB = Nothing
'ListBox1.List = var

'End Sub
Private Sub UserForm_Click()

End Sub



Bonjour,

Je recherche un code pour faire comme dans l'index des aide.

Quelqu'un a ca ou sait ou je peut trouver un truc de ce genre qq part?

En gros, j'ai un fichier excel avec une base de données...de noms

Je voudrais retrouver rapidement ces noms grace à un userform qui affiche la
liste et qui la reduit au fur et a mesure que je tatone en entrant
progressivement le nom

Merci

ced


Avatar
ced
Bon, ca a l'air de marcher, mais ce qui ne va pas, c'est que mon uzerform ne
s'initialise pas automatiquement.

Je sais pas quoi faire pour , pour le mom, j'ai mi un autre bouton,
userform1_initialize

la ca marche mais c'est pas au top


On m'a donné ca,
Mais ca bloque à Ubound ?????

VAR est vide et j'ai une incompatibilité de type

J'ai une feuille avec une liste de valeurs
J'ai un Userform avec un textbox et une listbox

ced

-------------------------------------------------------

Public var As Variant

Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub

Private Sub TextBox1_Change()
Dim i&
For i& = 1 To UBound(var, 1)
If UCase(Mid(var(i&, 1), 1, Len(TextBox1))) = UCase(TextBox1) Then
ListBox1.ListIndex = i& - 1
ListBox1.TopIndex = i& - 1
Exit For
End If
Next i&
End Sub

''### Activez cette procédure si les données sont
''### dans ce classeur.
''### Adaptez le nom de la feuille contenant les données
Private Sub UserForm1_Initialize()
Dim S As Worksheet
Set S = Sheets("test") 'Adapter selon le nom de la feuille
var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
ListBox1.List = var
End Sub


''### Activez cette procédure si les données sont
''### dans un classeur externe fermé.
''### Adaptez le nom de la feuille contenant les données
''### et le chemin du classeur externe
'Private Sub UserForm_Initialize()
'Dim WB As Workbook
'Dim S As Worksheet
'Set WB = GetObject("C:CEDVBAessai.xls") 'Adapter selon le chemin
'Set S = WB.Sheets("test") 'Adapter selon le nom de la feuille
'var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
'WB.Close savechanges:úlse
'Set WB = Nothing
'ListBox1.List = var

'End Sub
Private Sub UserForm_Click()

End Sub



Bonjour,

Je recherche un code pour faire comme dans l'index des aide.

Quelqu'un a ca ou sait ou je peut trouver un truc de ce genre qq part?

En gros, j'ai un fichier excel avec une base de données...de noms

Je voudrais retrouver rapidement ces noms grace à un userform qui affiche la
liste et qui la reduit au fur et a mesure que je tatone en entrant
progressivement le nom

Merci

ced




Avatar
PMO
Bonjour,

J'ai reconnu le programme qu'on vous a passé car j'en suis l'auteur.
Je vous propose une autre approche.

A FAIRE TOUT D'ABORD
1) Dans Excel allez dans le menu Outils/Macro/Sécurité…
2) Dans l'onglet Sources fiables cochez Faire confiance au projet Visual Basic

FEUILLE SOURCE DES DONNEES
Copiez la feuille susnommée dans le classeur qui contiendra la macro
(ce n'est pas la peine, bien sûr, si c'est ce classeur qui contient la
feuille source)
Renommez cette feuille "data" OU changez la valeur de la constante SOURCE
dans la macro.

QUE FAIT LA MACRO PMO_RechercheIndex
1) Elle crée une nouvelle feuille "Recherche"
2) Elle copie la feuille "data" et la trie
3) Elle crée une TextBox incorporée à la feuille
4) Elle crée un code évènementiel (en l'occurrence Change) pour cette TextBox
(c'est pour cette étape qu'il faut faire confiance au projet Visual Basic
tel que
précisé dans A FAIRE TOUT D'ABORD)

Lancez la macro PMO_RechercheIndex. Dans la TextBox créée, tapez une
lettre de votre choix. On pourra lire en topline la cellule correspondante.
Tapez une seconde lettre etc…

'********************************
Option Explicit
' ### Constantes à modifier selon votre usage ###
Const SOURCE As String = "data" 'Feuille source des données
Const RESULT As String = "Recherche" 'Feuille créée pour la recherche
'_____________________________
Sub PMO_RechercheIndex()
Dim var
Dim S As Worksheet
Dim R As Range
Dim OLEobj As OLEObject
Dim A$
Application.DisplayAlerts = False
On Error Resume Next
Sheets(RESULT).Delete
On Error GoTo Erreur
var = Sheets(SOURCE).UsedRange
On Error GoTo 0
Set S = Sheets.Add
S.Name = RESULT
Set R = S.Range(Cells(1, 1), Cells(UBound(var, 1), UBound(var, 2)))
R = var
R.Sort [a1], xlAscending
R.Columns.AutoFit
S.OLEObjects.Add ClassType:="Forms.TextBox.1", _
Left:@0, Top:0, Width: 0, Height:@
A$ = A$ & "Private Sub TextBox1_Change()" & vbCrLf
A$ = A$ & "Dim var" & vbCrLf
A$ = A$ & "Dim i&" & vbCrLf
A$ = A$ & "Dim A$" & vbCrLf
A$ = A$ & "Dim OBJ As Object" & vbCrLf
A$ = A$ & "Set OBJ = TextBox1" & vbCrLf
A$ = A$ & "var = ActiveSheet.UsedRange" & vbCrLf
A$ = A$ & "A$ = UCase(OBJ)" & vbCrLf
A$ = A$ & "If A$ =" & Chr(34) & Chr(34) & " Then" & vbCrLf
A$ = A$ & " ActiveWindow.ScrollRow = 1" & vbCrLf
A$ = A$ & " OBJ.Top = ActiveWindow.Top + 100" & vbCrLf
A$ = A$ & "Else" & vbCrLf
A$ = A$ & " For i& = 1 To UBound(var, 1)" & vbCrLf
A$ = A$ & " If Left(UCase(var(i&, 1)), Len(A$)) = A$ Then" & vbCrLf
A$ = A$ & " ActiveWindow.ScrollRow = i&" & vbCrLf
A$ = A$ & " OBJ.Top = Rows(i&).Top + 100" & vbCrLf
A$ = A$ & " Exit For" & vbCrLf
A$ = A$ & " End If" & vbCrLf
A$ = A$ & " Next i&" & vbCrLf
A$ = A$ & "End If" & vbCrLf
A$ = A$ & "End Sub"
Application.VBE.ActiveVBProject. _
VBComponents(S.CodeName). _
CodeModule.AddFromString (A$)
Erreur:
Application.DisplayAlerts = True
If Err = 9 Then MsgBox "Feuille de données ''" & SOURCE & "'' introuvable"
End Sub
'********************************

Cordialement.

PMO
Patrick Morange



Bon, ca a l'air de marcher, mais ce qui ne va pas, c'est que mon uzerform ne
s'initialise pas automatiquement.

Je sais pas quoi faire pour , pour le mom, j'ai mi un autre bouton,
userform1_initialize

la ca marche mais c'est pas au top


On m'a donné ca,
Mais ca bloque à Ubound ?????

VAR est vide et j'ai une incompatibilité de type

J'ai une feuille avec une liste de valeurs
J'ai un Userform avec un textbox et une listbox

ced

-------------------------------------------------------

Public var As Variant

Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub

Private Sub TextBox1_Change()
Dim i&
For i& = 1 To UBound(var, 1)
If UCase(Mid(var(i&, 1), 1, Len(TextBox1))) = UCase(TextBox1) Then
ListBox1.ListIndex = i& - 1
ListBox1.TopIndex = i& - 1
Exit For
End If
Next i&
End Sub

''### Activez cette procédure si les données sont
''### dans ce classeur.
''### Adaptez le nom de la feuille contenant les données
Private Sub UserForm1_Initialize()
Dim S As Worksheet
Set S = Sheets("test") 'Adapter selon le nom de la feuille
var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
ListBox1.List = var
End Sub


''### Activez cette procédure si les données sont
''### dans un classeur externe fermé.
''### Adaptez le nom de la feuille contenant les données
''### et le chemin du classeur externe
'Private Sub UserForm_Initialize()
'Dim WB As Workbook
'Dim S As Worksheet
'Set WB = GetObject("C:CEDVBAessai.xls") 'Adapter selon le chemin
'Set S = WB.Sheets("test") 'Adapter selon le nom de la feuille
'var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
'WB.Close savechanges:úlse
'Set WB = Nothing
'ListBox1.List = var

'End Sub
Private Sub UserForm_Click()

End Sub



Bonjour,

Je recherche un code pour faire comme dans l'index des aide.

Quelqu'un a ca ou sait ou je peut trouver un truc de ce genre qq part?

En gros, j'ai un fichier excel avec une base de données...de noms

Je voudrais retrouver rapidement ces noms grace à un userform qui affiche la
liste et qui la reduit au fur et a mesure que je tatone en entrant
progressivement le nom

Merci

ced






Avatar
ced
MERCI beacoup.

La premiere version tourne bien finalement a apart le truc d'initialisation.
Mais je vais regarder l'autre code.

Par contre, y a t il un moyen que mon fichier source s'ouvre sans la demande
de mise a jour des liaisons?

Y a t il une ligne a mettre pour qu'il ne me demande pas ce truc?

Merci !






Bonjour,

J'ai reconnu le programme qu'on vous a passé car j'en suis l'auteur.
Je vous propose une autre approche.

A FAIRE TOUT D'ABORD
1) Dans Excel allez dans le menu Outils/Macro/Sécurité…
2) Dans l'onglet Sources fiables cochez Faire confiance au projet Visual Basic

FEUILLE SOURCE DES DONNEES
Copiez la feuille susnommée dans le classeur qui contiendra la macro
(ce n'est pas la peine, bien sûr, si c'est ce classeur qui contient la
feuille source)
Renommez cette feuille "data" OU changez la valeur de la constante SOURCE
dans la macro.

QUE FAIT LA MACRO PMO_RechercheIndex
1) Elle crée une nouvelle feuille "Recherche"
2) Elle copie la feuille "data" et la trie
3) Elle crée une TextBox incorporée à la feuille
4) Elle crée un code évènementiel (en l'occurrence Change) pour cette TextBox
(c'est pour cette étape qu'il faut faire confiance au projet Visual Basic
tel que
précisé dans A FAIRE TOUT D'ABORD)

Lancez la macro PMO_RechercheIndex. Dans la TextBox créée, tapez une
lettre de votre choix. On pourra lire en topline la cellule correspondante.
Tapez une seconde lettre etc…

'********************************
Option Explicit
' ### Constantes à modifier selon votre usage ###
Const SOURCE As String = "data" 'Feuille source des données
Const RESULT As String = "Recherche" 'Feuille créée pour la recherche
'_____________________________
Sub PMO_RechercheIndex()
Dim var
Dim S As Worksheet
Dim R As Range
Dim OLEobj As OLEObject
Dim A$
Application.DisplayAlerts = False
On Error Resume Next
Sheets(RESULT).Delete
On Error GoTo Erreur
var = Sheets(SOURCE).UsedRange
On Error GoTo 0
Set S = Sheets.Add
S.Name = RESULT
Set R = S.Range(Cells(1, 1), Cells(UBound(var, 1), UBound(var, 2)))
R = var
R.Sort [a1], xlAscending
R.Columns.AutoFit
S.OLEObjects.Add ClassType:="Forms.TextBox.1", _
Left:@0, Top:0, Width: 0, Height:@
A$ = A$ & "Private Sub TextBox1_Change()" & vbCrLf
A$ = A$ & "Dim var" & vbCrLf
A$ = A$ & "Dim i&" & vbCrLf
A$ = A$ & "Dim A$" & vbCrLf
A$ = A$ & "Dim OBJ As Object" & vbCrLf
A$ = A$ & "Set OBJ = TextBox1" & vbCrLf
A$ = A$ & "var = ActiveSheet.UsedRange" & vbCrLf
A$ = A$ & "A$ = UCase(OBJ)" & vbCrLf
A$ = A$ & "If A$ =" & Chr(34) & Chr(34) & " Then" & vbCrLf
A$ = A$ & " ActiveWindow.ScrollRow = 1" & vbCrLf
A$ = A$ & " OBJ.Top = ActiveWindow.Top + 100" & vbCrLf
A$ = A$ & "Else" & vbCrLf
A$ = A$ & " For i& = 1 To UBound(var, 1)" & vbCrLf
A$ = A$ & " If Left(UCase(var(i&, 1)), Len(A$)) = A$ Then" & vbCrLf
A$ = A$ & " ActiveWindow.ScrollRow = i&" & vbCrLf
A$ = A$ & " OBJ.Top = Rows(i&).Top + 100" & vbCrLf
A$ = A$ & " Exit For" & vbCrLf
A$ = A$ & " End If" & vbCrLf
A$ = A$ & " Next i&" & vbCrLf
A$ = A$ & "End If" & vbCrLf
A$ = A$ & "End Sub"
Application.VBE.ActiveVBProject. _
VBComponents(S.CodeName). _
CodeModule.AddFromString (A$)
Erreur:
Application.DisplayAlerts = True
If Err = 9 Then MsgBox "Feuille de données ''" & SOURCE & "'' introuvable"
End Sub
'********************************

Cordialement.

PMO
Patrick Morange



Bon, ca a l'air de marcher, mais ce qui ne va pas, c'est que mon uzerform ne
s'initialise pas automatiquement.

Je sais pas quoi faire pour , pour le mom, j'ai mi un autre bouton,
userform1_initialize

la ca marche mais c'est pas au top


On m'a donné ca,
Mais ca bloque à Ubound ?????

VAR est vide et j'ai une incompatibilité de type

J'ai une feuille avec une liste de valeurs
J'ai un Userform avec un textbox et une listbox

ced

-------------------------------------------------------

Public var As Variant

Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub

Private Sub TextBox1_Change()
Dim i&
For i& = 1 To UBound(var, 1)
If UCase(Mid(var(i&, 1), 1, Len(TextBox1))) = UCase(TextBox1) Then
ListBox1.ListIndex = i& - 1
ListBox1.TopIndex = i& - 1
Exit For
End If
Next i&
End Sub

''### Activez cette procédure si les données sont
''### dans ce classeur.
''### Adaptez le nom de la feuille contenant les données
Private Sub UserForm1_Initialize()
Dim S As Worksheet
Set S = Sheets("test") 'Adapter selon le nom de la feuille
var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
ListBox1.List = var
End Sub


''### Activez cette procédure si les données sont
''### dans un classeur externe fermé.
''### Adaptez le nom de la feuille contenant les données
''### et le chemin du classeur externe
'Private Sub UserForm_Initialize()
'Dim WB As Workbook
'Dim S As Worksheet
'Set WB = GetObject("C:CEDVBAessai.xls") 'Adapter selon le chemin
'Set S = WB.Sheets("test") 'Adapter selon le nom de la feuille
'var = S.Range("a1:a" & S.[a1].CurrentRegion.Rows.Count & "")
'WB.Close savechanges:úlse
'Set WB = Nothing
'ListBox1.List = var

'End Sub
Private Sub UserForm_Click()

End Sub



Bonjour,

Je recherche un code pour faire comme dans l'index des aide.

Quelqu'un a ca ou sait ou je peut trouver un truc de ce genre qq part?

En gros, j'ai un fichier excel avec une base de données...de noms

Je voudrais retrouver rapidement ces noms grace à un userform qui affiche la
liste et qui la reduit au fur et a mesure que je tatone en entrant
progressivement le nom

Merci

ced








Avatar
PMO
Bonjour,

Par contre, y a t il un moyen que mon fichier source s'ouvre sans la demande
de mise a jour des liaisons?


Allez dans le menu Editions/Liaisons et dans la boîte de
dialogue qui apparaît cliquez sur Invite de démarrage.
Faites votre choix dans les diverses propositions.

Cordialement.

PMO
Patrick Morange



MERCI beacoup.

La premiere version tourne bien finalement a apart le truc d'initialisation.
Mais je vais regarder l'autre code.

Par contre, y a t il un moyen que mon fichier source s'ouvre sans la demande
de mise a jour des liaisons?

Y a t il une ligne a mettre pour qu'il ne me demande pas ce truc?

Merci !