Defilement automatique pour afficher derniere ligne

Bonjour à tous,

J'ai un tableau que je rempli en utilisant le code:

num = Sheets("Feuill1").Range("A65535").End(xlUp).Row + 1 'écrit sur la première ligne vide'

Je n'ai pas limité le nombre de lignes.

En revanche, dans ma zone d'impression, je limite à 35 lignes.

Donc , si je rempli jusqu'à la ligne 100 par exemple, je dois utiliser l'ascenseur pour afficher mes dernières lignes.

D'où ma question, peut-on faire défiler automatiquement l'ascenseur pour que les dernières lignes soient toujours visibles dans ma zone d'impression ? Les lignes 1 à 3 étant figées et visibles en permanence (intitulés du tableau et des colonnes).

Donc pour résumer, quand je dépasse la ligne 35, mon ascenseur doit se déplacer automatiquement pour m'afficher les lignes suivantes et m'éviter de le faire manuellement.

J'espère avoir été claire dans ma demande, et je vous remercie pour vos réponses,

A bientôt,

Cordialement.

Bonjour,

En fait si je comprends bien vous voulez toujours imprimer les trois premières ligne du tableau avec les 35 dernières utilisées ?

En fait, vous pourriez définir la zone d'impression comme étant celle du tableau entier puis avant d'imprimer vous cacheriez les lignes qu'il ne faut pas imprimer.

C'est une solution...

@ bientôt

LouReeD

Bonjour LouReeD,

Effectivement, dit comme ça, c'est bien plus clair.

Oui, c'est bien ce que je cherche à faire.

Pourriez-vous m'expliquer comment procéder? Décidément, je ne maitrise vraiment pas les mises en forme sous excel

Je vous remercie sincèrement,

A bientôt.

Bonjour à tous

Essaie ces deux instructions :

    derln = Sheets("Feuil1").Range("A65535").End(xlUp).Row
    ActiveSheet.PageSetup.PrintArea = derln - 34 & ":" & derln

Elles te définissent les 35 dernières lignes de ta feuille comme zone d'impression auxquelles s'ajoutent les lignes d'en tête que tu as figées dans la définition de la zone d'impression.

OK ?

Bonjour

une idée :

    derln = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row ' permet de se passer de la valeur 65535 ligne qui n'est plus d'actualité sous excel 2007 et plus !
    ActiveSheet.PageSetup.PrintArea = "A1:F" & derln ' F étant la dernière colonne du tableau
    if derln>38 then ' si on a des lignes à cacher (3 entêtes + 35 lignes de données visible = 38)
        Rows(4, derln - 35).Hidden = True ' on cache de la ligne 4 incluse à la ligne derln-35 visibles
    Else
        Rows(1, derln).Hidden = False ' on montre tout suite par exemple à la suppression de ligne
    Endif

Syntaxe à vérifier...

@ bientôt

LouReeD

Bonjour LouReeD et merci pour votre réponse.

J'ai testé, mais j'ai une erreur d'éxécution "1004" : erreur définie par l'application ou par l'objet.

A partir de Rows(1, derln).Hidden = False ' on montre tout suite par exemple à la suppression de ligne

Une idée?

Merci pour tout,

A bientôt.


Bonjour gmb et merci pour votre réponse,

J'ai testé:

Erreur d'éxécution"1004": référence non valide.

Merci pour votre aide,

A bientôt.

Bonjour

C'est curieux.

Sur mon PC, cela marche.

Essai le document joint sur le tien et dis-moi le résultat.

Merci.

Bye !

55essai-v1.xlsm (22.68 Ko)

Bonjour gmb,

J'ai essayé ton fichier, il me plante excel.

Lorsque je clique sur le bouton, celui-ci clignote sans interruption et excel mouline à mort, plus de réponse de sa part.

Merci,

A bientôt.

Je suis perplexe !

Mais tétu !

Faisons autre chose : envoie-moi ton fichier en modifiant les données si besoin et j'essaierai de voir ce que cela donne chez moi ?

OK ?

Je vais poser le problème autrement,

Pour que ma feuille tienne sur une page lors de l'impression, je ne dois pas dépasser 33 lignes (3 pour l'intitulé et 30 pour la saisie).

Au lieu de configurer les paramètres d'impression, ne peut-on pas paramétrer directement la feuille de façon à ce que mes 30 dernières saisies soient toujours visibles?

J'imaginais plutôt la solution comme ça:

(les 3 premières lignes sont figées, je fais défiler à partir de la ligne 4).

Si j'écris sur la ligne 34, alors je fais défiler ma SmallScroll Down de 1.

Si j'écris sur la ligne 35, alors je fais défiler ma SmallScroll Down de 2, etc.....

Donc ma SmallScroll Down suit automatiquement mes saisies, si je souhaite visualiser les lignes précédentes, je la fait défiler manuellement.

