Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Re: zone d'impression automatique

4 réponses
Avatar
alaska
Bonjour,

Je te remercie DOCM pour ta formule, je l'ai recopié dan le VBA de ma
feuille
devis sous la phrase:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Par contre il me met un message d'erreur: "erreur de compilation end sub
attendu"
Je n'ai rien modifié dans la formule.

Désolée!

Bonne journée
"docm" <docmarti@spamcolba.net> a écrit dans le message de news:
%23gI63oPJFHA.2716@TK2MSFTNGP15.phx.gbl...
> Voici qui me semble répondre à ta question subsidiaire.
>
> Sub Set_Print_Area()
> LigneDesFormules = 25
> Dim DerniereCellule As Range
> Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0)
> Do Until Application.Count(DerniereCellule.EntireRow) <> 0
> Set DerniereCellule = DerniereCellule.Offset(-1, 0)
> Loop
> Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
> Set DerniereCellule = DerniereCellule.Offset(0, -1)
> Loop
>
> For y = DerniereCellule.Row To LigneDesFormules Step -1
> ok = False
>
> For x = 1 To DerniereCellule.Column
> Cells(y, x).Select
> If Cells(y, x).Text <> "" Then
> If Cells(y, x).Value >= 0 Then
> ok = True
> Exit For
> End If
> End If
> Next
> If ok = False Then
> Set DerniereCellule = DerniereCellule.Offset(-1, 0)
> Else
> Exit For
> End If
> Next
>
> For x = DerniereCellule.Column To 1 Step -1
> ok = False
> For y = LigneDesFormules To DerniereCellule.Row
> Cells(y, x).Select
> If Cells(y, x).Text <> "" Then
> If Cells(y, x).Value >= 0 Then
> ok = True
> Exit For
> End If
> End If
> Next
> If ok = False Then
> Set DerniereCellule = DerniereCellule.Offset(0, -1)
> Else
> Exit For
> End If
> Next
>
> ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
> DerniereCellule).Address
> End Sub
>
>
> "alaska" <alaska.afp@tiscali.fr> wrote in message
> news:#fJz8IOJFHA.2764@tk2msftngp13.phx.gbl...
>> Je me suis réjouis trop vite, effectivement cela fonctionne mais mon
> soucis
>> est que j'ai des formules à partir de la ligne 25, et la zone
> d'impression
>> considère ces formules comme du texte (c'est évident en réalité).Quand
>> ces
>> formules on un résultat négatif rien ne doit s'inscrire sur ma feuille
> devis
>> à partir de la ligne 25, sinon un texte de plusieurs s'inscrit et c'est
>> là
>> que rentre en jeux ma zone d'impression automatique. Comment m'en sortir?
>>
>> Peut-on pas faire autrement et au lieu de mettre des formules dans ma
>> feuille devis, je les mets dans ma feuille1 et
> =si(feuille!1C3>0;"blablabla"
>> dans devis!f25;"") Dans cette solution il me manque simplement la formule
>> pour dire à mettre dans l'autre feuille.
>>
>> merci et désolée pour la complexité de ma demande.
>>
>> "docm" <docmarti@spamcolba.net> a écrit dans le message de news:
>> uJ%23sePKJFHA.656@TK2MSFTNGP14.phx.gbl...
>> > Tu ne peux pas utiliser devis.UsedRange.Address
>> > car l'objet, ce n'est pas devis. C'est Feuil2.
>> >
>> > Donc tu peux dire
>> > ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address
>> >
>> > Tu peux dire aussi
>> > ActiveSheet.PageSetup.PrintArea = Worksheets("devis").UsedRange.Address
>> >
>> > ou encore
>> > ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address
>> >
>> > ou encore
>> > Feuil2.PageSetup.PrintArea = Feuil2.UsedRange.Address
>> >
>> > "guizmo" <fortier.lagrue@free.fr> wrote in message
>> > news:#ZoF9#JJFHA.3332@TK2MSFTNGP15.phx.gbl...
>> >> Bonjour,
>> >>
>> >> Je te remercie pour ta réponse par contre, je suis débutante en VBA ,
>> > voici
>> >> la formule que j'ai mis dans Worksheet: ma feuille2 se nomme DEVIS.
>> >>
>> >> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>> >> ActiveSheet.PageSetup.PrintArea = devis.UsedRange.Address
>> >>
>> >> End Sub
>> >>
>> >> Et un message d'erreur me met "erreur d'exécution '424' objet requis"
>> >>
>> >> Pour répondre à la question de Michdenis sur ma feuille2(devis) : De
>> >> la
>> >> celulle A jusqu'a G et de la ligne 1 à 24, les éléments sont rentrés
>> >> en
>> > dur.
>> >> A partir de la ligne 25, les éléments s'inscrivent par le biais de
>> > formules.
>> >> Puis à partir de l ligne 84 il y'a 3 lignes d'élément en dur. Est ce
>> >> assez
>> >> explicite?
>> >>
>> >> Merci à vous deux
>> >>
>> >>
>> >>
>> >>
>> >> "docm" <docmarti@spamcolba.net> a écrit dans le message de news:
>> >> uAZ9juGJFHA.1176@TK2MSFTNGP15.phx.gbl...
>> >> > Bonjour.
>> >> >
>> >> > Ceci devrait redéfinir la zone d'impression.
>> >> >
>> >> > ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address
>> >> >
>> >> >
>> >> >
>> >> > "alaska" <alaska.afp@tiscali.fr> wrote in message
>> >> > news:#fUSVZGJFHA.2700@TK2MSFTNGP09.phx.gbl...
>> >> > > Bonjour à tous,
>> >> > >
>> >> > > Dans un classeur excel, j'ai feuille1 et feuille2. Ma feuille2 se
>> >> remplit
>> >> > > automatiquement par rapport aux données de la feuille 1. Ma
> feuille2
>> >> peut
>> >> > > avoir 4 lignes comme 100lignes. J'aurais besoin d'une macro ou
>> > procédure
>> >> > > afin que la zone d'impression s'adapte à la longueur du texte car
>> > sinon
>> >> > pour
>> >> > > 3 lignes j'ai 3 feuilles qui sortent, pas cool!
>> >> > >
>> >> > > En vous remerciant par avance
>> >> > > bonne journée
>> >> > >
>> >> > >
>> >> >

4 réponses

Avatar
MichDenis
Bonjour Alaska,

Je crois que tu as omis de copier la dernière ligne de la procédure : End sub à la procédure !


Salutations!


"alaska" a écrit dans le message de news:
Bonjour,

Je te remercie DOCM pour ta formule, je l'ai recopié dan le VBA de ma
feuille
devis sous la phrase:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Par contre il me met un message d'erreur: "erreur de compilation end sub
attendu"
Je n'ai rien modifié dans la formule.

Désolée!

Bonne journée
"docm" a écrit dans le message de news:
%
Voici qui me semble répondre à ta question subsidiaire.

Sub Set_Print_Area()
LigneDesFormules = 25
Dim DerniereCellule As Range
Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0)
Do Until Application.Count(DerniereCellule.EntireRow) <> 0
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Loop
Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Loop

For y = DerniereCellule.Row To LigneDesFormules Step -1
ok = False

For x = 1 To DerniereCellule.Column
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Else
Exit For
End If
Next

For x = DerniereCellule.Column To 1 Step -1
ok = False
For y = LigneDesFormules To DerniereCellule.Row
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Else
Exit For
End If
Next

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
DerniereCellule).Address
End Sub


"alaska" wrote in message
news:#
Je me suis réjouis trop vite, effectivement cela fonctionne mais mon
soucis

est que j'ai des formules à partir de la ligne 25, et la zone
d'impression

considère ces formules comme du texte (c'est évident en réalité).Quand
ces
formules on un résultat négatif rien ne doit s'inscrire sur ma feuille
devis

à partir de la ligne 25, sinon un texte de plusieurs s'inscrit et c'est

que rentre en jeux ma zone d'impression automatique. Comment m'en sortir?

Peut-on pas faire autrement et au lieu de mettre des formules dans ma
feuille devis, je les mets dans ma feuille1 et
=si(feuille!1C3>0;"blablabla"

dans devis!f25;"") Dans cette solution il me manque simplement la formule
pour dire à mettre dans l'autre feuille.

merci et désolée pour la complexité de ma demande.

"docm" a écrit dans le message de news:
uJ%
Tu ne peux pas utiliser devis.UsedRange.Address
car l'objet, ce n'est pas devis. C'est Feuil2.

Donc tu peux dire
ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address

Tu peux dire aussi
ActiveSheet.PageSetup.PrintArea = Worksheets("devis").UsedRange.Address

ou encore
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address

ou encore
Feuil2.PageSetup.PrintArea = Feuil2.UsedRange.Address

"guizmo" wrote in message
news:#ZoF9#
Bonjour,

Je te remercie pour ta réponse par contre, je suis débutante en VBA ,
voici

la formule que j'ai mis dans Worksheet: ma feuille2 se nomme DEVIS.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.PageSetup.PrintArea = devis.UsedRange.Address

End Sub

Et un message d'erreur me met "erreur d'exécution '424' objet requis"

Pour répondre à la question de Michdenis sur ma feuille2(devis) : De
la
celulle A jusqu'a G et de la ligne 1 à 24, les éléments sont rentrés
en
dur.

A partir de la ligne 25, les éléments s'inscrivent par le biais de
formules.

Puis à partir de l ligne 84 il y'a 3 lignes d'élément en dur. Est ce
assez
explicite?

Merci à vous deux




"docm" a écrit dans le message de news:

Bonjour.

Ceci devrait redéfinir la zone d'impression.

ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address



"alaska" wrote in message
news:#
Bonjour à tous,

Dans un classeur excel, j'ai feuille1 et feuille2. Ma feuille2 se
remplit


automatiquement par rapport aux données de la feuille 1. Ma
feuille2





peut
avoir 4 lignes comme 100lignes. J'aurais besoin d'une macro ou
procédure



afin que la zone d'impression s'adapte à la longueur du texte car
sinon



pour
3 lignes j'ai 3 feuilles qui sortent, pas cool!

En vous remerciant par avance
bonne journée















Avatar
alaska
Bonsoir Michdenis,

Je me suis contentée de faire un copier/coller de la procédure de domc.
Ci-joint la procédue que j'ai collé dans le VBE de ma feuille devis, il y'a
bien le end sub à la fin: Par contre, suite au message d'erreur, cette
phrase (en dernier avant end sub) est mise en rouge dans la procédure.

Merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sub Set_Print_Area()
LigneDesFormules = 25
Dim DerniereCellule As Range
Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0)
Do Until Application.Count(DerniereCellule.EntireRow) <> 0
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Loop
Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Loop

For y = DerniereCellule.Row To LigneDesFormules Step -1
ok = False

For x = 1 To DerniereCellule.Column
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Else
Exit For
End If
Next

For x = DerniereCellule.Column To 1 Step -1
ok = False
For y = LigneDesFormules To DerniereCellule.Row
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Else
Exit For
End If
Next

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
DerniereCellule).Address
End Sub

End Sub

"MichDenis" a écrit dans le message de news:
O5lwu$
Bonjour Alaska,

Je crois que tu as omis de copier la dernière ligne de la procédure : End
sub à la procédure !


Salutations!


"alaska" a écrit dans le message de news:

Bonjour,

Je te remercie DOCM pour ta formule, je l'ai recopié dan le VBA de ma
feuille
devis sous la phrase:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Par contre il me met un message d'erreur: "erreur de compilation end sub
attendu"
Je n'ai rien modifié dans la formule.

Désolée!

Bonne journée
"docm" a écrit dans le message de news:
%
Voici qui me semble répondre à ta question subsidiaire.

Sub Set_Print_Area()
LigneDesFormules = 25
Dim DerniereCellule As Range
Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0)
Do Until Application.Count(DerniereCellule.EntireRow) <> 0
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Loop
Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Loop

For y = DerniereCellule.Row To LigneDesFormules Step -1
ok = False

For x = 1 To DerniereCellule.Column
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Else
Exit For
End If
Next

For x = DerniereCellule.Column To 1 Step -1
ok = False
For y = LigneDesFormules To DerniereCellule.Row
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Else
Exit For
End If
Next

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
DerniereCellule).Address
End Sub


"alaska" wrote in message
news:#
Je me suis réjouis trop vite, effectivement cela fonctionne mais mon
soucis

est que j'ai des formules à partir de la ligne 25, et la zone
d'impression

considère ces formules comme du texte (c'est évident en réalité).Quand
ces
formules on un résultat négatif rien ne doit s'inscrire sur ma feuille
devis

à partir de la ligne 25, sinon un texte de plusieurs s'inscrit et c'est

que rentre en jeux ma zone d'impression automatique. Comment m'en
sortir?

Peut-on pas faire autrement et au lieu de mettre des formules dans ma
feuille devis, je les mets dans ma feuille1 et
=si(feuille!1C3>0;"blablabla"

dans devis!f25;"") Dans cette solution il me manque simplement la
formule
pour dire à mettre dans l'autre feuille.

merci et désolée pour la complexité de ma demande.

"docm" a écrit dans le message de news:
uJ%
Tu ne peux pas utiliser devis.UsedRange.Address
car l'objet, ce n'est pas devis. C'est Feuil2.

Donc tu peux dire
ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address

Tu peux dire aussi
ActiveSheet.PageSetup.PrintArea =
Worksheets("devis").UsedRange.Address

ou encore
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address

ou encore
Feuil2.PageSetup.PrintArea = Feuil2.UsedRange.Address

"guizmo" wrote in message
news:#ZoF9#
Bonjour,

Je te remercie pour ta réponse par contre, je suis débutante en VBA ,
voici

la formule que j'ai mis dans Worksheet: ma feuille2 se nomme DEVIS.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.PageSetup.PrintArea = devis.UsedRange.Address

End Sub

Et un message d'erreur me met "erreur d'exécution '424' objet requis"

Pour répondre à la question de Michdenis sur ma feuille2(devis) : De
la
celulle A jusqu'a G et de la ligne 1 à 24, les éléments sont rentrés
en
dur.

A partir de la ligne 25, les éléments s'inscrivent par le biais de
formules.

Puis à partir de l ligne 84 il y'a 3 lignes d'élément en dur. Est ce
assez
explicite?

Merci à vous deux




"docm" a écrit dans le message de news:

Bonjour.

Ceci devrait redéfinir la zone d'impression.

ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address



"alaska" wrote in message
news:#
Bonjour à tous,

Dans un classeur excel, j'ai feuille1 et feuille2. Ma feuille2 se
remplit


automatiquement par rapport aux données de la feuille 1. Ma
feuille2





peut
avoir 4 lignes comme 100lignes. J'aurais besoin d'une macro ou
procédure



afin que la zone d'impression s'adapte à la longueur du texte car
sinon



pour
3 lignes j'ai 3 feuilles qui sortent, pas cool!

En vous remerciant par avance
bonne journée




















Avatar
MichDenis
Bonjour Alaska,

Cette section : DerniereCellule).Address soit être reportée (ajoutée) à la ligne précédente. C'est le service de
messagerie qui a fait une coupure dans la ligne de code à un endroit intempestif.


