Excel - Ajuster Bare de défilement verticale. [Résolu/Fermé]

stranger-46 25 Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention - 4 juil. 2008 à 10:06 - Dernière réponse :  Deday
- 31 oct. 2017 à 09:49
Bonjour,

Je cherche à faire une macro, pour que la barre de défilement verticale (à droite donc) s'ajuste automatiquement au nombre de lignes non vides.

Par exemple j'ai une base de donnée d'un milliers de lignes, par défaut ma barre verticale est bien ajustée, c'est à dire lorsque je la selectionne et la descend au plus bas, elle se retrouvera à la hauteur de ma 1000ème ligne. Mais si je fais une mauvaise manipulation (un "CTRL" + "Shift" + "Fleche en bas" sur une cellule vide), je me retrouve avec une sélection allant jusqu'à la ligne 65536. Dans ce cas, la barre verticale est ajutée en fonction et c'est assez compliqué de retrouver ma 1000ème ligne en passant par la barre de défilement verticale...

En cherchant un peu sur internet j'ai trouvé le code : scrollbar1.max=range("cellule").value sauf que chez moi ça ne marche pas, erreur : "Object required". Et puis rien ne garantit que c'est le bon code pour mon problème. D'autant plus que j'ai aussi trouvé la dénomination : "verticalscrollbar" qui à mon avis correspond plus à la barre de défilement verticale, mais comment lui associer une valeur?

Quelqu'un aurait-il une idée?

PS: je suis plutot nul en VBA, donc excusez-moi si j'ai fais des erreurs.

Merci par avance.
Afficher la suite 
25Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention

30 réponses

+83
Utile
14
Bonjour à tous,

Avec Excel 2003, il existe une technique assez simple pour ajuster la barre de défilement à droite.
Sélectionnez la ligne qui se trouve juste après la fin de votre tableau et faites un "Ctrl+Maj+flèche du bas" afin de sélectionner les lignes vides jusqu'à la fin des lignes existantes dans Excel soit 65536.
Ensuite faites un "Alt, E, S" à la suite (raccourci pour supprimer). Remonter en cellule A1 et "Ctrl+S" (enregistrer).

Normalement la barre devrait s'ajuster...
Cette réponse vous a-t-elle aidé ?  
MERCI ça a super bien marché
Merci, ça marche toujours avec Excel 2013
Merci ! Le coup de supprimer les cellules je m'en doutais, mais il suffisait de quitter et revenir sur le fichier et ça marche ! Gratitude !!! d:-)
lermite222 8728 Messages postés dimanche 8 avril 2007Date d'inscriptionContributeurStatut 27 janvier 2014 Dernière intervention - 4 juil. 2008 à 10:42
+4
Utile
Bonjour,
Il faut déterminer la plage, soit Ligne et colonne
Sheets("LaFeuille").ScrollArea = "a1:AA1000"
Pour remettre à toute la feuille
Sheets("LaFeuille").ScrollArea = ""
A+
stranger-46 25 Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention - 4 juil. 2008 à 11:51
+1
Utile
Hm....je ne peux pas modifier mes post (enfin le premier). Tant pis.

Voici donc une capture d'écran pour récapituler ce que je cherche à faire :

http://pix.nofrag.com/8/f/0/aeafd388b9a2c53d0e357b7fda0dd.html

C'est un exemple basique.

En fait la macro en question me servirait pour tous les fichiers que j'utilise, pour ajuster automatiquement la barre verticale en fonction du nombre de lignes remplits.

J'espère que c'est assez claire comme explication.

eriiic 21184 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 30 novembre 2017 Dernière intervention - 5 juil. 2008 à 08:32
+1
Utile
Bonjour,

Si, à partir de la dernière ligne que tu veux voir, tu fais shift+ctrl+fleche bas pour sélectionner les dernière lignes et que tu les masques (clic-droit masquer) ça fait exactement ce que tu souhaites il me semble.

eric
lermite222 8728 Messages postés dimanche 8 avril 2007Date d'inscriptionContributeurStatut 27 janvier 2014 Dernière intervention - 4 juil. 2008 à 13:20
0
Utile
1
Beh y faut adapté la plage au nombre de ligne et colonne
Sheets("LaFeuille").ScrollArea = Range("A1").SpecialCells(xlCellTypeLastCell).address
stranger-46 25 Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention - 4 juil. 2008 à 15:00
En fait le code que tu propose est bon, mais il présente des inconvénients pour mon utilisation.

En créant une nouvelle feuille, on voit que la scrollbar prend presque toute la place. En remplissant une 100aine de lignes elle diminue en taille. En remplissant 1000 lignes, la scrollbar diminue encore plus. De sorte à chaque fois pour atteindre la dernière ligne, il suffit de sélectionner la scrollbar et la descendre tout en bas.
Sauf que si je supprime 900 lignes ou j'avais entré les données précédemment, la scrollbar reste au meme niveau que pour les 1000, du coup pour atteindre ma 100ème ligne en passant par la scrollbar il me faut "chercher à tomber sur cette ligne" au lieu de tout simplement descendre la scrollbar au plus bas.

En fait pour comprendre rapidement mon problème, créez une nouvelle feuille > faites "CTRL" + "Flèche du bas", et remplissez la dernière cellule avec une donnée quelconque > faites "Etrée" > supprimer cette donnée et revenez à la cellule "A1". Essayez maintenant avec la barre de défilement d'atteindre la ligne 68. (sachant que dans ce cas on peut encore passer par la souris et sa molette, mais pour la ligne 23 152...) Constat, ce n'est pas pratique.

Avec le code de "ScrollArea", j'arrive à délimiter le champ de déroulement. C'est tres utile, mais ça présente l'inconvénient de :


1) L'aspect visuel de la scrollbar ne change pas. Donc l'utilisateur aura tendance à descendre la scrollbar au plus bas niveau pour voir finalement qu'elle n'est descendu que d'un quart pour atteindre la dernière ligne remplit. Certes c'est le but, mais là vient l'inconvénient N°2.

2) Nous ne pouvons pas descendre en dessous du champ délimité (ce qui est génant en cas de modification)

Concernant le dernier code proposé : Sheets("LaFeuille").ScrollArea = Range("A1").SpecialCells(xlCellTypeLastCell).address

C'est peut etre du à mon manque de connaissances en VBA, vu que je l'ai tout simplement copié/collé en remplaçant juste le nom de la feuille, j'arrive à descendre la scrollbar mais pas à la remonter. Donc obligé de fermer le classeur.


Bref, je pense que je peux reformuler ma question initiale :

Est-il possible de changer la taille de la barre de défilement verticale (VerticalScrollBar) pour qu'elle s'adapte au nombre de lignes avec une donnée. (voir screenshot plus haut)?

Merci, lermite222, de prendre la peine de chercher une solution à mon problème.
lermite222 8728 Messages postés dimanche 8 avril 2007Date d'inscriptionContributeurStatut 27 janvier 2014 Dernière intervention - 5 juil. 2008 à 06:47
0
Utile
Peut-être que cela sera mieux si tu met la dernière formule dans l'événement Change de la feuille, mais pour laisser une place pour d'éventuelle ajout...
Dim Col as long
Dim Lig as long
col = Range("A1").SpecialCells(xlCellTypeLastCell).column +2
Lig = Range("A1").SpecialCells(xlCellTypeLastCell).Rows + 2
Me.ScrollArea = Range(Cells(1,1),Cells(Lig,Col))
stranger-46 25 Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention - 7 juil. 2008 à 11:00
0
Utile
1
Bonjour,

lermite222 >>> en copiant ton code j'obtiens l'erreur suivante : "Invalid use of Me keyword"
eriiic >>> oui, j'ai deja utilisé cette astuce et si elle peut marcher pour mon utilisation ce ne sera pas le cas pour les autres utilisateurs.

En fait le problème, avec "scrollarea" et le fait de "cacher" les lignes non utilisées, est que celà ne peut etre utilisé de manière transparente pour l'utilisateur. A la limite pour mon utilisation personnelle le code "scrollarea" pourrait etre tres utile. Mais la macro ne sera pas destinée uniquement à mon usage.

Je cherche à créer une macro, qui par exemple à l'ouverture d'une feuille, va automatiquement et de manière transparente adapter la taille de la VerticalScrollbar au nombre de lignes non vides, tout en laissant la possibilité de continuer à remplir des 100 aines d'autres lignes s'il le faut.

D'ailleus j'aurais pensé que le code "scrollbar1.max=range("cellule").value " pouvait etre adapter à mon problème en changeant juste le "scrollbar1" par "verticalscrollbar", si seulement tout était aussi simple alors il me suffirais de compter le nombre de cellules non vides et la taille de la scrollbar changerait en fonction de cette valeur... mais ça c'est dans mes reves :(

Merci pour vos propositions, je continue à chercher en meme temps sur le net.
eriiic 21184 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 30 novembre 2017 Dernière intervention - 7 juil. 2008 à 11:41
Bonjour,

il me suffirais de compter le nombre de cellules non vides et la taille de la scrollbar changerait en fonction de cette valeur... mais ça c'est dans mes reves
C'est exactement ce que la la macro proposée par lermite...
remplace Me.ScrollArea par worksheets("nom_de_ta_feuille").ScrollArea et met la dans l'evenement open de ton classeur (dans ThisWorkbook)
et dans l'evenement 'change' des feuilles concernées
eric
lermite222 8728 Messages postés dimanche 8 avril 2007Date d'inscriptionContributeurStatut 27 janvier 2014 Dernière intervention - 7 juil. 2008 à 12:59
0
Utile
Pour terminer l'exposer de eric,
Me. ne peut être mis que dans une module de feuille. Pas dans un module générale ou ThisWorkbook.
Si tu met la macro du poste 6 dans les événement de feuilles.. Ca va fonctionner.
Si 2 lignes vides ne suffisent pas tu peut mettre +3,+5 etc..
Mais si tu veux ajouter un bloc de 100 lignes par exemple, tu met le curseur sur la dernière ligne vide, tu copie et comme l'événement change serra activé, le scroll serra automatiquement actualisé sur tes 100 lignes + 2.
Autre possibilité, si l'utilisateur va sur la première ligne vide et qu'il introduit quelque chose, automatiquement, il y aurra 2 lignes libres en dessous.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Col as long 
Dim Lig as long 
    col = Range("A1").SpecialCells(xlCellTypeLastCell).column +2 
    Lig = Range("A1").SpecialCells(xlCellTypeLastCell).Rows + 2 
    Me.ScrollArea = Range(Cells(1,1),Cells(Lig,Col)) 
