Autres Problème code VBA "objet requis"

rosabelle

XLDnaute Junior
Bonjour,

Pourriez-vous m'expliquer pourquoi j'ai cette alerte
1634190433652.png


J'ai rentré le code suivant pour imprimer une page excel
Y a t il une erreur dans ce code
J'ai par ailleurs créé un bouton commande auquel j'ai affecté la macro


Public Sub Imprimer()
Dim n As Long

n = 5
With Feuil1
.Unprotect Password:="toto"
Do
If .Cells(n + 1, 1).Value = "" Then .Rows(n + 1).Hidden = True
n = n + 1
Loop While .Cells(n + 1, 1).Formula <> ""
With .PageSetup
.BlackAndWhite = True
.PrintArea = "$A1:M" & n
End With
.PrintOut Preview:=True
.Rows.Hidden = False
.Protect Password:="transall", UserInterFaceOnly:=True
End With

End Sub

Merci par avance
Bonne journée
 
Solution
Votre Loop while s'arrête sur la première cellule vide :
VB:
Loop While .Cells(n + 1, 1).Formula <> ""
donc en ligne 12 puisque A10 et A11 ne sont pas vides.

Si vous voulez afficher la zone utile, il faut partir de la fin et remonter jusqu'à qu'une cellule soit non vide. Alors vous pouvez faire :
Code:
Public Sub ImprimerSylvanu()
  Dim n As Long
  Application.ScreenUpdating = False
  n = Range("A65500").End(xlUp).Row     ' Dernière cellule occupée
  With Feuil2
    .Unprotect Password:="toto"
    Do
      n = n - 1                         ' On remonte
      a = .Cells(n, 1).Value
    Loop While .Cells(n, 1).Value = ""  ' On sort si la cellule est non vide
    With .PageSetup
      .BlackAndWhite = True
      .PrintArea = "$A1:M" & n +...

rosabelle

XLDnaute Junior
Votre Loop while s'arrête sur la première cellule vide :
VB:
Loop While .Cells(n + 1, 1).Formula <> ""
donc en ligne 12 puisque A10 et A11 ne sont pas vides.

Si vous voulez afficher la zone utile, il faut partir de la fin et remonter jusqu'à qu'une cellule soit non vide. Alors vous pouvez faire :
Code:
Public Sub ImprimerSylvanu()
  Dim n As Long
  Application.ScreenUpdating = False
  n = Range("A65500").End(xlUp).Row     ' Dernière cellule occupée
  With Feuil2
    .Unprotect Password:="toto"
    Do
      n = n - 1                         ' On remonte
      a = .Cells(n, 1).Value
    Loop While .Cells(n, 1).Value = ""  ' On sort si la cellule est non vide
    With .PageSetup
      .BlackAndWhite = True
      .PrintArea = "$A1:M" & n + 1
    End With
    .PrintPreview
    .Protect Password:="toto", UserInterFaceOnly:=True
  End With
  Application.ScreenUpdating = True
End Sub
J'ai mis la macro dans un module, elle n'a rien à faire dans la feuille.
Bonsoir,
Merci beaucoup @sylvanu !
Ce code fonctionne parfaitement, je le garde aussi précieusement.
Il est plus adapté pour la configuration de ce tableur.
Quelle réactivité sur ce forum, vraiment bravo à tous
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh