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
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
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
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 SubBonjour,
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
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
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 SubBonjour,
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
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 topOn 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 SubBonjour,
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
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
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 topOn 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 SubBonjour,
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
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 MorangeBon, 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 topOn 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 SubBonjour,
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
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
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 MorangeBon, 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 topOn 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 SubBonjour,
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
Par contre, y a t il un moyen que mon fichier source s'ouvre sans la demande
de mise a jour des liaisons?
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 !
Par contre, y a t il un moyen que mon fichier source s'ouvre sans la demande
de mise a jour des liaisons?
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 !
Par contre, y a t il un moyen que mon fichier source s'ouvre sans la demande
de mise a jour des liaisons?
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 !