Salutations!





"alaska" a écrit dans le message de news: %
Bonsoir Michdenis,

Je me suis contentée de faire un copier/coller de la procédure de domc.
Ci-joint la procédue que j'ai collé dans le VBE de ma feuille devis, il y'a
bien le end sub à la fin: Par contre, suite au message d'erreur, cette
phrase (en dernier avant end sub) est mise en rouge dans la procédure.

Merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sub Set_Print_Area()
LigneDesFormules = 25
Dim DerniereCellule As Range
Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0)
Do Until Application.Count(DerniereCellule.EntireRow) <> 0
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Loop
Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Loop

For y = DerniereCellule.Row To LigneDesFormules Step -1
ok = False

For x = 1 To DerniereCellule.Column
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Else
Exit For
End If
Next

For x = DerniereCellule.Column To 1 Step -1
ok = False
For y = LigneDesFormules To DerniereCellule.Row
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Else
Exit For
End If
Next

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
DerniereCellule).Address
End Sub

End Sub

"MichDenis" a écrit dans le message de news:
O5lwu$
Bonjour Alaska,

Je crois que tu as omis de copier la dernière ligne de la procédure : End
sub à la procédure !


Salutations!


"alaska" a écrit dans le message de news:

Bonjour,

Je te remercie DOCM pour ta formule, je l'ai recopié dan le VBA de ma
feuille
devis sous la phrase:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Par contre il me met un message d'erreur: "erreur de compilation end sub
attendu"
Je n'ai rien modifié dans la formule.

Désolée!

Bonne journée
"docm" a écrit dans le message de news:
%
Voici qui me semble répondre à ta question subsidiaire.

Sub Set_Print_Area()
LigneDesFormules = 25
Dim DerniereCellule As Range
Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0)
Do Until Application.Count(DerniereCellule.EntireRow) <> 0
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Loop
Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Loop

For y = DerniereCellule.Row To LigneDesFormules Step -1
ok = False

For x = 1 To DerniereCellule.Column
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Else
Exit For
End If
Next

For x = DerniereCellule.Column To 1 Step -1
ok = False
For y = LigneDesFormules To DerniereCellule.Row
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Else
Exit For
End If
Next

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
DerniereCellule).Address
End Sub


"alaska" wrote in message
news:#
Je me suis réjouis trop vite, effectivement cela fonctionne mais mon
soucis

est que j'ai des formules à partir de la ligne 25, et la zone
d'impression

