Zone d'impression personnalisée en VBA

  • Initiateur de la discussion Initiateur de la discussion beegees
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

beegees

Guest
Bonjour le forum,

J'aimerais créér un zone d'impression avec VBA.

J'aimerais donc sélectionner les cellules A1:BD9 + la ligne 11 par exemple.

La ligne 11 est obtenue par cette ligne de code :

Code:
Rows('11:11').Select
LigneActive = ActiveCell.Row
'je donne la valeur de la ligne active à la variable ligneactive

Code:
ActiveSheet.PageSetup.PrintArea = Rows(LigneActive)

Comment ajouter la référence (A1:BD9) comme zone d'impression supplémentaire à cette ligne ?
Code:
ActiveSheet.PageSetup.PrintArea = Rows(LigneActive)
Il faudrait donc que la zone d'impression soit A1:BD9 + ('11:11').

C'st possible ?

Merci d'avance pour votre aide.

bgs
 
Blunet écrit:
Salut beegees,
La plage A1:BD9 signifie quoi ?
Essaye ceci pour imprimer la plage A1😀9 et la ligne 11.
ActiveSheet.PageSetup.PrintArea = 'A1😀9,11:11'

Ciao

Salut Blunet,

Merci pour ta réponse.

Les cellules A1:BD9 correspondent à des titres de collones

Je ne peux pas mettre ActiveSheet.PageSetup.PrintArea = 'A1😀9,11:11'

car la variable LigneActive que j'ai créé prend le numéro de la ligne en cours et quand le traitement est terminé (l'impression), LigneActive s'incrémente de 1 et passe à la ligne suivante (12:12).

en plus quand j'utilie ce que tu me donnes :

Code:
ActiveSheet.PageSetup.PrintArea = 'A1:D9,11:11'
le problème persiste.

Le problème est en fait qu'il imprime à partir de A6 et non de A1.

Voici le code entier :

Code:
Public Sub PrintLinebyLine()
'
' PrintLinebyLine Macro
' Macro enregistrée le 11/06/2006 par David Dubois
'
Dim LigneActive As Byte
Dim nombreligne As Byte
    
ActiveSheet.PageSetup.CenterHorizontally = True 'centre horizontallement
ActiveSheet.PageSetup.CenterVertically = True 'centre verticallement

    
    Range('A11').Select 'sélectionne A11
Do Until ActiveCell.Value = '' 'tant que la cellule active est différente de numérique
    ActiveCell.Offset(1, 0).Select 'descend d'une ligne
  
Loop

'lorsque ce n'est plus numérique, ça s'arrête
'ici il y'a plusieurs situation qui peuvent se poser : il s'arrête donc sur une case blanche car je lui ai demandé
'mais si juste au-dessus ou deux lignes plus haut l'information n'a rien à voir avec le nombre de ligne à imprimer
' est donc pas numérique, alors on remonte tant que la cellule active est = à du numérique.
If ActiveCell.Value = '' Then 'si la cellule active = rien, on remonte de 1.
ActiveCell.Offset(-1, 0).Select
End If
Do Until IsNumeric(ActiveCell) = True 'tant que ce n'est pas du numérique
    ActiveCell.Offset(-1, 0).Select 'remonte de 1
Loop
    nombreligne = ActiveCell.Value 'la variable nombreligne prend la valeur de la cellule active
    
Dim f
    Rows('11:11').Select 'sélectionne la ligne 11
    For f = 1 To nombreligne 'début du compteur 1 à nombreligne
    LigneActive = ActiveCell.Row 'je donne la valeur de la ligne active à la variable ligneactive
    ActiveSheet.PageSetup.PrintArea = Rows(LigneActive).Address 'la zone d'impression prend la valeur de la variable _
    'Ligneactive

'je me demande si le problème ne vient pas de selection.printout ???
   Selection.PrintOut Copies:=1, Collate:=True 'je sors l'info vers l'imprimante.
    Rows(LigneActive + 1).Select 'descend d'une ligne par rapport à la ligne active
Next
    Range('A11').Select 'sélectionne la cellule A10
    ActiveSheet.PageSetup.PrintArea = ActiveCell.CurrentRegion.Address 'Définit la zone d'impression à tout le document.


End Sub

Merci pour votre aide.

bgs
 
Bonjour beegees, re bonjour Blunet,
bonjour à toutes et à tous 🙂

bgs, tu peux essayer ce code :

Option Explicit

Public Sub PrintLinebyLine()
'
' PrintLinebyLine Macro
' Macro enregistrée le 11/06/2006 par quelqu'un 😉
'

Dim LigneActive As Long
Dim NbLignes As Long
Dim i As Long
Dim Cell As Range
'
  With ActiveSheet.PageSetup
    .CenterHorizontally = True 'centre horizontallement
    .CenterVertically = True 'centre verticallement
    .PrintTitleRows = '$1:$9' ' lignes de titres
    .PrintArea = False ' pas de zone d'impression
  End With

  ' Cell représentera la cellule A10, car base = A11 (voir boucle suivante)
  Set Cell = Range('A10')

  ' tant que la cellule suivante est numérique (1ère vérif. sur A11)
  Do While IsNumeric(Cell.Offset(1, 0).Value)
    'on peut descendre d'une ligne
    Set Cell = Cell.Offset(1, 0)
  Loop

  ' si on a trouvé des valeurs numériques
  If Cell.Row > 10 Then

    ' alors NbLignes prend la valeur de Cell.Value (???)
    NbLignes = Cell.Value

    For i = 1 To NbLignes

      ' on imprime toute les colonnes A à BD de chaque ligne à partir de la ligne 11
      ' (les lignes de titres 1 à 9 seront elles aussi imprimées)

      Range('A' & i + 10 & ':BD' & i + 10).PrintOut Copies:=1, Collate:=True

    Next i

  End If

  ' redéfinit la zone d'impression
  ActiveSheet.PageSetup.PrintArea = Range('A10').CurrentRegion.Address

End Sub

Tiens-nous au courant.

A+ 😉
 
Bonjour Charly2, Bonjour le forum,

Merci pour ton code.

Malheureusement, ça plante au niveau de la boucle Do While... Loop

Il me donne ce message d'erreur :

Erreur d'exécution 1004 :

Erreur définie par l'application ou par l'objet.

J'ai essayé un step by step (F8) et la boucle ne semble jamais se terminer.

Je pense avoir compris, il va jusqu'au bout de la collone (65 535e lignes) et comme il peut pas aller plus bas, il donne un message d'erreur.

Je met la feuille en attaché, cela devrait être plus facile pour débugguer.

Merci encore pour tout.

beegees
 
Bonjour beegees, bonjour Blunet,
bonjour à toutes et à tous 🙂

Oups !!! 😱hmy: Une cellule vide peut être interprétée comme étant numérique ! :S

En modifiant la boucle comme ceci, cela devrait mieux passer :

Do While IsNumeric(Cell.Offset(1, 0)) And (Cell.Offset(1, 0) ‹› '')
  Set Cell = Cell.Offset(1, 0)
Loop

Evite le copier/coller dans le cas présent car les caractères '‹›' ne seraient pas reconnus.

Pour le reste, j'ai testé avec PrintPreview, en plaçant le nombre de ligne à imprimer dans la dernière cellule de la colonne A, et j'obtiens bien les colonnes de A à BD pour chaque ligne à partir de la ligne 11, avec les lignes de titres en lignes 1 à 9.

A+ 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
236
Réponses
8
Affichages
535
Réponses
4
Affichages
799
Réponses
12
Affichages
1 K
Réponses
7
Affichages
3 K
Retour