Autres Problème code VBA "objet requis"

rosabelle

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

natorp

XLDnaute Accro
Bonjour Rosabelle

With .PageSetup
.BlackAndWhite = True
.PrintArea = "$A1:M" & n
End With
.PrintOut Preview:=True
.Rows.Hidden = False
.Protect Password:="transall", UserInterFaceOnly:=True
End With

Ni aurait-il pas un "End With" en trop ?

Cordialement, Gérard
 

BrunoM45

XLDnaute Barbatruc
Bonjour Rosabelle, Natorp

@natorp, non le problème n'est pas là, il y a bien ce qu'il faut en "End With"

Quand on indente les lignes, on le voit bien
VB:
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

@rosabelle, le mot de passe de départ "toto", n'est pas le même que celui de fin "transall"... Vous allez avoir un gros souci ;)

Sinon, quand vous faites du pas à pas (F8) ou ce situe l'erreur ?

@+
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Rosabelle, Natorp, Bruno,
@rosabelle, vous ne pourriez pas fournir un petit fichier test ?
Comme le dit Bruno, il y a un pb de mot de passe.
Utilisée telle quelle, votre macro répond :
1634195636595.png

Donc votre "Objet requis" ne vient pas de cette macro.
Si on rectifie le mot de passe initial en "transall", votre macro fonctionne correctement. Voir PJ.
Donc votre pb vient d'autre part. :)
[Edit] Quand une ligne macro est erronée, XL répond toujours par une fenêtre comme ci dessus avec un bouton "Débogage". Comme votre message d'erreur ne comporte pas ce bouton, l'erreur n'est pas une erreur de syntaxe mais de déclaration :
 

Pièces jointes

  • Rosabelle.xlsm
    17.5 KB · Affichages: 8
Dernière édition:

rosabelle

XLDnaute Nouveau
Bonjour,
Merci beaucoup pour l'attention portée à mon message.
J'ai inséré le code ci-dessous dans un module, crée un bouton contrôle de formulaire auquel j'ai affecté la macro imprimer, protégé mon fichier avec le bon mot de passe.
Je vais dans Macros/ pas à pas détaillé
j'ai les message suivants :

Ensuite j'ai ceci
1634225175162.png

1634225207804.png


Est-ce que vous voyez d'où peut venir le problème?
Pourtant ce code fonctionne en effet correctement pour Sylvanu!!!
Au secours
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Il vous manque le point avant Unprotect. C'est important car pour le VBA cela signifie qu'il se rattache au With, donc il l'interprète comme :
VB:
Sheets("Feuil1").Unprotect Password:="transall"
D'ailleurs, vous l'avez mis pour le Protect, à la fin.
Protect et Unprotect doivent être attachés à un sheet :
 

rosabelle

XLDnaute Nouveau
Il vous manque le point avant Unprotect. C'est important car pour le VBA cela signifie qu'il se rattache au With, donc il l'interprète comme :
VB:
Sheets("Feuil1").Unprotect Password:="transall"
D'ailleurs, vous l'avez mis pour le Protect, à la fin.
Protect et Unprotect doivent être attachés à un sheet :
Bonsoir,
Je suis vraiment navrée mais ça ne fonctionne pas même en mettant le point devant Unprotect
🤯🤯🤯
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
1- Après quelques essais, votre erreur vient probablement du fait que Feuil1 n'existe pas ou n'existe plus, comme dans cet exemple où j'ai dupliqué Feuil1 puis détruit cette feuille, la macro fait :
1634276249455.png

2- "Problème code VBA "objet requis" Quid du problème initial ?
D'où venait le problème ?
 

rosabelle

XLDnaute Nouveau
Bonjour,
Merci pour vos réponses.
Comme vous l'avez compris je suis novice et je fais qu'utiliser les codes que vous avez pu me donner.
En l'occurrence celui-ci m'a été donné en 2016 je crois par @job75 et je le garde précieusement.
Je l'utilise occasionnellement qd je dois créer un tableur.
Je dois l'adapter un peu.
J'ai bien pensé que :
  • Feuil1 n'existait pas et c'était le cas j'avais donc mis Feuil2
  • que n="5" n'allait pas et ai testé en remettant 9
  • Est-ce que la présence de l'image macro" "remise à zéro" lui pose un problème?
Vous me demanderez pourquoi mettre cette macro spécialement, elle n'a pas beaucoup d'intérêt dans ce tableau qui doit être édité dans l'intégralité mais je voulais faire cet exercice pour me refaire la main.

Je mets mon fichier test .

Bonne journée à vous
 

Pièces jointes

  • Test imprimer calculette C 15 10 2021.xlsm
    73.7 KB · Affichages: 2

rosabelle

XLDnaute Nouveau
Re,
Merci @sylvanu
En effet ça marche
Je pense que je ne savais pas affecter la macro au bouton commande de formulaire.
En revanche pourquoi est-ce que ça n'imprime pas tout le tableau ou tout au moins jusqu'à la ligne 43 sur le fichier test puisqu il y a des xxx d'inscrit , le code ne dit pas d'imprimer dès lors qu'il rencontre qq chose d'écrit?
Je joins à nouveau le fichier
 

Pièces jointes

  • Test imprimer calculette C 15 10 2021.xlsm
    77.3 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • Test imprimer calculette C 15 10 2021 (V2).xlsm
    75.7 KB · Affichages: 1

Discussions similaires

Réponses
2
Affichages
295
Haut Bas