Autres Problème code VBA "objet requis"

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 !

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

Discussions similaires

Réponses
5
Affichages
406
Réponses
3
Affichages
459
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
78
Réponses
3
Affichages
535
Réponses
2
Affichages
375
Réponses
2
Affichages
405
Réponses
3
Affichages
239
Retour