End Sub

J'espère que c'est asser clair, sinon tu dit...
A+
stranger-46 25 Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention - 7 juil. 2008 à 14:08
0
Utile
Ok, merci pour toutes ces précisions.

Alors j'ai essayé de tester le code comme vous me le conseillez, mais j'ai toujours l'erreur: "Type mismatch" sur la ligne en gras

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Col As Long
Dim Lig As Long
Col = Range("A1").SpecialCells(xlCellTypeLastCell).Column + 2
Lig = Range("A1").SpecialCells(xlCellTypeLastCell).Rows + 2
Worksheets("Sheet1").ScrollArea = Range(Cells(1, 1), Cells(Lig, Col))
End Sub



Pareille pour :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Col As Long
Dim Lig As Long
Col = Range("A1").SpecialCells(xlCellTypeLastCell).Column + 2
Lig = Range("A1").SpecialCells(xlCellTypeLastCell).Rows + 2
Me.ScrollArea = Range(Cells(1, 1), Cells(Lig, Col))
End Sub


Je fais mal quelque chose?
lermite222 8728 Messages postés dimanche 8 avril 2007Date d'inscriptionContributeurStatut 27 janvier 2014 Dernière intervention - 7 juil. 2008 à 14:43
0
Utile
1
Excuse, j'ai cru que c'érait simple mais en fait c'est un peu plus compliqué...
Pas nécessaire de mettre dans ThisWotkbook mais dans les feuilles
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Col As Long, A
Dim Lig As Long
    Application.EnableEvents = False 'Quand définit A, tourne en rond...
    Me.ScrollArea = "" 'si pas libérer plante quand ont définit plus grand.
    A = Range("A1").SpecialCells(xlCellTypeLastCell).Address
    Col = Range(A).Column + 2
    Lig = Range(A).Row + 2  n'Pas de 'S' à Row
    Me.ScrollArea = Range(Cells(1, 1), Cells(Lig, Col)).Address
    Application.EnableEvents = True
End Sub

Maintenant j'ai testé et ca fonctionne comme dit...
A+
yacine090910 1 Messages postés lundi 22 décembre 2014Date d'inscription 24 décembre 2014 Dernière intervention - 24 déc. 2014 à 00:05
salut;
merci pour prg pour limité la feuil hor. / verti. c'est réussi
stranger-46 25 Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention - 7 juil. 2008 à 16:41
0
Utile
Ok, le code marche cette fois, je pensais que j'étais vraiment de main gauche sur le coup :)

Par contre il y a un autre problème ...

Je travaille sur une feuille qui à la base avait 400 lignes occupaient, j'en ai effacé 300.

Et la macro détecte les 400 lignes et non pas les 100 remplits, du coup le drilldown va jusqu'a à la 400ème ligne au lieu de la 100ème...

L'important c'est que le code marche et je l'ai vu à l'oeuvre.

Néanmoins je ne pense pas l'utiliser. Car ce que je cherchais c'est une transparence totale pour l'utilisateur, et je sais que j'aurais deja à donner les memes explications que tu m'as donné plus haut (pour les nouvelles lignes etc.), ce que je veux éviter.

En tout cas un grand merci à toi "lermite222", ton code a été utile d'une certaine manière car je pense que je pourrais l'utiliser pour moi perso. Puis j'imagine que ce que je veux n'est pas toujours réalisable.
Merci aussi à toi "eriiic" pour ton conseil.

PS: je continue mes recherches de mon coté, si je trouve une solution je l'écris ici :)

A +
0
Utile
pour les connaisseurs programme soft
1-afficher les fichiers cachés de l'éxcel
2-voir le fichier *.pif ajuster toutes les mesures de ton choix fix@*
stranger-46 25 Messages postés lundi 5 juin 2006Date d'inscription 11 novembre 2010 Dernière intervention - 4 juil. 2008 à 11:46
-1
Utile
Bonjour lermite222,

Ta solution ne me correspond pas vraiment. Je viens de modifié mon premier post avec une capture d'écran pour mieux visualiser ce que je cherche à faire.

Voici le lien :

http://pix.nofrag.com/8/f/0/aeafd388b9a2c53d0e357b7fda0dd.html