Pourriez-vous m'expliquer pourquoi j'ai cette alerte
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
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 +...
With .PageSetup
.BlackAndWhite = True
.PrintArea = "$A1:M" & n End With
.PrintOut Preview:=True
.Rows.Hidden = False
.Protect Password:="transall", UserInterFaceOnly:=True
End With
@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 :
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 :
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
Est-ce que vous voyez d'où peut venir le problème?
Pourtant ce code fonctionne en effet correctement pour Sylvanu!!!
Au secours
Bonsoir
je regarde le code et je me dis :
pourquoi n=5 en tète de procédure
donc la Boucle commence en n+1 soit l Ligne 6 du tableau !
alors que la plage commence en A1 ?
et l'on imprime depuis A1
Bonne continuation
jean marie
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 :
2- "Problème code VBA "objet requis" Quid du problème initial ?
D'où venait le problème ?
Bonjour ,
Ou alors "Feuil1" et le CodeName et pas le Nom de la feuille.
Voir avec Feuil1.Unprotect .....
Au lieu de Sheets("Feuil1").Unprotect....
Pas évident sans fichier !
Bonne journée
Jean marie
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.
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
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.