Re: zone d'impression automatique
Le
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
>> >> > >
>> >> > >
>> >> >
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
>> >> > >
>> >> > >
>> >> >
Je crois que tu as omis de copier la dernière ligne de la procédure : End sub à la procédure !
Salutations!
"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" %
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" O5lwu$
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" 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" O5lwu$
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"