La lecture du document serait ainsi plus aisée.

Est-ce que ça change quelque chose ou pas?

Merci pour vos réponses,

Cordialement.

Bonsoir,

non il faut masquer les lignes, l'impression ne prend pas en compte le fait qu'elles disparaissent lors d'un scroll.

Donc zone d'impression : le tableau complet

3 lignes d'entête,

30 dernière lignes à afficher

les x lignes avant les 30 dernières à cacher.

puis impression

Dim derln as Long

derln = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row ' permet de se passer de la valeur 65535 ligne qui n'est plus d'actualité sous excel 2007 et plus !

ActiveSheet.PageSetup.PrintArea = "A1:F" & derln ' F étant la dernière colonne du tableau ce peut être G ou E ou autre chose

If derln > 33 then ' si on a des lignes à cacher (3 entêtes + 30 lignes de données visibles = 33)
    Rows( 4, derln - 30).Hidden = True ' on cache de la ligne 4 incluse à la ligne derln-30 visibles : modif par rapport au script précédent = en effet il ne faut pas compter les trois lignes d'entête si 40 lignes alors on cache de 4 à (40-30)=10 il reste 1,2,3,11 à 40
Else ' sinon
    Rows( 1, derln).Hidden = False ' on montre tout suite par exemple à la suppression de ligne
Endif

Je ne l'ai pas essayer...

mais à le lire il me semble bon, non ?

@ bientôt

LouReeD

Bonjour LouReed et merci pour votre réponse.

J'ai testé votre code, toujours l'erreur "1004" erreur définie par l'application ou l'objet.

Apparemment, ça bug à ce niveau:

Rows(1, derln).Hidden = False ' on montre tout suite par exemple à la suppression de ligne

Si je dépasse la ligne 33, on imprime quand même toutes les lignes, donc sur plusieurs pages.

Les pointillés définissant la zone d'impression apparaissent bien après chaque ligne de saisies.

Comme je ne suis pas un pro du VBA, peut-être que le code n'est pas placé au bon endroit ?

Je l'ai rajouté aux codes de mon bouton "valider" de mon formulaire.

Faut-il en écrire également sur ma feuille ?

Merci LouReeD,

Cordialement.

Bonjour,

La macro1 sert à imprimer uniquement les 32 dernières lignes + les trois premières.

Sub macro1()
Dim i%, ii%, a
ii = Sheets(1).Range("A65535").End(xlUp).Row
a = Split(Cells(1).CurrentRegion.Address, "$")
i = IIf(ii > 35, ii - 31, 1)
Sheets(1).PageSetup.PrintArea = "$" & a(1) & "$" & i & ":$" & a(3) & "$" & ii
Sheets(1).PrintOut preview:=True
End Sub

Maintenant, si malgré tout tu veux imprimer toutes les lignes (par lots de 35) là ça n'a rien à voir avec les macros, c'est juste un paramétrage de ta mise en page : il suffit d'ajuster manuellement ta mise en page pour avoir 35 lignes et pas une de plus.

Mais tout ceci n'a rien à voir avec le défilement ni avec l'affichage qui est uniquement un confort visuel (une nécessité pour la saisie)

pour cela on collera dans un module standart (Module1) la macro suivante :

Function iPlace()
i = Sheets(1).Range("A65535").End(xlUp).Row
iPlace = IIf(i > 12, i - 10, 2)
End Function

et dans le module de Sheets(1) :

Private Sub Worksheet_Activate()
  Application.ScreenUpdating = False
  Range("A" & iPlace).Activate
  ActiveWindow.ScrollRow = iPlace
End Sub

+ toujours dans le module de Sheets(1) :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
iR = Target.Row: iC = Target.Column
If iR >35 Then ActiveWindow.ScrollRow = IR-32
End If
End Sub

Bref il faut mieux définir ta question : Affichage et Impression n'ont rien à voir ensemble.

A+

Bonjour galopin01 et merci pour ta participation.

J'ai testé ta macro pour l'impression: ça ne fonctionne pas, erreur de compilation Sub ou Function non définie (Spli²t).

J'ai corrigé par Split et ça fonctionne ainsi :

La macro me propose d'imprimer les 32 dernières lignes sans les 3 premières...donc sans l'intitulé.

J'ai testé les codes pour l'affichage:

Problème avec le deuxième code : erreur de compilation -End If sans bloc IF

J'ai corrigé comme cela:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count = 1 Then

IR = Target.Row: iC = Target.Column

End If

If IR > 35 Then

ActiveWindow.ScrollRow = IR - 32

End If

End Sub

Il n'y a plus d'erreur, mais ça ne change rien à l'affichage de ma feuille.

Lorsque je veux imprimer, mon aperçu comporte les 1953 feuilles de 33 lignes, et seule la première conserve mes 3 lignes d'intitulé.

Merci pour ta patience et ton soutien.

Bonsoir,

