Contrôle des touches de navigation dans un contrôle spreadsheet avec filtre automatique
3 réponses
Pierre Archambault
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs peuvent
cliquer sur une ligne en particulier ce qui sélectionne cette ligne.
Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une
ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque
déplacement, le programme sélectionne la ligne en question tout en limitant
les déplacement à la plage de données. Exemple, s'ils tentent de descendre
plus bas que la dernière ligne ou de monter plus haut que la première ligne,
un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le
comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce
qui évidemment réduit le nombre de lignes affichées. Mon programme permet
toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à
l'autre sauf que si l'utilisateur tente de se positionner (avec les touches
du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à
empêcher ce déplacement. J'aimerais savoir comment trouver le numéro de la
première et de la dernière ligne affichée après filtrage. De cette façon je
pourrais positionner le curseur sur la première ou la dernière ligne selon
le cas si jamais l'utilisateur tentait de descendre ou monter à l'extérieur
de la liste.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
JB
Bonjour,
Sub solution1() If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1 Then lignedeb = 2 Else lignedeb = Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row End If lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
Sub solution2() ligne = 2 Do While Range("_FilterDataBase").Rows(ligne).Hidden ligne = ligne + 1 Loop lignedeb = ligne lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault" wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs pe uvent cliquer sur une ligne en particulier ce qui sélectionne cette ligne. Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque déplacement, le programme sélectionne la ligne en question tout en li mitant les déplacement à la plage de données. Exemple, s'ils tentent de de scendre plus bas que la dernière ligne ou de monter plus haut que la première ligne, un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce qui évidemment réduit le nombre de lignes affichées. Mon programme permet toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à l'autre sauf que si l'utilisateur tente de se positionner (avec les touch es du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à empêcher ce déplacement. J'aimerais savoir comment trouver le numér o de la première et de la dernière ligne affichée après filtrage. De cett e façon je pourrais positionner le curseur sur la première ou la dernière ligne selon le cas si jamais l'utilisateur tentait de descendre ou monter à l'ext érieur de la liste.
Merci de vos lumières
Pierre
Bonjour,
Sub solution1()
If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1
Then
lignedeb = 2
Else
lignedeb =
Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row
End If
lignefin = [A65000].End(xlUp).Row
MsgBox lignedeb & " " & lignefin
End Sub
Sub solution2()
ligne = 2
Do While Range("_FilterDataBase").Rows(ligne).Hidden
ligne = ligne + 1
Loop
lignedeb = ligne
lignefin = [A65000].End(xlUp).Row
MsgBox lignedeb & " " & lignefin
End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault"
<pierre.archamba...@videotron.ca> wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs pe uvent
cliquer sur une ligne en particulier ce qui sélectionne cette ligne.
Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une
ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque
déplacement, le programme sélectionne la ligne en question tout en li mitant
les déplacement à la plage de données. Exemple, s'ils tentent de de scendre
plus bas que la dernière ligne ou de monter plus haut que la première ligne,
un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le
comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce
qui évidemment réduit le nombre de lignes affichées. Mon programme permet
toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à
l'autre sauf que si l'utilisateur tente de se positionner (avec les touch es
du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à
empêcher ce déplacement. J'aimerais savoir comment trouver le numér o de la
première et de la dernière ligne affichée après filtrage. De cett e façon je
pourrais positionner le curseur sur la première ou la dernière ligne selon
le cas si jamais l'utilisateur tentait de descendre ou monter à l'ext érieur
de la liste.
Sub solution1() If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1 Then lignedeb = 2 Else lignedeb = Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row End If lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
Sub solution2() ligne = 2 Do While Range("_FilterDataBase").Rows(ligne).Hidden ligne = ligne + 1 Loop lignedeb = ligne lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault" wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs pe uvent cliquer sur une ligne en particulier ce qui sélectionne cette ligne. Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque déplacement, le programme sélectionne la ligne en question tout en li mitant les déplacement à la plage de données. Exemple, s'ils tentent de de scendre plus bas que la dernière ligne ou de monter plus haut que la première ligne, un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce qui évidemment réduit le nombre de lignes affichées. Mon programme permet toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à l'autre sauf que si l'utilisateur tente de se positionner (avec les touch es du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à empêcher ce déplacement. J'aimerais savoir comment trouver le numér o de la première et de la dernière ligne affichée après filtrage. De cett e façon je pourrais positionner le curseur sur la première ou la dernière ligne selon le cas si jamais l'utilisateur tentait de descendre ou monter à l'ext érieur de la liste.
Merci de vos lumières
Pierre
Pierre Archambault
Merci JB,
Je viens de lire ton message, il est encore tôt le matin, je vais me mettre les yeux vis-à-vis des trous et ensuite je met ta solution en oeuvre.
Meric encore
Pierre
"JB" a écrit dans le message de news:
Bonjour,
Sub solution1() If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1 Then lignedeb = 2 Else lignedeb Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row End If lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
Sub solution2() ligne = 2 Do While Range("_FilterDataBase").Rows(ligne).Hidden ligne = ligne + 1 Loop lignedeb = ligne lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault" wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs peuvent cliquer sur une ligne en particulier ce qui sélectionne cette ligne. Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque déplacement, le programme sélectionne la ligne en question tout en limitant les déplacement à la plage de données. Exemple, s'ils tentent de descendre plus bas que la dernière ligne ou de monter plus haut que la première ligne, un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce qui évidemment réduit le nombre de lignes affichées. Mon programme permet toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à l'autre sauf que si l'utilisateur tente de se positionner (avec les touches du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à empêcher ce déplacement. J'aimerais savoir comment trouver le numéro de la première et de la dernière ligne affichée après filtrage. De cette façon je pourrais positionner le curseur sur la première ou la dernière ligne selon le cas si jamais l'utilisateur tentait de descendre ou monter à l'extérieur de la liste.
Merci de vos lumières
Pierre
Merci JB,
Je viens de lire ton message, il est encore tôt le matin, je vais me mettre
les yeux vis-à-vis des trous et ensuite je met ta solution en oeuvre.
Meric encore
Pierre
"JB" <boisgontier@hotmail.com> a écrit dans le message de news:
1171089613.661383.288420@m58g2000cwm.googlegroups.com...
Bonjour,
Sub solution1()
If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1
Then
lignedeb = 2
Else
lignedeb Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row
End If
lignefin = [A65000].End(xlUp).Row
MsgBox lignedeb & " " & lignefin
End Sub
Sub solution2()
ligne = 2
Do While Range("_FilterDataBase").Rows(ligne).Hidden
ligne = ligne + 1
Loop
lignedeb = ligne
lignefin = [A65000].End(xlUp).Row
MsgBox lignedeb & " " & lignefin
End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault"
<pierre.archamba...@videotron.ca> wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs
peuvent
cliquer sur une ligne en particulier ce qui sélectionne cette ligne.
Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une
ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque
déplacement, le programme sélectionne la ligne en question tout en
limitant
les déplacement à la plage de données. Exemple, s'ils tentent de descendre
plus bas que la dernière ligne ou de monter plus haut que la première
ligne,
un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila
le
comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage;
ce
qui évidemment réduit le nombre de lignes affichées. Mon programme permet
toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à
l'autre sauf que si l'utilisateur tente de se positionner (avec les
touches
du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à
empêcher ce déplacement. J'aimerais savoir comment trouver le numéro de la
première et de la dernière ligne affichée après filtrage. De cette façon
je
pourrais positionner le curseur sur la première ou la dernière ligne selon
le cas si jamais l'utilisateur tentait de descendre ou monter à
l'extérieur
de la liste.
Je viens de lire ton message, il est encore tôt le matin, je vais me mettre les yeux vis-à-vis des trous et ensuite je met ta solution en oeuvre.
Meric encore
Pierre
"JB" a écrit dans le message de news:
Bonjour,
Sub solution1() If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1 Then lignedeb = 2 Else lignedeb Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row End If lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
Sub solution2() ligne = 2 Do While Range("_FilterDataBase").Rows(ligne).Hidden ligne = ligne + 1 Loop lignedeb = ligne lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault" wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs peuvent cliquer sur une ligne en particulier ce qui sélectionne cette ligne. Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque déplacement, le programme sélectionne la ligne en question tout en limitant les déplacement à la plage de données. Exemple, s'ils tentent de descendre plus bas que la dernière ligne ou de monter plus haut que la première ligne, un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce qui évidemment réduit le nombre de lignes affichées. Mon programme permet toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à l'autre sauf que si l'utilisateur tente de se positionner (avec les touches du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à empêcher ce déplacement. J'aimerais savoir comment trouver le numéro de la première et de la dernière ligne affichée après filtrage. De cette façon je pourrais positionner le curseur sur la première ou la dernière ligne selon le cas si jamais l'utilisateur tentait de descendre ou monter à l'extérieur de la liste.
Merci de vos lumières
Pierre
Pierre Archambault
Salut JB,
Voila, j'ai dû faire de petits ajustements mais j'y suis arrivé:
Dans l'événement Spreadsheet1_KeyDown j'ai mis un Gosub à TestLimites:
TestLimites: L = 2 Do While Spreadsheet1.Range("A:A").Rows(L).RowHeight = 0 L = L + 1 Loop Ld = L 'Ld: Ligne de début Lf = Spreadsheet1.[A65000].End(xlUp).Row 'Lf: Ligne de fin Return
Le contrôle Spreadsheet ne supporte pas SpecialCells alors je me suis rabattu sur la deuxième solution.
Le contrôle Spreadsheet ne supporte pas non plus Hidden, j'ai opté pour RowHeight.
Pour le reste, ajustements mineurs et le tour est joué.
Merci grandement.
Pierre
"JB" a écrit dans le message de news:
Bonjour,
Sub solution1() If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1 Then lignedeb = 2 Else lignedeb Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row End If lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
Sub solution2() ligne = 2 Do While Range("_FilterDataBase").Rows(ligne).Hidden ligne = ligne + 1 Loop lignedeb = ligne lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault" wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs peuvent cliquer sur une ligne en particulier ce qui sélectionne cette ligne. Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque déplacement, le programme sélectionne la ligne en question tout en limitant les déplacement à la plage de données. Exemple, s'ils tentent de descendre plus bas que la dernière ligne ou de monter plus haut que la première ligne, un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce qui évidemment réduit le nombre de lignes affichées. Mon programme permet toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à l'autre sauf que si l'utilisateur tente de se positionner (avec les touches du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à empêcher ce déplacement. J'aimerais savoir comment trouver le numéro de la première et de la dernière ligne affichée après filtrage. De cette façon je pourrais positionner le curseur sur la première ou la dernière ligne selon le cas si jamais l'utilisateur tentait de descendre ou monter à l'extérieur de la liste.
Merci de vos lumières
Pierre
Salut JB,
Voila, j'ai dû faire de petits ajustements mais j'y suis arrivé:
Dans l'événement Spreadsheet1_KeyDown j'ai mis un Gosub à TestLimites:
TestLimites:
L = 2
Do While Spreadsheet1.Range("A:A").Rows(L).RowHeight = 0
L = L + 1
Loop
Ld = L
'Ld: Ligne de début
Lf = Spreadsheet1.[A65000].End(xlUp).Row 'Lf: Ligne de fin
Return
Le contrôle Spreadsheet ne supporte pas SpecialCells alors je me suis
rabattu sur la deuxième solution.
Le contrôle Spreadsheet ne supporte pas non plus Hidden, j'ai opté pour
RowHeight.
Pour le reste, ajustements mineurs et le tour est joué.
Merci grandement.
Pierre
"JB" <boisgontier@hotmail.com> a écrit dans le message de news:
1171089613.661383.288420@m58g2000cwm.googlegroups.com...
Bonjour,
Sub solution1()
If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1
Then
lignedeb = 2
Else
lignedeb Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row
End If
lignefin = [A65000].End(xlUp).Row
MsgBox lignedeb & " " & lignefin
End Sub
Sub solution2()
ligne = 2
Do While Range("_FilterDataBase").Rows(ligne).Hidden
ligne = ligne + 1
Loop
lignedeb = ligne
lignefin = [A65000].End(xlUp).Row
MsgBox lignedeb & " " & lignefin
End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault"
<pierre.archamba...@videotron.ca> wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs
peuvent
cliquer sur une ligne en particulier ce qui sélectionne cette ligne.
Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une
ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque
déplacement, le programme sélectionne la ligne en question tout en
limitant
les déplacement à la plage de données. Exemple, s'ils tentent de descendre
plus bas que la dernière ligne ou de monter plus haut que la première
ligne,
un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila
le
comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage;
ce
qui évidemment réduit le nombre de lignes affichées. Mon programme permet
toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à
l'autre sauf que si l'utilisateur tente de se positionner (avec les
touches
du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à
empêcher ce déplacement. J'aimerais savoir comment trouver le numéro de la
première et de la dernière ligne affichée après filtrage. De cette façon
je
pourrais positionner le curseur sur la première ou la dernière ligne selon
le cas si jamais l'utilisateur tentait de descendre ou monter à
l'extérieur
de la liste.
Voila, j'ai dû faire de petits ajustements mais j'y suis arrivé:
Dans l'événement Spreadsheet1_KeyDown j'ai mis un Gosub à TestLimites:
TestLimites: L = 2 Do While Spreadsheet1.Range("A:A").Rows(L).RowHeight = 0 L = L + 1 Loop Ld = L 'Ld: Ligne de début Lf = Spreadsheet1.[A65000].End(xlUp).Row 'Lf: Ligne de fin Return
Le contrôle Spreadsheet ne supporte pas SpecialCells alors je me suis rabattu sur la deuxième solution.
Le contrôle Spreadsheet ne supporte pas non plus Hidden, j'ai opté pour RowHeight.
Pour le reste, ajustements mineurs et le tour est joué.
Merci grandement.
Pierre
"JB" a écrit dans le message de news:
Bonjour,
Sub solution1() If Range("A:A").SpecialCells(xlCellTypeVisible).Areas(1).Count > 1 Then lignedeb = 2 Else lignedeb Range("A:A").SpecialCells(xlCellTypeVisible).Areas(2).Item(1).Row End If lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
Sub solution2() ligne = 2 Do While Range("_FilterDataBase").Rows(ligne).Hidden ligne = ligne + 1 Loop lignedeb = ligne lignefin = [A65000].End(xlUp).Row MsgBox lignedeb & " " & lignefin End Sub
http://cjoint.com/?ckhNZK6LSU
Cordialement JB
On 10 fév, 01:28, "Pierre Archambault" wrote:
Bonjour à tous,
En effet, la description de mon problème est plutôt pointue...
J'utilise un contrôle Spreadsheet dans un userform. Les utilisateurs peuvent cliquer sur une ligne en particulier ce qui sélectionne cette ligne. Ensuite, ils peuvent avec les touches fléchées, déplacer le curseur d'une ligne à l'autre tant qu'ils restent à l'intérieur de la liste. Et à chaque déplacement, le programme sélectionne la ligne en question tout en limitant les déplacement à la plage de données. Exemple, s'ils tentent de descendre plus bas que la dernière ligne ou de monter plus haut que la première ligne, un beep se fait entendre et le curseur reste sur la ligne actuelle. Voila le comportement désiré.
Mon problème:
Il est aussi possible d'appliquer le filtre automatique sur cette plage; ce qui évidemment réduit le nombre de lignes affichées. Mon programme permet toujours de cliquer sur une ligne et de déplacer le curseur d'une ligne à l'autre sauf que si l'utilisateur tente de se positionner (avec les touches du clavier) sur une ligne hors de la liste filtrée, je n'arrive pas à empêcher ce déplacement. J'aimerais savoir comment trouver le numéro de la première et de la dernière ligne affichée après filtrage. De cette façon je pourrais positionner le curseur sur la première ou la dernière ligne selon le cas si jamais l'utilisateur tentait de descendre ou monter à l'extérieur de la liste.