EFFACER VALEUR DE VARIABLE D'IMPRESSION [Résolu]

Signaler
Messages postés
10
Date d'inscription
jeudi 5 octobre 2006
Statut
Membre
Dernière intervention
4 janvier 2008
-
Messages postés
10
Date d'inscription
jeudi 5 octobre 2006
Statut
Membre
Dernière intervention
4 janvier 2008
-
Bonjour, et bonne année 2008 (eh oui déja)

Voila je poste une partie d'un code qui m'ennuie.

Je cherche à effacer une variable qui agit lors de l'impression de mon document EXCEL.
Le code me permet de déterminé la longeur de mon tableau (plus ou moins grand selon les situations). La longueur est déterminée par la cellule la plus basse  qui existe (xlLastCell).

Il permet également de fermer le tableau a chaque saut de page ( avec une ligne qui apparait). Cette ligne est enlevée après l'impression  pour éviter des problèmes si les sauts de pages sont modifiés.
Il lance l'impression (sous edocprinter pdf, ce sont des document plus ou moins officiels).
Ok jusque la tout va bien.

Mais voila si je modifie mon tableau après avoir fait une premièere impression ça va plus. Soit j'agrandit le tableau et tout va bien le programme reconnait la derniere cellule et redimensionne l'impression............mais quand je reduit le tableau d'une page ou deux (ou 450) il me laisse la longueur initiale. Et donc lors de l'impression je me retrouve avec des pages blanches qui n'ont rien a faire là et que je dois supprimé.

Voici le code :

Private Sub CommandButton8_Click()


Dim premcell
Dim derncell
Dim msg
Dim HPB
Dim style As Long
On Error GoTo gestionnaireErreur





'détermine le point haut et le point bas de l'impression

premcell = Range("A1").Address
derncell = ActiveCell.SpecialCells(xlLastCell).Offset(0, -1).Address
ActiveSheet.PageSetup.PrintArea = premcell & ":" & derncell
Range(derncell).Select





'met des lignes de fin de tableau à chaques pied de page.

For Each HPB In ActiveSheet.HPageBreaks
With HPB.Location.Item(0).cells
.Resize(1, 8).Borders(xlEdgeBottom).LineStyle = xlContinuous
End With
Next HPB



'ouvre la boite d'impression avec aperçu, et imprimante active edocprinter

ActiveWindow.SelectedSheets.PrintOut Preview:=True, ActivePrinter:="eDocPrinter PDF Pro", Collate _
:=True



'enlève tout les traits de fin de tableau

For Each HPB In ActiveSheet.HPageBreaks
With HPB.Location.Item(0).cells
.Resize(1, 8).Borders(xlEdgeBottom).LineStyle = xlNone
End With
Next HPB



'active le dernier point d'impression a H1

ActiveSheet.PageSetup.PrintArea = ""





'gestion erreur

gestionnaireErreur:
If Err.Number = 1004 Then
msg = "Impression Annulée"
MsgBox msg, , "Création d'un fichier Pdf", Err.HelpFile, Err.HelpContext
End If
Err.Clear


 


End Sub

Voila, alors je crois que c'est un problème de variable qui garde en mémoire la valeur initiale de derncell (dernière cellule---fin du tableau)

mais c'est peut etre la valeurs des sauts de pages qui influance la longueur d'impression....parce que j'ai beau tout effacer et même redéfinir une nouvelle valeur pour derncell ........rien n'y fait!!

Voila si vous avez la réponse je suis preneur.
Merci.

3 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Personnellement, pour derncell, j'irais comme ceci
derncell = Cells(Rows.Count, "A").End(xlUp).Address
ou encore
derncell = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Address

Ta méthode, si je ne me trompe pas, tient compte des lignes éditées plus bas et effacées comme étant encore existantes. Donc, même si tu effaces les dernières lignes elles seront encore comptabilisées.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

essayes ça :

Dim PrintZone As Range
Set PrintZone = Range(ActiveSheet.PageSetup.PrintArea)
PrintZone.Select
ActiveWindow.Selection.PrintOut Preview:=True, ActivePrinter:="eDocPrinter PDF Pro", Collate _
:=True

A+
Messages postés
10
Date d'inscription
jeudi 5 octobre 2006
Statut
Membre
Dernière intervention
4 janvier 2008

Yo,
merci pour vos réponse.
Alors, bigfish la printzone que tu me proposes reviens au même que ce que j'avais fait, malheureusement le problème ne vient pas de la...
merci quand même


Mais le problème venait bien de la valeur de la dernière cellule et Mpi ton astuce marche .....avec qq modifications
En fait grace à ta formule (que je ne comprend pas d'ailleurs) :
derncell = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Address
 j'isole la dernière cellule je récupère l'adresse et je la traite pour que le tableau finisse sur la colonne "H". (il doit impérativement finir par cette collonne). Donc je sort le numéro de ligne et je refait une variante avec la case H (dernligne). et ça marche .
Maintenant je peux modifier la longueur de mon tableau dans tous les sens et le programme me cale l'impression la ou il faut ...
Merci.