OVH Cloud OVH Cloud

Automatisation d'impression par macro

15 réponses
Avatar
Eric C
Voici mon problème :
J’ai une feuille de calcul qui me sert à libérer des produits (voir annexe).

http://cjoint.com/?AGstXLDuUnk

Cette feuille est imprimée telle quelle et collée dans un cahier de
résultats.
Jusque là, tout baigne…

Pour que le "controleur" puisse voir ce qui est calculé, je dois
imprimer la même feuille avec entête des lignes et des colonnes ET la
feuille des formules utilisées avec entête des lignes et des colonnes.

Je voudrais faire une macro pour imprimer tout cela automatiquement,
j’ai essayé avec l’enregistreur de macros mais je m’y perds et je suis
certain qu’une solution toute simple existe…
La macro doit :
-imprimer la feuille avec les résultats
-imprimer la feuille avec les résultats et les noms des colonnes et lignes
-imprimer la feuille avec les formules et les noms des colonnes et
lignes (ajuster la largeur des colonnes)
-réafficher la feuille avec les résultats (sans formules)
-enregistrer la feuille

Merci de votre aide précieuse.

5 réponses

1 2
Avatar
LSteph
Dangereux cela précisément si on voulait que ce soit toujours Feuil1
et surtout pas les autres.

On Jul 20, 10:58 pm, Gloops wrote:
Bonsoir,

Effectivement, ça serait plus passe-partout de remplacer Feuil1 par
ActiveSheet.

_____________________________________
LSteph a écrit, le 20/07/2011 20:28 :







> Bonsoir Eric,

>> Merci LSteph
> ...aussi Daniel

