Bonjour,
j'ai un fichier excel avec a peu pres 7000 lignes, dont la premiere colonne
est composée de noms.
Les lignes sont triés par ordre alphabétique et je voudrai me créer une
barre de boutons en haut de mon fichier avec des lettres A - B -C etc etc..
qui seraient des boutons qui m'emmenerait directement sur le premier nom
correspondant a la lettre. (ou je peux inserer une ligne A, une B.. etc
etc).
Comme des liens dans une page html qui emmene sur des paragraphe de la
page...
J'ai été clair? rien n'est moins sur.. :)
Si vous voyez de quoi je parle et que vous avez des infos ca m'jnteresse
fortement..
ou deja si vous avez une commande qui m'emmene "visuellement" sur la ligne x
de mon fichier ca m'interesse.
Merci beaucoup
Nicolas
ps: il me vient a l idée de jouer avec .activecell .. je devrait pouvoir
bricoler avec ca mais si il y a des outils plus "propre"je suis preneur.
merci
de toutes facon pour eviter une recherche a chaque fois je fais une recherche a l ouverture de mon fichier, du numero de cellule de la premiere occurence d 'une des lettres.. et si j en trouve j' ajoute la valeur dans la combobox.. j apelle donc 26 fois la fonction suivante,.. posa > trouvepremierecellule("a") posb=premierecel..... etc etc avec posa posb posc posd etc etc en var public
Comme ca la recherche est faite et je connais a l avance le numero ou aller ...
Function trouvepremierecellule(lettre As String) Call initvar trouvepremierecellule = "" With Worksheets("dnsrecord").Range("a1:a" & nbdeligne) For i = 2 To nbdeligne Step 1 If (Left(Cells(i, colndd), 1) = lettre) Then trouvepremierecellule = i Exit For End If Next i End With End Function ......... posw = trouvepremierecellule("w") posx = trouvepremierecellule("x") posy = trouvepremierecellule("y") posz = trouvepremierecellule("z") Worksheets("dnsrecord").ComboBox1.Clear 'on efface la liste des entree du combobox.. on ne rajoute que les lettres existantes If posa <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "A" If posb <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "B" If posc <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "C" If posd <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "D"
je pense qu'il vaut ieux calculer avant les valeurs, ca evite un traitement a chaque fois. Ca depend du nombre de fois que tu devras y accéder ;-))
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de ta ligne atteinte à chaque fois ...
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a nice day Oliv' Pour me joindre : http://cerbermail.com/?V8r2o1YHl4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
de toutes facon pour eviter une recherche a chaque fois je fais une
recherche a l ouverture de mon fichier, du numero de cellule de la
premiere occurence d 'une des lettres.. et si j en trouve j' ajoute
la valeur dans la combobox..
j apelle donc 26 fois la fonction suivante,.. posa > trouvepremierecellule("a") posb=premierecel..... etc etc
avec posa posb posc posd etc etc en var public
Comme ca la recherche est faite et je connais a l avance le numero ou
aller ...
Function trouvepremierecellule(lettre As String)
Call initvar
trouvepremierecellule = ""
With Worksheets("dnsrecord").Range("a1:a" & nbdeligne)
For i = 2 To nbdeligne Step 1
If (Left(Cells(i, colndd), 1) = lettre) Then
trouvepremierecellule = i
Exit For
End If
Next i
End With
End Function
.........
posw = trouvepremierecellule("w")
posx = trouvepremierecellule("x")
posy = trouvepremierecellule("y")
posz = trouvepremierecellule("z")
Worksheets("dnsrecord").ComboBox1.Clear 'on efface la liste des
entree du combobox.. on ne rajoute que les lettres existantes
If posa <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "A"
If posb <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "B"
If posc <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "C"
If posd <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "D"
je pense qu'il vaut ieux calculer avant les valeurs, ca evite un
traitement a chaque fois.
Ca depend du nombre de fois que tu devras y accéder ;-))
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de
ta ligne atteinte à chaque fois ...
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
de toutes facon pour eviter une recherche a chaque fois je fais une recherche a l ouverture de mon fichier, du numero de cellule de la premiere occurence d 'une des lettres.. et si j en trouve j' ajoute la valeur dans la combobox.. j apelle donc 26 fois la fonction suivante,.. posa > trouvepremierecellule("a") posb=premierecel..... etc etc avec posa posb posc posd etc etc en var public
Comme ca la recherche est faite et je connais a l avance le numero ou aller ...
Function trouvepremierecellule(lettre As String) Call initvar trouvepremierecellule = "" With Worksheets("dnsrecord").Range("a1:a" & nbdeligne) For i = 2 To nbdeligne Step 1 If (Left(Cells(i, colndd), 1) = lettre) Then trouvepremierecellule = i Exit For End If Next i End With End Function ......... posw = trouvepremierecellule("w") posx = trouvepremierecellule("x") posy = trouvepremierecellule("y") posz = trouvepremierecellule("z") Worksheets("dnsrecord").ComboBox1.Clear 'on efface la liste des entree du combobox.. on ne rajoute que les lettres existantes If posa <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "A" If posb <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "B" If posc <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "C" If posd <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "D"
je pense qu'il vaut ieux calculer avant les valeurs, ca evite un traitement a chaque fois. Ca depend du nombre de fois que tu devras y accéder ;-))
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de ta ligne atteinte à chaque fois ...
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a nice day Oliv' Pour me joindre : http://cerbermail.com/?V8r2o1YHl4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Al Bundy
ah vi tiens... actuellement la combobox est dans mon fractionnement donc je la vois toujours mais il est vrai que l'ideal serait pour moi de la laisser toujours collée a la bordure gauche, en dehors de mon fractionnement...
Je ne vois pas trop comment faire par contre... A moins de recuperer peut etre le numéro de la cellule qui est visible a l ecran (celle du haut a gauche par ex).. meme si celle qui est selectionnée n est plus visible (du genre en bougeant les ascenseurs que la combobox suive toujours...)
Tu as une piste de recherche a me donner dans ce sens peut etre ? en te remerciant.. bon week end
"Oliv'" <(supprimerceci) a écrit dans le message de news:
de toutes facon pour eviter une recherche a chaque fois je fais une recherche a l ouverture de mon fichier, du numero de cellule de la premiere occurence d 'une des lettres.. et si j en trouve j' ajoute la valeur dans la combobox.. j apelle donc 26 fois la fonction suivante,.. posa > > trouvepremierecellule("a") posb=premierecel..... etc etc avec posa posb posc posd etc etc en var public
Comme ca la recherche est faite et je connais a l avance le numero ou aller ...
Function trouvepremierecellule(lettre As String) Call initvar trouvepremierecellule = "" With Worksheets("dnsrecord").Range("a1:a" & nbdeligne) For i = 2 To nbdeligne Step 1 If (Left(Cells(i, colndd), 1) = lettre) Then trouvepremierecellule = i Exit For End If Next i End With End Function ......... posw = trouvepremierecellule("w") posx = trouvepremierecellule("x") posy = trouvepremierecellule("y") posz = trouvepremierecellule("z") Worksheets("dnsrecord").ComboBox1.Clear 'on efface la liste des entree du combobox.. on ne rajoute que les lettres existantes If posa <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "A" If posb <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "B" If posc <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "C" If posd <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "D"
je pense qu'il vaut ieux calculer avant les valeurs, ca evite un traitement a chaque fois. Ca depend du nombre de fois que tu devras y accéder ;-))
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de ta ligne atteinte à chaque fois ...
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a nice day Oliv' Pour me joindre : http://cerbermail.com/?V8r2o1YHl4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ah vi tiens... actuellement la combobox est dans mon fractionnement donc
je la vois toujours mais il est vrai que l'ideal serait pour moi de la
laisser toujours collée a la bordure gauche, en dehors de mon
fractionnement...
Je ne vois pas trop comment faire par contre...
A moins de recuperer peut etre le numéro de la cellule qui est visible a l
ecran (celle du haut a gauche par ex).. meme si celle qui est selectionnée n
est plus visible (du genre en bougeant les ascenseurs que la combobox suive
toujours...)
Tu as une piste de recherche a me donner dans ce sens peut etre ?
en te remerciant..
bon week end
"Oliv'" <(supprimerceci)catteau@ricour-assurances.fr> a écrit dans le
message de news:OUfLWk82FHA.1600@TK2MSFTNGP12.phx.gbl...
de toutes facon pour eviter une recherche a chaque fois je fais une
recherche a l ouverture de mon fichier, du numero de cellule de la
premiere occurence d 'une des lettres.. et si j en trouve j' ajoute
la valeur dans la combobox..
j apelle donc 26 fois la fonction suivante,.. posa > > trouvepremierecellule("a") posb=premierecel..... etc etc
avec posa posb posc posd etc etc en var public
Comme ca la recherche est faite et je connais a l avance le numero ou
aller ...
Function trouvepremierecellule(lettre As String)
Call initvar
trouvepremierecellule = ""
With Worksheets("dnsrecord").Range("a1:a" & nbdeligne)
For i = 2 To nbdeligne Step 1
If (Left(Cells(i, colndd), 1) = lettre) Then
trouvepremierecellule = i
Exit For
End If
Next i
End With
End Function
.........
posw = trouvepremierecellule("w")
posx = trouvepremierecellule("x")
posy = trouvepremierecellule("y")
posz = trouvepremierecellule("z")
Worksheets("dnsrecord").ComboBox1.Clear 'on efface la liste des
entree du combobox.. on ne rajoute que les lettres existantes
If posa <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "A"
If posb <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "B"
If posc <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "C"
If posd <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "D"
je pense qu'il vaut ieux calculer avant les valeurs, ca evite un
traitement a chaque fois.
Ca depend du nombre de fois que tu devras y accéder ;-))
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de
ta ligne atteinte à chaque fois ...
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ah vi tiens... actuellement la combobox est dans mon fractionnement donc je la vois toujours mais il est vrai que l'ideal serait pour moi de la laisser toujours collée a la bordure gauche, en dehors de mon fractionnement...
Je ne vois pas trop comment faire par contre... A moins de recuperer peut etre le numéro de la cellule qui est visible a l ecran (celle du haut a gauche par ex).. meme si celle qui est selectionnée n est plus visible (du genre en bougeant les ascenseurs que la combobox suive toujours...)
Tu as une piste de recherche a me donner dans ce sens peut etre ? en te remerciant.. bon week end
"Oliv'" <(supprimerceci) a écrit dans le message de news:
de toutes facon pour eviter une recherche a chaque fois je fais une recherche a l ouverture de mon fichier, du numero de cellule de la premiere occurence d 'une des lettres.. et si j en trouve j' ajoute la valeur dans la combobox.. j apelle donc 26 fois la fonction suivante,.. posa > > trouvepremierecellule("a") posb=premierecel..... etc etc avec posa posb posc posd etc etc en var public
Comme ca la recherche est faite et je connais a l avance le numero ou aller ...
Function trouvepremierecellule(lettre As String) Call initvar trouvepremierecellule = "" With Worksheets("dnsrecord").Range("a1:a" & nbdeligne) For i = 2 To nbdeligne Step 1 If (Left(Cells(i, colndd), 1) = lettre) Then trouvepremierecellule = i Exit For End If Next i End With End Function ......... posw = trouvepremierecellule("w") posx = trouvepremierecellule("x") posy = trouvepremierecellule("y") posz = trouvepremierecellule("z") Worksheets("dnsrecord").ComboBox1.Clear 'on efface la liste des entree du combobox.. on ne rajoute que les lettres existantes If posa <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "A" If posb <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "B" If posc <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "C" If posd <> "" Then Worksheets("dnsrecord").ComboBox1.AddItem "D"
je pense qu'il vaut ieux calculer avant les valeurs, ca evite un traitement a chaque fois. Ca depend du nombre de fois que tu devras y accéder ;-))
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de ta ligne atteinte à chaque fois ...
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a nice day Oliv' Pour me joindre : http://cerbermail.com/?V8r2o1YHl4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oliv'
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de ta ligne atteinte à chaque fois ...
dans ce genre
Private Sub ComboBox1_Change() On Error Resume Next x = Worksheets("Feuil1").Columns("A:A").Find(What:=ComboBox1.Value & "*", LookAt:=xlWhole).Row Application.Goto Worksheets("Feuil1").Cells(x, 1), Scroll:=True ComboBox1.Top = (x - 3) * 12.75 '-3 pour etre un peu au dessus ComboBox1.Left = 0 End Sub
avec une propriété PrintObject = false sur ton combobox.
Bien sûr je suppose que les lignes ont une hauteur standard.
où alors tu mets ton combobox ou textbox dans un userform qui lui sera a une position fixe et qui se lancera automatiquement avec Private Sub Workbook_Open()
UserForm1.Show modeless
End Sub
Private Sub TextBox1_Change() On Error Resume Next x = Worksheets("Feuil1").Columns("A:A").Find(What:=TextBox1.Value & "*", LookAt:=xlWhole).Row Application.Goto Worksheets("Feuil1").Cells(x, 1), Scroll:=True End Sub
et au fur et à mesure que tu tapes le nom tu te positionnes ce qui fait que tu n'es pas limité à la première lettre: ge geo geor georg george georges
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a nice day Oliv' Pour me joindre : http://cerbermail.com/?V8r2o1YHl4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tu pourrais peut-être améliorer en repositionnant ta combobox au
dessus de ta ligne atteinte à chaque fois ...
dans ce genre
Private Sub ComboBox1_Change()
On Error Resume Next
x = Worksheets("Feuil1").Columns("A:A").Find(What:=ComboBox1.Value & "*",
LookAt:=xlWhole).Row
Application.Goto Worksheets("Feuil1").Cells(x, 1), Scroll:=True
ComboBox1.Top = (x - 3) * 12.75 '-3 pour etre un peu au dessus
ComboBox1.Left = 0
End Sub
avec une propriété PrintObject = false sur ton combobox.
Bien sûr je suppose que les lignes ont une hauteur standard.
où alors tu mets ton combobox ou textbox dans un userform qui lui sera a une
position fixe
et qui se lancera automatiquement avec
Private Sub Workbook_Open()
UserForm1.Show modeless
End Sub
Private Sub TextBox1_Change()
On Error Resume Next
x = Worksheets("Feuil1").Columns("A:A").Find(What:=TextBox1.Value & "*",
LookAt:=xlWhole).Row
Application.Goto Worksheets("Feuil1").Cells(x, 1), Scroll:=True
End Sub
et au fur et à mesure que tu tapes le nom tu te positionnes ce qui fait que
tu n'es pas limité à la première lettre:
ge
geo
geor
georg
george
georges
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tu pourrais peut-être améliorer en repositionnant ta combobox au dessus de ta ligne atteinte à chaque fois ...
dans ce genre
Private Sub ComboBox1_Change() On Error Resume Next x = Worksheets("Feuil1").Columns("A:A").Find(What:=ComboBox1.Value & "*", LookAt:=xlWhole).Row Application.Goto Worksheets("Feuil1").Cells(x, 1), Scroll:=True ComboBox1.Top = (x - 3) * 12.75 '-3 pour etre un peu au dessus ComboBox1.Left = 0 End Sub
avec une propriété PrintObject = false sur ton combobox.
Bien sûr je suppose que les lignes ont une hauteur standard.
où alors tu mets ton combobox ou textbox dans un userform qui lui sera a une position fixe et qui se lancera automatiquement avec Private Sub Workbook_Open()
UserForm1.Show modeless
End Sub
Private Sub TextBox1_Change() On Error Resume Next x = Worksheets("Feuil1").Columns("A:A").Find(What:=TextBox1.Value & "*", LookAt:=xlWhole).Row Application.Goto Worksheets("Feuil1").Cells(x, 1), Scroll:=True End Sub
et au fur et à mesure que tu tapes le nom tu te positionnes ce qui fait que tu n'es pas limité à la première lettre: ge geo geor georg george georges
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a nice day Oliv' Pour me joindre : http://cerbermail.com/?V8r2o1YHl4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~