considère ces formules comme du texte (c'est évident en réalité).Quand
ces
formules on un résultat négatif rien ne doit s'inscrire sur ma feuille
devis

à partir de la ligne 25, sinon un texte de plusieurs s'inscrit et c'est

que rentre en jeux ma zone d'impression automatique. Comment m'en
sortir?

Peut-on pas faire autrement et au lieu de mettre des formules dans ma
feuille devis, je les mets dans ma feuille1 et
=si(feuille!1C3>0;"blablabla"

dans devis!f25;"") Dans cette solution il me manque simplement la
formule
pour dire à mettre dans l'autre feuille.

merci et désolée pour la complexité de ma demande.

"docm" a écrit dans le message de news:
uJ%
Tu ne peux pas utiliser devis.UsedRange.Address
car l'objet, ce n'est pas devis. C'est Feuil2.

Donc tu peux dire
ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address

Tu peux dire aussi
ActiveSheet.PageSetup.PrintArea >>> > Worksheets("devis").UsedRange.Address

ou encore
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address

ou encore
Feuil2.PageSetup.PrintArea = Feuil2.UsedRange.Address

"guizmo" wrote in message
news:#ZoF9#
Bonjour,

Je te remercie pour ta réponse par contre, je suis débutante en VBA ,
voici

la formule que j'ai mis dans Worksheet: ma feuille2 se nomme DEVIS.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.PageSetup.PrintArea = devis.UsedRange.Address

End Sub

Et un message d'erreur me met "erreur d'exécution '424' objet requis"

Pour répondre à la question de Michdenis sur ma feuille2(devis) : De
la
celulle A jusqu'a G et de la ligne 1 à 24, les éléments sont rentrés
en
dur.

A partir de la ligne 25, les éléments s'inscrivent par le biais de
formules.

Puis à partir de l ligne 84 il y'a 3 lignes d'élément en dur. Est ce
assez
explicite?

Merci à vous deux




"docm" a écrit dans le message de news:

Bonjour.

Ceci devrait redéfinir la zone d'impression.

ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address



"alaska" wrote in message
news:#
Bonjour à tous,

Dans un classeur excel, j'ai feuille1 et feuille2. Ma feuille2 se
remplit


automatiquement par rapport aux données de la feuille 1. Ma
feuille2





peut
avoir 4 lignes comme 100lignes. J'aurais besoin d'une macro ou
procédure



afin que la zone d'impression s'adapte à la longueur du texte car
sinon



pour
3 lignes j'ai 3 feuilles qui sortent, pas cool!

En vous remerciant par avance
bonne journée




















Avatar
alaska
Re-bonjour,

je commence à craquer!!!!!.
Donc, j'ai collé DerniereCellule) à la ligne précédente: De ce côté là
c'est ok, elle ne sort plus en rouge mais j'ai toujours le même message
d'erreur :"erreur de compilation end sub attendu" et il me met en jaune avec
une flèche devant la première phrase (qui n'est pas dans la formule de docm
mais qui se rajoute toujours quand on ouvre WORKSHEET : Private Sub
Worksheet_SelectionChange(ByVal Target As Range)
Visiblement cela ne lui plait pas! Par contre, j'en ai marre; sur cette
procédure Excel est capricieux! bon d'accord je suis un peu nulle aussi!

merci d'avance






"MichDenis" a écrit dans le message de news:

Bonjour Alaska,

Cette section : DerniereCellule).Address soit être reportée (ajoutée)
à la ligne précédente. C'est le service de
messagerie qui a fait une coupure dans la ligne de code à un endroit
intempestif.


Salutations!





"alaska" a écrit dans le message de news:
%
Bonsoir Michdenis,

Je me suis contentée de faire un copier/coller de la procédure de domc.
Ci-joint la procédue que j'ai collé dans le VBE de ma feuille devis, il
y'a
bien le end sub à la fin: Par contre, suite au message d'erreur, cette
phrase (en dernier avant end sub) est mise en rouge dans la procédure.

Merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sub Set_Print_Area()
LigneDesFormules = 25
Dim DerniereCellule As Range
Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0)
Do Until Application.Count(DerniereCellule.EntireRow) <> 0
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Loop
Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Loop

For y = DerniereCellule.Row To LigneDesFormules Step -1
ok = False

For x = 1 To DerniereCellule.Column
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Else
Exit For
End If
Next

For x = DerniereCellule.Column To 1 Step -1
ok = False
For y = LigneDesFormules To DerniereCellule.Row
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Else
Exit For
End If
Next

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
DerniereCellule).Address
End Sub

End Sub

"MichDenis" a écrit dans le message de news:
O5lwu$
Bonjour Alaska,

Je crois que tu as omis de copier la dernière ligne de la procédure : End
sub à la procédure !


Salutations!


"alaska" a écrit dans le message de news:

Bonjour,

Je te remercie DOCM pour ta formule, je l'ai recopié dan le VBA de ma
feuille
devis sous la phrase:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Par contre il me met un message d'erreur: "erreur de compilation end sub
attendu"
Je n'ai rien modifié dans la formule.

Désolée!

Bonne journée
"docm" a écrit dans le message de news:
%
Voici qui me semble répondre à ta question subsidiaire.