>> Comment faire pour que cette macro soit active dans n'importe quel
>> fichier ouvert ?
> Alors sur le principe..
> Si tant est que ce contexte se retrouve ailleurs (ce n'est pas éviden t
> au vu de l'exemple spécifique que tu fournis)
> donc toujours Feuil1 ...? (par exemple)
> ..il suffirait de la placer dans le classeur de macros personnelles

> Cordialement.

> --
> LSteph

> On Jul 19, 9:10 pm, Eric C  wrote:
>> Merci LSteph, c'est exactement ce que je voulais.
>> Comment faire pour que cette macro soit active dans n'importe quel
>> fichier ouvert ?

>> Eric
Avatar
Gloops
Ah oui mais Feuil1 de ce fichier, j'imagine ?

Voilà qui me rappelle une mission il n'y a pas très longtemps, où j e me
suis cru bien inspiré quand on me demandait de développer un traiteme nt
concernant une feuille Excel d'un modèle de fichier à ouvrir chaque
mois, de baser le contrôle sur le nom de la feuille.

Pour chacun des traitements concernés, au bout de trois mois on venait
me dire que ça ne marchait pas, et on me demandait pourquoi. A chaque
fois, c'était parce que le modèle avait changé, en ce sens que le n om de
la feuille n'était plus le même. Donc, vraisemblablement aurais-je dû
chercher d'autres critères, et surtout mieux documenter sur quel critè re
je basais le contrôle.

En définitive, j'ai même l'impression qu'il aurait fallu fournir une
documentation qui décrivait la feuille devant faire l'objet du
traitement. Avant de dire que ça ne marchait pas, l'utilisateur aurait
lu la doc, et aurait pu constater l'écart entre le modèle reçu et c elui
attendu par le traitement.

On a beau avoir une formation qui insiste sur l'essentiel, à savoir la
doc, quand on bricole un petit traitement sur un coin de table on a un
peu tendance à être négligent. Eh bien c'est un tort.

Ne pas oublier que la doc doit réunir deux qualités : elle doit êtr e
claire, et elle doit être conforme à ce qu'elle documente. Il arrive que
ça ne soit évident ni sur un point, ni sur l'autre. Et ne pas oublier
que quand on dit clair, il faut savoir pour qui.

_____________________________________
LSteph a écrit, le 21/07/2011 12:49 :
Dangereux cela précisément si on voulait que ce soit toujours Feuil 1
et surtout pas les autres.

On Jul 20, 10:58 pm, Gloops wrote:
Bonsoir,

Effectivement, ça serait plus passe-partout de remplacer Feuil1 par
ActiveSheet.
Avatar
Eric C
Ca fonctionne, encore merci LSteph.... et bien sur aussi à Daniel que
j'avais omis dans le premier post.
Eric

Le 20/07/2011 20:28, LSteph a écrit :
Bonsoir Eric,

Merci LSteph


...aussi Daniel

Comment faire pour que cette macro soit active dans n'importe quel
fichier ouvert ?


Alors sur le principe..
Si tant est que ce contexte se retrouve ailleurs (ce n'est pas évident
au vu de l'exemple spécifique que tu fournis)
donc toujours Feuil1 ...? (par exemple)
..il suffirait de la placer dans le classeur de macros personnelles

Cordialement.

--
LSteph

On Jul 19, 9:10 pm, Eric C wrote:
Merci LSteph, c'est exactement ce que je voulais.
Comment faire pour que cette macro soit active dans n'importe quel
fichier ouvert ?

Eric

Le 19/07/2011 15:09, LSteph a écrit :









Effectivement, du coup la première colonne s'en trouve un peu mieux
mais la deuxième fait un peu ratatinée,
...
on pourrait aussi après le second autofit
appliquer celle standard aux colonnes qui seraient d'une largeur
inférieure.



On 19 juil, 14:31, DanielCo wrote:
Juste. Je ne l'avais pas vu. Par contre, le second autofit ne redonne
pas forcément les largeurs de colonnes initiales. Ou on place le "Save"
avant le premier AutoFit, ou on enregistre les largeurs initiales des
colonnes.
Daniel





Bonjour Daniel,







Si on omet les autofit
pour le premier regarde la formule en bas de la colonne c elle est
tronquée
et pour le second quand on revient si on l'omet cela se redimensionne
a minima sur A1 en colonne A
de sorte que le reste de la colonne est coupé.
( Cela dépend peut être aussi de la version , ici 2003)
avec les 2 autofits cela me semble donc plus sûr selon les cas.







Cordialement.







--
LSteph







On 19 juil, 13:21, DanielCo wrote:
Bonjour LSteph,
Je pense que le redimensionnement des colonnes se fait sans qu'on ait
besooin de le préciser.
Cordialement.
Daniel









Re,











...loupé un détail:











Sub Imprim3()
With Feuil1
.Activate
.PageSetup.PrintHeadings = False
.PrintOut
.PageSetup.PrintHeadings = True
.PrintOut











ActiveWindow.DisplayFormulas = True
.Columns.AutoFit
.PrintOut
ActiveWindow.DisplayFormulas = False
.Columns.AutoFit
End With
ActiveWorkbook.Save
End Sub











'LSteph











On Jul 18, 7:52 pm, Eric C wrote:
Voici mon problème :
J’ai une feuille de calcul qui me sert à libérer des produits (voir
annexe).http://cjoint.com/?AGstXLDuUnk













Cette feuille est imprimée telle quelle et collée dans un cahier de
résultats.
Jusque là, tout baigne…













Pour que le "controleur" puisse voir ce qui est calculé, je dois
imprimer la même feuille avec entête des lignes et des colonnes ET la
feuille des formules utilisées avec entête des lignes et des colonnes.
Je voudrais faire une macro pour imprimer tout cela automatiquement,
j’ai essayé avec l’enregistreur de macros mais je m’y perds et je suis
certain qu’une solution toute simple existe…
La macro doit :
-imprimer la feuille avec les résultats
-imprimer la feuille avec les résultats et les noms des colonnes et lignes
-imprimer la feuille avec les formules et les noms des colonnes et
lignes (ajuster la largeur des colonnes)
-réafficher la feuille avec les résultats (sans formules)
-enregistrer la feuille













Merci de votre aide précieuse.













--
Pour plaus de facilité, veuillez préciser votre version d'Excel
Cordialement.
Daniel









--
Pour plaus de facilité, veuillez préciser votre version d'Excel
Cordialement.
Daniel







Avatar
LSteph
Bonjour Gloops,

Et ne pas oublier
que quand on dit clair, il faut savoir pour qui.


;o) Ca c'est clair!

Ah oui mais Feuil1 de ce fichier, j'imagine ?


...tu ne croirais pas si bien dire avec ton histoire à l'appui
mais...et là encore, ce qui semble clair pour certains...

Quand on écrit en VBA ceci dans le code: Feuil1.activate
il s'agit de son CodeName (nom en dur dans le VBE) et non pas de son
Name(nom d'onglet du classeur dans excel)

qui lui peut très bien être modifié par l'utilisateur et s'averer
correspondre à feuil48 ou même s'appeler zaza
certains utilisateurs n'auront jamais vu qu'il s'agissait toujours
bien de la feuille de CodeName Feuil1

@+

--
LSteph

On Jul 21, 7:00 pm, Gloops wrote:
Ah oui mais Feuil1 de ce fichier, j'imagine ?

Voilà qui me rappelle une mission il n'y a pas très longtemps, où j e me
suis cru bien inspiré quand on me demandait de développer un traiteme nt
concernant une feuille Excel d'un modèle de fichier à ouvrir chaque
mois, de baser le contrôle sur le nom de la feuille.

Pour chacun des traitements concernés, au bout de trois mois on venait
me dire que ça ne marchait pas, et on me demandait pourquoi. A chaque
fois, c'était parce que le modèle avait changé, en ce sens que le n om de
la feuille n'était plus le même. Donc, vraisemblablement aurais-je d û
chercher d'autres critères, et surtout mieux documenter sur quel crit ère
je basais le contrôle.

En définitive, j'ai même l'impression qu'il aurait fallu fournir une
documentation qui décrivait la feuille devant faire l'objet du
traitement. Avant de dire que ça ne marchait pas, l'utilisateur aurait
lu la doc, et aurait pu constater l'écart entre le modèle reçu et c elui
attendu par le traitement.

On a beau avoir une formation qui insiste sur l'essentiel, à savoir la
doc, quand on bricole un petit traitement sur un coin de table on a un
peu tendance à être négligent. Eh bien c'est un tort.

Ne pas oublier que la doc doit réunir deux qualités : elle doit êtr e
claire, et elle doit être conforme à ce qu'elle documente. Il arrive que
ça ne soit évident ni sur un point, ni sur l'autre. Et ne pas oublier
que quand on dit clair, il faut savoir pour qui.

_____________________________________
LSteph a écrit, le 21/07/2011 12:49 :







> Dangereux cela précisément si on voulait que ce soit toujours Feuil 1
> et surtout pas les autres.

> On Jul 20, 10:58 pm, Gloops  wrote:
>> Bonsoir,

>> Effectivement, ça serait plus passe-partout de remplacer Feuil1 par
>> ActiveSheet.
Avatar
Gloops
LSteph a écrit, le 22/07/2011 12:24 :
Quand on écrit en VBA ceci dans le code: Feuil1.activate
il s'agit de son CodeName (nom en dur dans le VBE) et non pas de son
Name(nom d'onglet du classeur dans excel)




Oui, en effet.
Enfin dans mon cas, c'était plutôt

If ActiveWorkbook.Sheets(1).Name <> "Feuil1" Then
MsgBox "Ce classeur semble ne pas correspondre " + _
"au modèle prévu pour ce traitement"
Traitement = False
Exit Function
End If

Alors si, derrière, l'utilisateur renomme la feuille en se disant que
c'est plus clair pour lui, ben ... j'ai tout faux.
1 2