Pour les impressions la Macro1 suffit à elle seule. On peut même la bricoler un peu pour modifier la zone d'impression mais c'est encore une autre histoire...

Bah ! pour split c'est une coquille lors du copier/coller... Désolé

Pour les 3 lignes à figer, ça suppose que tu les figes dans les paramètres de la feuille :

(Tu vas dans le ruban Mise en page > Marge > Onglet Feuille puis

Lignes à répéter en haut mettre :

$1:$3

Ensuite seulement tu lances la Macro1

Nota : Tu peux aussi modifier la Macro1 pour qu'elle fasse elle même le fixage des lignes d'en-tête. Pour cela rajouter cette ligne au début de Macro1.

ActiveSheet.PageSetup.PrintTitleRows = "$1:$3"

...mais à mon avis c'est un peu inutile car une fois que c'est fait et enregistré, YAPA besoin de le faire à chaque fois...

Encore une fois l'affichage et le scrolling n'influent en rien pour l'impression C'est juste un confort de saisie. Donc inutile de chercher de ce coté pour faire des impressions. Je t'ai mis juste mis ces macros parce que avec ton titre il était un peu difficile de comprendre le but.

A+

Bonsoir,

Tout simplement un fichier joint avec la macro qui fonctionne, et surtout la bonne syntaxe pour le masquage des lignes

Désolé de ne pas l'avoir testé chez moi afin de corriger ce qu'il fallait.

Un clic sur imprimer, n'imprime pas mais masque les lignes non nécessaires.

Il suffit de faire aperçue avant impression pour voir que cela fonctionne et ceci simplement...

Un clic sur Voir toutet hop on voit tout !

@ bientôt

LouReeD

19classeur1.xlsm (22.91 Ko)

Merci galopin01,

J'ai bien saisi la nuance entre l'impression et l'affichage.

Pour ce qui est de la formulation de ma question, je suis désolé mais ce n'est pas toujours évident de formuler par écrit le rendu souhaité,

Je te remercie sincèrement pour ton aide et tes conseils,

A bientôt sur le forum,

Cordialement,

xorsankukai

Bonjour LouReeD,

J'ai testé votre macro, elle fonctionne mais il y a juste un petit couac lorsqu'on veut tout imprimer.

  • Lorsque j'écris une nouvelle ligne, celle-ci n'est pas prise en compte si je fais "voir tout" (même sans rien faire d'ailleurs).
  • En revanche elle l'est si je fais "imprimer".
  • Si je fais "imprimer" et que je reviens sur "voir tout", elle est bien prise en compte.
Pour résumé, il faut obligatoirement passer par "imprimer" pour que les nouvelles saisies soient prises en compte.

Je vous remercie sincèrement pour votre soutien et vos conseils,

A bientôt sur le forum,

Cordialement,

xorsankukai

Je crois que j'ai réussi à corriger.

J'ai rajouter une ligne:

Sub toutvoir()

Dim derln As Long

derln = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

Sheets(1).Rows("1:" & derln).EntireRow.Hidden = False

End Sub

donne ça modifié:

Sub toutvoir()

Dim derln As Long

derln = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

ActiveSheet.PageSetup.PrintArea = "A1:F" & derln

Sheets(1).Rows("1:" & derln).EntireRow.Hidden = False

End Sub

Fonctionne mais m'oblige à passer par un des 2 boutons pour que les nouvelles saisies soient prises en compte.

Donc dans le code du bouton "Valider" de mon formulaire, j'ai rajouter celui de cette macro.

Tout semble fonctionner correctement.

Est-ce que ce code modifié est correct ?

Merci, à bientôt.

Bonsoir,

Pour faire évoluer la zone d'impression suite à l'ajout d'une ligne, il suffit d'utiliser la surveillance événementielle "change" de la feuille concernée.

Pour ce faire il suffit de cliquer droit sur le nom de la feuille concernée, d'afficher le code.

Sur la menu de gauche de la fenêtre de droite sélectionnez "worksheet" puis sur le menu de droite de la fenêtre de droite sélectionnez "Change"

Ce qui donne le code suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False ' arrête les mise à jour de l'écran = évite que ça "clignote"
Dim derln As Long
derln = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row ' permet de se passer de la valeur 65535 ligne qui n'est plus d'actualité sous excel 2007 et plus !
ActiveSheet.PageSetup.PrintArea = "A1:F" & derln
Application.ScreenUpdating = True ' on remet la mise à jour de l'écran
End Sub

Voilà @ bientôt

LouReeD

Ci joint le fichier modifier, avec une petite correction sur la macro "masquage de ligne" :

je demande à tout afficher pour ensuite cacher ce qu'il faut, ceci permet de prendre en compte des effacements éventuels de lignes.

14lignes-loureed.xlsm (24.34 Ko)
Rechercher des sujets similaires à "defilement automatique afficher derniere ligne"