Bonjour à tous,
Est-il possible de toujours faire apparaître à l'écran les segments créés?
Les miens disparaissent quand je parcours mon tableau structuré vers le bas.
Bonjour à tous,
Est-il possible de toujours faire apparaître à l'écran les segments créés?
Les miens disparaissent quand je parcours mon tableau structuré vers le bas.
Bonjour
La solution la plus simple est d'agrandir la ligne 1, d'y placer les segments et de figer cette ligne
Sinon il faut du VBA pour que les segments suivent le déplacement tout en tenant compte des filtres : un peu usine à gaz
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
Merci de la réponse,
Elle m'a donné l'idée suivante:
J'ai créé une nouvelle fenêtre et partagé en deux mon écran dans le sens de la hauteur.
J'ai trouver sur le web un programme VBA qui est sensé rendre fixe les segments.
le voici:Mon classeur comporte 5 feuilles,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable) Dim Sl As Slicer For Each Sl In Target.Slicers With Sl.Shape .Height = 48.188976378 .Width = 141.7322834646 .Left = Me.Range("L4").Left .Top = Me.Range("L4").Top End With Next End Sub
Je l'ai écrit dans la feuille VBA correspondant à celle qui contient les segments.
Mais il ne fonctionne pas.
Merci de me dire pourquoi.
Bonjour
Ce code positionne les segments à un endroit précis, il ne les fait pas suivre quoi que ce soit
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
Mais ce code ne fonctionne pas:
Quand je remplace la cellule L4 par L10, rien ne change à l'ouverture du classeur.
Les segments se positionnent là où je les ai mis à la souris!
Bonjour
Ce code est à placer dans le module de la feuille, change la position une unique fois (L4 n'évolue pas) quand on touche au TCD : filtre ou actualisation par exemple
Or j’avais cru comprendre que les segments devaient rester visibles que le scroll affiche la ligne 1 ou ligne 10000
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
Bonjour ,
J'ai rencontré ce point, tu as deux solutions :
1. Tu mets le segment sur la 1ere ligne et tu figes cette derniére ( tu la redimensionne selon la hauteur de ton segment ).
2. Tu crées un autre segment identique au premier et tu le places là ou tu voudras le revoir ( l'utiliser ) et là tu fais attention aux connexions des segments ( un nombre illimité du même segment )
RE
Rien n'oblige à dimensionner un segment pour le voir en entier puisqu'il est équipé d'une liste déroulante
Si le nombre d'entrées est très important, il peut être utile d'ajouter une colonne à la source avec l'initiale ou les 3 premières lettres de la colonne correspondant à ton segment.
Cela permettra un prè filtrage qui permettra de limiter la hauteur du second segment
Les connexions ne concernent que les segments de TCD
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
Bonjour,
En fait tu ne figes pas le segment, mais tu figes la ligne sur la quelle t'as positionné ton segment ( figer cette ligne figera automatiquement ton segment ).
sinon tu crées autant de segment identique à ton segment initial à n'importe quelle emplacement de ta feuille.
Bonjour à tous,
J'ai trouvé une solution, la voici pour 4 segments que j'utilise:
Le point principal est ActiveWindow.VisibleRange.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Sub Worksheet_SelectionChange(ByVal Target As Range) 'Cale les segments prédéfinis sur la première ligne visible de l'écran 'Pour un gain de temps, aucune vérification d'existence de segments 'n'est faite Set SegmentShape1 = Me.Shapes("Ss type") Set SegmentShape2 = Me.Shapes("Bénéficiaire") Set SegmentShape3 = Me.Shapes("Type") Set SegmentShape4 = Me.Shapes("Où") With ActiveWindow.VisibleRange 'Toutes les cellules visibles à l'écran premiereLigne = .Row End With SegmentShape1.Top = Cells(premiereLigne + 1, 1).Top SegmentShape2.Top = Cells(premiereLigne + 1, 1).Top SegmentShape3.Top = Cells(premiereLigne + 1, 1).Top SegmentShape4.Top = Cells(premiereLigne + 26, 1).Top End Sub
Ce n'est pas encore tout à fait satisfaisant.
Ce code ne fonctionne que lorsque la sélection change, mais pas quand l'écran défile avec la molette de la souris ou par l'activation de l'ascenseur.
Une idée?
Bonjour,
Y a t il un moyen de détecter si la molette de la souris est activée?
Si c'est le cas il serait possible de rendre visible en permanence les segments à l'écran.
Bonjour
Le scroll, clavier ou souris, ne génère aucun évènement
Une solution ici mais la DLL nécessaire ne semble plus disponible...
http://www.cpearson.com/excel/DetectScroll.htm
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
RE
Si tu as pris le temps de lire l'acticle, tu auras pu voir qu'Excel ne peut pas gérer cela d'où la DLL béquille ou booster
De toute façon cela date et je doute qu'on retrouve cette DLL et qu'elle soit opérationnelle sur les versions actuelles
On t'as donné des solutions ici et ailleurs...
Pas celle dont tu rêvais mais même Microsoft ne peut exaucer tous tes rêves
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
Bonjour à tous,
Je reviens vers vous car je suis sur le point de trouver une solution, mais je bloque sur 2 points.
Elle est basée sur la fonction Timer. La voici:
Dans la feuille qui contient le tableau structuré je crée ces 2 fonctions:
et dans ThisWorkbook je mets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Sub FixeSegment() 'Cale les segments prédéfinis sur la première ligne visible de l'écran 'Pour un gain de temps, aucune vérification d'existence de segments 'n'est faite Set SegmentShape1 = Me.Shapes("Ss type") Set SegmentShape2 = Me.Shapes("Bénéficiaire") Set SegmentShape3 = Me.Shapes("Type") Set SegmentShape4 = Me.Shapes("Où") Set SegmentShape5 = Me.Shapes("Désignation") With ActiveWindow.VisibleRange 'Toutes les cellules visibles à l'écran premiereLigne = .Row End With SegmentShape1.Top = Cells(premiereLigne + 1, 1).Top SegmentShape2.Top = Cells(premiereLigne + 1, 1).Top SegmentShape3.Top = Cells(premiereLigne + 1, 1).Top SegmentShape4.Top = Cells(premiereLigne + 27, 1).Top SegmentShape5.Top = Cells(premiereLigne + 1, 1).Top End Sub Sub Lanceur() While True Delta = 0.01 'Les segments sont remis en place tous les Delta secondes Depart = Timer While Timer <= Depart + Delta DoEvents Wend FixeSegment Lanceur Wend End Sub
Ce code fonctionne bien, les segments restent à leur place quand je me déplace avec la souris ou avec les flèches. Mais ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Workbook_Open() Feuil7.Lanceur End Sub
Premier problème:
Quand je veux modifier une cellule un message m'informe que je n'ai pas l'autorisation d'utiliser l'objet.
L'aide me dit que je doit contacter l'administrateur système ou le créateur d'objet.
Deuxième problème:
Comment fais je pour arrêter la boucle? Quand je change de feuille par exemple
Merci pour votre temps
Désolé, mais je n'avais pas assez réfléchi (ou fouiller sur la toile) mais j'ai trouvé pour mon problème n°2.
Il faut créé une variable booléenne public StopLanceur, l'initier à False.
On la teste et dès qu'elle passe à True, on fait un exit sub.
Voici le programme Lanceur corrigé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Sub Lanceur() Delta = 0.01 'Les segments sont remis en place tous les Delta secondes StopLanceur = False While True Depart = Timer While Timer <= Depart + Delta 'Worksheets(1).EnableCalculation = True DoEvents If StopLanceur = True Then Exit Sub 'Worksheets(1).EnableCalculation = True Wend FixeSegment Lanceur Wend End Sub Sub StopperLanceur() StopLanceur = True End Sub
J'ai enfin résolu mon pb, en interceptant l'erreur créer par la saisie clavier:
Voici ma sub Lanceur modifiée:
Cette dernière me permet donc de parcourir verticalement mon tableau structuré avec les flèches et la souris, les segments créés restant toujours sur la même ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Sub Lanceur() 'Procédure récursive qui permet d'appeler FiweSegment tous les Delta seconde On Error GoTo ErreurClavier Application.EnableCancelKey = xlErrorHandler 'Permet de contrôler l'erreur qui m'indique que je ne peux pas utiliser 'quand je modifie une cellule Delta = 0.001 StopLanceur = False 'Par défaut Lanceur est actif While True Depart = Timer While Timer <= Depart + Delta DoEvents 'Rend la main à l'utilisateur et au système If StopLanceur = True Then Exit Sub 'Arrète la procédure récursive Wend FixeSegment 'exécute FixeSegment Lanceur 'Relance la procédure récursive Wend ErreurClavier: If Err = 18 Then StopperLanceur End If End Sub
Je considère cette discussion résolue
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager