Définir une zone d'impression extensible

Bonsoir vous tous,

J'ai à nouveau un problème à vous soumettre.

Dans le fichier ci-joint, je voudrais que sur la feuille nommée "Français" je puisse définir une zone d'impression qui S'AGRANDISSE AUTOMATIQUEMENT selon le nombre de lignes visibles, soit une zone pouvant aller au maximum de A1 à F252.

Pour l'exemple fourni, il faudrait que ça imprime les cellules A1 - F42.

Comment dois-je m'y prendre ?

Salut le Forum

Yvouille avec une petite macro associée à un bouton.

Sub Impression()
ActiveSheet.PageSetup.PrintArea = "$A$1:$F$" & _
    Columns(4).Find("*", [D1], , , , xlPrevious).Row
ActiveWindow.SelectedSheets.PrintPreview
'ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub

Mytå

Salut le forum

Pour l'impression inverse les lignes de code en commentaire

'ActiveWindow.SelectedSheets.PrintPreview 
ActiveWindow.SelectedSheets.PrintOut Copies:=1 

J'avais activer le PrintPreview pour ne pas imprimer durant les tests.

Mytå

Bonjour,

une solution sans macro :

Principe : la zone d'impression sur Excel correspond en fait à une plage nommée.

Il "suffit" d'utiliser une formule nommée appelée Zone_d_impression

Insertion - Nom - Définir :

Nom dans le classeur : Zone_d_impression

Fait référence à : =DECALER(Français!$A$1;;;EQUIV("";Français!$A$11:$A$252;0)+10;6)

La plage de cellules nommée Zone_d_impression s'adaptera automatiquement au nombre de données comprises dans ta feuille.

@+

Bonsoir le Forum,

Un merci particulier à Thibo et Mytå pour leur solution respective et qui m'ont permis d'avancer d'une manière géniale dans mon projet. J'ai finalement choisi la solution de Thibo pour la feuille ci-jointe.

Une fois de plus je reste coi devant les solutions dont vous me faite profiter (ici j'inclu plusieurs personnes qui sont intervenues pour d'autres problèmes que j'avais soumis).

J'aurais encore un petit soucis à propos de ce travail au niveau de l'impression, mais je pourrais vivre avec. Toutefois si quelqu'un peu éventuellement m'aider à le résoudre, ce serait tant mieux.

Voila, lorsque j'imprime un plan de remboursement, il y a des sauts de page de manière à ce qu'une année complète (12 lignes de 1 mois) apparaisse sur la même feuille. Cependant, comme il y a toujours une dernière ligne 0.00, il se peut qu'elle apparaisse seule sur une page suivante - ce qui est quelque peu génant - au cas où le nombre de mois calculé en E13 est égal à 36, 84, 132, 180 ou 228 (sur la première page il y a trois années puis un saut de page, puis quatre années par page).

Si je ne trouve pas d'autres solutions, on ne fournira simplement pas - le cas échéant - la dernière page avec seulement la ligne des zéros.

Salut le forum

Yvouille en modifiant les formules, sur la feuille français

D13=SI(Berechnung!D35>0;Berechnung!D35;SI(A12=Berechnung!$E$13;"Fin Du Prêt";""))

à recopier vers le bas (Double-click sur la cellule)

Le code de la macro

Sub Impression_francais()
    Sheets("Français").Select
    ActiveSheet.PageSetup.PrintArea = "$A$1:$F$" & _
    Columns(4).Find("Fin Du Prêt", [D1], , , , xlPrevious).Row - 1
    Application.Dialogs(xlDialogPrint).Show
    Sheets("Berechnung").Select
    Range("G1").Select
End Sub

Étant pas fort en Allemand(Deutsch) et Italien(Italiano) à toi de modifier le

"Fin De Prêt" dans ces langues, et adpater les deux autres macros et formules.

A te relire

Mytå

Bonjour,

Selon le conseil de Mytå, j'ai modifié les cellules D13 et suivantes de la feuille "Français" ainsi que la macro liée au bouton "Français" sur la feuille "Berechnung" (voir fichier ci-joint).

J'ai maintenant toutefois toujours le problème de la ligne veuve imprimée sur une page séparée au cas où le nombre de mois est 36, 84, 132, 180 ou 228 (ce n'est plus "0.00" qui s'affiche, mais "Fin Du Prêt") et en plus l'impression avec une zone d'impression extensible ne fonctionne plus : toutes les pages sont toujours imprimées.

Que fais-je faux ?

Bonjour

Le gros problème avec Find, c'est qu'il recherche dans le contenu de la cellule, hors le contenu de la cellule n'est pas ce qui est forcément visible à l'écran, dans ton cas c'est une formule, c'est pour cela qu'il trouve le texte "Fin Du Prêt" en ligne 252.

Tu as deux possibilités :

Comme tu connais le nombre de mois, tu reprends cette donnée,

ActiveSheet.PageSetup.PrintArea = "$A$1:$F$" & Sheets("Berechnung").range("E13")+12
'11 étant le numéro de la ligne d'entête. + 1 la ligne de "fin de prêt"

ou

Tu recherches par la fonction d'excel EQUIV (Match en VBA), le numéro de la ligne qui contient le texte "Fin Du prêt"

 ActiveSheet.PageSetup.PrintArea = "$A$1:$F$" & _
 Application.Match("Fin Du Prêt", Sheets("Français").Range("D:D"), 0)

Voilà ton problème de définition de la plage d'impression, pour ce qui est de la position de la ligne "Fin Du Prêt", tu dois jouer avec la propriétés PageSetup.FitToPagesTall, qui indique le nombre de pages en hauteur à imprimer, ceci en fonction du nombre de mois.

@+Jean-Marie

Rebonjour,

J'ai pu continuer à avancer avec mon travail grâce aux précieux conseils de Jean-Marie.

Afin que seul le nombre nécessaire de pages s'imprime, j'ai choisi pour la macro "Impression_francais" - la seule corrigée pour l'instant - sa première proposition :

Code:

ActiveSheet.PageSetup.PrintArea = "$A$1:$F$" & Sheets("Berechnung").range("E13")+12

Je ne suis par contre pas arrivé à résoudre mon deuxième problème.

Je ne sais

  • ni comment
  • ni à quel endroit
utiliser la proposition de Jean-Marie ci-dessous :

..... pour ce qui est de la position de la ligne "Fin Du Prêt", tu dois jouer avec la propriétés PageSetup.FitToPagesTall, qui indique le nombre de pages en hauteur à imprimer, ceci en fonction du nombre de mois.

A ce propos, je dois indiquer que j'ai remis un zéro dans ma formule à place de "Fin Du Prêt" tel que proposé une fois par Mytå. Il faudrait donc plutôt lire maintenant la citation de Jean-Marie de la manière suivante : ........ pour ce qui est de la position de la ligne "0.00" .........

Comme je sens qu'on s'approche de la perfection, je me permets d'insister !

Bonnes salutations à vous tous

Salut le forum

Une autre façon aussi de faire, la ligne contenant 0,00 ne sera pas prise en compte à l'impression.

Sub Impression_francais()
Dim Cellule As Range
    Sheets("Français").Select
    ActiveSheet.PageSetup.PrintArea = ""
    For Each cellule In [D1:D500]
      If cellule.Value Like 0 Then Exit For
    Next cellule
    ActiveSheet.PageSetup.PrintArea = "$A$1:$F$" & cellule.Row - 1
    Application.Dialogs(xlDialogPrint).Show
    Sheets("Berechnung").Select
    Range("G1").Select
End Sub

Mytå

J'AI ENCORE BESOIN D'AIDE !

Bonjour tout le monde,

Merci à Mytå pour sa proposition, mais ce n'est pas vraiment ce que je voudrais.

Selon mon avant-dernier message, dans lequel est inclu un lien pour ma feuille de calcul dans son état actuel, je voudrais que la ligne finale avec les zéros soit imprimée, mais jamais seule sur une page, c'est à dire qu'elle soit "avancée" sur la page précédente au cas ou le nombre de mois en E13 est 36, 84, 132, 180 ou 228 (attention, seule la macro pour imprimer la feuille "Français" est actuellement corrigée).

Apparament il y aurait une solution selon les indications de Jean-Marie

..... pour ce qui est de la position de la ligne "0.00", tu dois jouer avec la propriétés PageSetup.FitToPagesTall, qui indique le nombre de pages en hauteur à imprimer, ceci en fonction du nombre de mois.

mais je ne sais toujours

  • ni comment
  • ni à quel endroit
utiliser cela.

Bon dimanche

Rechercher des sujets similaires à "definir zone impression extensible"