Définir une zone d'impression extensible

Pour toutes vos questions à propos d'Excel ...

Définir une zone d'impression extensible

Messagepar Yvouille » 05 Juin 2007, 22:46

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.

http://cjoint.com/?gfwHUptHgn

Comment dois-je m'y prendre ?
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2074
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

Messagepar Mytå » 05 Juin 2007, 23:30

Salut le Forum

Yvouille avec une petite macro associée à un bouton.
Code: Tout sélectionner
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å
Mytå
 

Messagepar Mytå » 06 Juin 2007, 00:58

Salut le forum

Pour l'impression inverse les lignes de code en commentaire
Code: Tout sélectionner
'ActiveWindow.SelectedSheets.PrintPreview
ActiveWindow.SelectedSheets.PrintOut Copies:=1


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

Mytå
Mytå
 

Messagepar thibo » 06 Juin 2007, 13:48

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.

@+
thibo
Passionné d'Excel
 
Messages: 3092
Inscription: 03 Mai 2007, 18:51
Version Excel: Excel 2003 + 2007

Messagepar Yvouille » 08 Juin 2007, 21:28

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.

http://cjoint.com/?giu4Q8LiCK
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2074
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

Messagepar Mytå » 09 Juin 2007, 01:21

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
Code: Tout sélectionner
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å
Mytå
 

Messagepar Yvouille » 09 Juin 2007, 08:51

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).

http://cjoint.com/?gjiOH0xVYV

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 ?
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2074
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

Messagepar JeanMarie » 09 Juin 2007, 09:52

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,
Code: Tout sélectionner
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"
Code: Tout sélectionner
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
JeanMarie
Membre fidèle
 
Messages: 281
Inscription: 03 Déc 2006, 13:41

Messagepar Yvouille » 09 Juin 2007, 11:17

Rebonjour,

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

http://cjoint.com/?gjk25fkQ7I

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
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2074
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

Messagepar Mytå » 10 Juin 2007, 01:04

Salut le forum

Une autre façon aussi de faire, la ligne contenant 0,00 ne sera pas prise en compte à l'impression.
Code: Tout sélectionner
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å
Mytå
 

Suivante

Retourner vers Excel - VBA

 


  • Sujets similaires
    Réponses
    Vus
    Dernier message

Utilisateurs en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Google [Bot], Google Adsense [Bot] et 17 invités