Sub Set_Print_Area()
LigneDesFormules = 25
Dim DerniereCellule As Range
Set DerniereCellule = Cells.SpecialCells(xlCellTypeLastCell).Offset(1,
0)
Do Until Application.Count(DerniereCellule.EntireRow) <> 0
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Loop
Do Until Application.Count(DerniereCellule.EntireColumn) <> 0
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Loop

For y = DerniereCellule.Row To LigneDesFormules Step -1
ok = False

For x = 1 To DerniereCellule.Column
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(-1, 0)
Else
Exit For
End If
Next

For x = DerniereCellule.Column To 1 Step -1
ok = False
For y = LigneDesFormules To DerniereCellule.Row
Cells(y, x).Select
If Cells(y, x).Text <> "" Then
If Cells(y, x).Value >= 0 Then
ok = True
Exit For
End If
End If
Next
If ok = False Then
Set DerniereCellule = DerniereCellule.Offset(0, -1)
Else
Exit For
End If
Next

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1),
DerniereCellule).Address
End Sub


"alaska" wrote in message
news:#
Je me suis réjouis trop vite, effectivement cela fonctionne mais mon
soucis

est que j'ai des formules à partir de la ligne 25, et la zone
d'impression

considère ces formules comme du texte (c'est évident en réalité).Quand
ces
formules on un résultat négatif rien ne doit s'inscrire sur ma feuille
devis

à partir de la ligne 25, sinon un texte de plusieurs s'inscrit et c'est

que rentre en jeux ma zone d'impression automatique. Comment m'en
sortir?

Peut-on pas faire autrement et au lieu de mettre des formules dans ma
feuille devis, je les mets dans ma feuille1 et
=si(feuille!1C3>0;"blablabla"

dans devis!f25;"") Dans cette solution il me manque simplement la
formule
pour dire à mettre dans l'autre feuille.

merci et désolée pour la complexité de ma demande.

"docm" a écrit dans le message de news:
uJ%
Tu ne peux pas utiliser devis.UsedRange.Address
car l'objet, ce n'est pas devis. C'est Feuil2.

Donc tu peux dire
ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address

Tu peux dire aussi
ActiveSheet.PageSetup.PrintArea >>>> > Worksheets("devis").UsedRange.Address

ou encore
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address

ou encore
Feuil2.PageSetup.PrintArea = Feuil2.UsedRange.Address

"guizmo" wrote in message
news:#ZoF9#
Bonjour,

Je te remercie pour ta réponse par contre, je suis débutante en VBA
,
voici

la formule que j'ai mis dans Worksheet: ma feuille2 se nomme DEVIS.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.PageSetup.PrintArea = devis.UsedRange.Address

End Sub

Et un message d'erreur me met "erreur d'exécution '424' objet
requis"

Pour répondre à la question de Michdenis sur ma feuille2(devis) : De
la
celulle A jusqu'a G et de la ligne 1 à 24, les éléments sont rentrés
en
dur.

A partir de la ligne 25, les éléments s'inscrivent par le biais de
formules.

Puis à partir de l ligne 84 il y'a 3 lignes d'élément en dur. Est ce
assez
explicite?

Merci à vous deux




"docm" a écrit dans le message de news:

Bonjour.

Ceci devrait redéfinir la zone d'impression.

ActiveSheet.PageSetup.PrintArea = Feuil2.UsedRange.Address



"alaska" wrote in message
news:#
Bonjour à tous,

Dans un classeur excel, j'ai feuille1 et feuille2. Ma feuille2
se
remplit


automatiquement par rapport aux données de la feuille 1. Ma
feuille2





peut
avoir 4 lignes comme 100lignes. J'aurais besoin d'une macro ou
procédure



afin que la zone d'impression s'adapte à la longueur du texte
car
sinon



pour
3 lignes j'ai 3 feuilles qui sortent, pas cool!

En vous remerciant par avance
bonne journée