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

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

Dernière édition:
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
 
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 :
 
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
🤯🤯🤯
 
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 ?
 
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

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

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

- 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
410
Réponses
3
Affichages
462
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
79
Réponses
3
Affichages
537
Réponses
2
Affichages
375
Réponses
2
Affichages
405
Réponses
3
Affichages
240
Retour