IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

VBA Excel - Copiez et personnalisez l'ordre de vos feuilles pour imprimer et exporter en PDF,
Un billet blog de Philippe Tulliez

Le , par Philippe Tulliez

0PARTAGES

Introduction
Lorsque vous devez imprimer ou exporter plusieurs feuilles d'un classeur Excel au format PDF, vous avez probablement utilisé la méthode classique consistant à les sélectionner et à utiliser la commande appropriée. Cependant, vous avez peut-être rencontré le problème de l'ordre d'impression ou d'exportation, qui suit la disposition des feuilles de gauche à droite.
Pour imprimer ou exporter dans un ordre spécifique, vous avez deux options : soit déplacer manuellement les feuilles pour les réorganiser, soit les copier dans un autre classeur tout en les disposant dans le bon ordre.

Dans ce billet, nous allons explorer une solution efficace en utilisant le langage VBA. Grâce à cette procédure, vous pourrez automatiser ce processus fastidieux et gagner un temps précieux lors de l'impression ou de l'exportation de vos feuilles de calcul.

Comprendre le fonctionnement de la procédure
Maintenant que nous avons présenté le contexte, plongeons dans les détails
La fonction générique nommée CopySheets prévue à la base pour copier des feuilles d'un classeur actif vers un nouveau classeur destiné à n'être qu'éphémère peut parfaitement être utilisée pour copier les feuilles d'un classeur quelconque vers un autre à condition bien entendu qu'ils soient ouverts.
S'il nous ne l'utilisons que pour un usage tel que décrit dans l'introduction, il suffit d'envoyer la liste des feuilles à copier dans l'argument SheetsList dans une variable tableau pour qu'il copie ces feuilles du classeur actif vers une nouvelle feuille. En fin de copie s'il s'agit d'un nouveau classeur, la première feuille présente au moment de sa création sera supprimée afin de ne conserver que celles qui ont été copiées.

Code de la fonction générique
Cette fonction nommée CopySheets a donc trois arguments dont seul le premier est obligatoire. On peut lui passer soit une variable tableau ou un nom (String) s'il n'y a qu'une feuille à copier même si je ne vois pas trop l'intérêt d'utiliser cette fonction pour une seule feuille. L'utilisation de la méthode Copy de l'objet Sheetest largement suffisant.
Les deux arguments optionnels permettent de choisir le classeur "source" et/ou le classeur "cible"
Code vba : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function CopySheets(SheetsList As Variant, _ 
                    Optional oTarget As Workbook, _ 
                    Optional oSource As Workbook) 
  ' Copie une ou plusieurs feuilles d'un classeur vers un autre 
  ' Philippe Tulliez (https://magicoffice.be) 
  ' Arguments 
  '  SheetsList ' Liste des feuilles à copier (Array) 
  '  [oTarget]  ' Classeur cible (Nouveau si Nothing) 
  '  [oSource]  ' Classeur source (Actif si Nothing) 
  Dim e As Integer 
  Dim f As Boolean 
  If oSource Is Nothing Then Set oSource = ActiveWorkbook 
  If oTarget Is Nothing Then Set oTarget = Workbooks.Add: f = True 
  If TypeName(SheetsList) = "String" Then SheetsList = Split(SheetsList) 
  With oTarget 
    For e = LBound(SheetsList) To UBound(SheetsList) 
        oSource.Sheets(SheetsList(e)).Copy After:=.Sheets(.Sheets.Count) 
    Next 
    Application.DisplayAlerts = False 
    If f Then .Sheets(1).Delete 
    Application.DisplayAlerts = True 
  End With 
End Function

Exemple d'une procédure qui l'invoque
Dans cet exemple, nous allons copier les feuilles nommées "Devis", "Electricité", "Plomberie" et "Conditions" du classeur actif vers un nouveau classeur nous imprimerons le classeur en modifiant au préalable le zoom de la première feuille et enfin on supprimera le classeur éphémère.
Code vba : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub TestCopySheets() 
  Dim t As Variant 
  t = Array("Devis", "Electricité", "Plomberie", "Conditions") 
  Application.ScreenUpdating = False 
  ' Copie les feuilles 
  CopySheets SheetsList:=t, oSource:=ThisWorkbook 
  ' Après copie 
  With ActiveWorkbook 
  .Sheets(1).PageSetup.Zoom = 85 ' Modifie le zoom de la première feuille 
  .PrintOut                      ' Imprime le classeur 
  .Close SaveChanges:=False      ' Ferme le classeur sans le sauver 
  End With 
  Application.ScreenUpdating = True 
End Sub

Ressources
Tutoriels pour en savoir plus sur les sujets abordés dans ce billet

Une erreur dans cette actualité ? Signalez-nous-la !