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

Commentaires

  1. Avatar de Camille12
    • |
    • permalink
    Cet article met en lumière l’efficacité de Microsoft Excel lorsqu'il est bien utilisé. Pour ceux qui souhaitent approfondir leurs compétences, des experts Excel, comme ceux de https://trefle-applications.groupetr...experts-excel/, offrent des conseils précieux pour optimiser l’utilisation de cet outil. La gestion de l'impression ou de l'exportation de plusieurs feuilles au format PDF peut devenir complexe, surtout lorsqu'il faut respecter un ordre précis. L’utilisation du langage VBA et de la fonction CopySheets pour automatiser ce processus est une solution idéale.
  2. Avatar de Philippe Tulliez
    • |
    • permalink
    Citation Envoyé par curt
    Bonsoir Philippe,

    content de lire un nouveau billet ou plus exactement la mise à jour d'un précédent.... Tu ne lâches rien. Bravo et merci
    Curt
    Bonjour Curt,
    Merci pour ton message
  3. Avatar de curt
    • |
    • permalink
    Bonsoir Philippe,

    content de lire un nouveau billet ou plus exactement la mise à jour d'un précédent.... Tu ne lâches rien. Bravo et merci
    Curt
  4. Avatar de Philippe Tulliez
    • |
    • permalink
    Citation Envoyé par laurent_ott
    Bonjour,
    Une autre approche est de déplacer les feuilles désirées, masquer les autres, imprimer ou exporter en PDF, puis restituer l'ordre d'origine des feuilles et leur visibilité.

    Exemple d'utilisation de la fonction ci-dessous pour exporter en PDF les feuilles "Menu", "TCD", "Graph", "Sources" en PDF puis ouvrir la visionneuse.

    Ou pour les imprimer :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    '------------------------------------------------------------------------------------------------
    Function ImprimerFeuilles(ByVal Feuilles As Variant, Fichier As String, Afficher As Boolean) As Boolean
    '------------------------------------------------------------------------------------------------
    ' Imprime les feuilles (même masquées) passées dans l'argument Feuilles (dans l'ordre désiré d'impression) soit sur
    ' l'imprimante par défaut, soit en fichier PDF.
    '------------------------------------------------------------------------------------------------
    ' Feuille : la liste des feuilles concernées au format Array si plusieurs feuilles.
    ' Fichier : le fichier PDF à générer (ou vide pour une impression sur l'imprimante par défaut).
    ' Afficher : True pour voir le fichier PDF généré, ou l'aperçu avant impression.
    '------------------------------------------------------------------------------------------------
    ' Renvoie : True si tout s'est bien passé, False dans le cas contraire.
    '------------------------------------------------------------------------------------------------
    ' Exemple d'appels :
    ' Call ImprimerFeuilles(Array("Feuil1", "Feuil6"), "C:\Users\ott_l\Downloads\Classeur1.pdf", False)
    ' Call ImprimerFeuilles("Feuil1", "", True)
    '------------------------------------------------------------------------------------------------
    Dim OrdreOrigine()
    Dim VisibleOrigine()
    Dim AncActive As String
    Dim i As Integer
    Dim Rep
     
    ' Initialisation des variables:
    ReDim OrdreOrigine(1 To Sheets.Count)
    ReDim VisibleOrigine(1 To Sheets.Count)
    AncActive = ActiveSheet.Name
     
    ' Gestion des erreurs:
    On Error GoTo Gest_Err
    Err.Clear
     
    ' Mémorise le nom des feuilles du classeur, leur ordre et leur état visible:
    For Each sh In Sheets
        i = i + 1
        OrdreOrigine(i) = sh.Name
        VisibleOrigine(i) = sh.Visible
    Next sh
     
    ' Force le mode Array si une seule feuille est passée en argument:
    If IsArray(Feuilles) = False Then Feuilles = Array(Feuilles)
     
    ' Déplace les feuilles à imprimer dans l'ordre désiré:
    For i = UBound(Feuilles) To LBound(Feuilles) Step -1
        Sheets(Feuilles(i)).Visible = True
        Sheets(Feuilles(i)).Move Before:=Sheets(1)
    Next i
     
    ' Si aucun fichier n'est indiqué alors imprime les feuilles désirées sinon les exporte en PDF:
    Select Case Fichier
     
        ' Sélectionne les feuilles désirées pour les imprimer:
        Case ""
        Sheets(Feuilles).Select
        ActiveWindow.SelectedSheets.PrintOut Preview:=Afficher
     
        ' Masque les autres feuilles du classeur pour ne pas les exporter en PDF:
        Case Else
        For i = 1 To Sheets.Count
            Rep = Filter(Feuilles, OrdreOrigine(i), True, vbTextCompare)
            If UBound(Rep) = -1 Then Sheets(OrdreOrigine(i)).Visible = False
        Next i
        ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fichier, OpenAfterPublish:=Afficher
     
    End Select
     
    ' Renvoie Vrai:
    ImprimerFeuilles = True
     
    ' Gestion des erreurs:
    Gest_Err:
     
    ' Restaure la situation d'origine:
    For i = 1 To Sheets.Count: Sheets(i).Visible = True: Next i
    For i = UBound(OrdreOrigine) To LBound(OrdreOrigine) Step -1
        Sheets(OrdreOrigine(i)).Visible = VisibleOrigine(i)
        Sheets(OrdreOrigine(i)).Move Before:=Sheets(1)
    Next i
    Sheets(AncActive).Activate
     
    ' Affiche le message d'erreur:
    If Err.Number <> 0 Then
        MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description, vbExclamation, ThisWorkbook.Name
        Err.Clear
    End If
     
    End Function

    Cordialement.
    Bonjour Laurent,
    Désolé de répondre si tard à ton commentaire, je le découvre à l'instant.
    Je trouve cette approche trop lourde et risquée si pour une raison quelconque, il y avait une interruption de la procédure
  5. Avatar de Philippe Tulliez
    • |
    • permalink
    Citation Envoyé par laurent_ott
    Bonjour,
    Cela convient peut-être à vos besoins, mais précisez tout de même pour information que la fonction IsFileExist(FullName) présentée ici va renvoyer False sur un fichier avec attribut : fichier en lecture seule, masqué, système.
    Bonjour Laurent,
    Désolé de répondre si tard, je viens seulement de découvrir ton commentaire, et merci pour cette précision. C'est un fait que si le fichier est caché la fonction renverra False mais j'utilise cette fonction dans le cadre des applications que je livre et il n'y a pas de fichier caché et je vois mal un employé cacher un fichier, ce serait une faute grave mais je suis d'accord que pour compléter mon article, il est important de le préciser.
    C'est chose faite
  6. Avatar de Philippe Tulliez
    • |
    • permalink
    Citation Envoyé par Sibithen
    Merci beaucoup pour cette fonction !
    Merci pour votre message, cela fait toujours plaisir de savoir que cela sert à quelques choses de publier.
  7. Avatar de Sibithen
    • |
    • permalink
    Merci beaucoup pour cette fonction !
  8. Avatar de pipout64
    • |
    • permalink
    Bonsoir Philippe,
    Je vous remercie pour votre tuto même si je n'ai pas réussi à le mettre en œuvre.
    Mis à jour 20/03/2024 à 11h31 par pipout64
  9. Avatar de PLH81
    • |
    • permalink
    Bonjour à vous,
    Merci pour ce tuto bien pratique.
    Maintenant que l'on sait comment ajouter celui-ci, est-il possible de le supprimer de la liste ?

    Cordialement
    PLH81
  10. Avatar de maximec31
    • |
    • permalink
    Merci pour la précision à propos : l'option Complément automatique des instruction (Outils/Options... [Editeur])

    Je ne connaissais pas cette incidence. Sûrement l'une des raisons pour lesquels elle ne fonctionnait pas parfois pour moi. 😊
  11. Avatar de laurent_ott
    • |
    • permalink
    Bonjour,
    Cela convient peut-être à vos besoins, mais précisez tout de même pour information que la fonction IsFileExist(FullName) présentée ici va renvoyer False sur un fichier avec attribut : fichier en lecture seule, masqué, système.
  12. Avatar de laurent_ott
    • |
    • permalink
    Bonjour,
    Une autre approche est de déplacer les feuilles désirées, masquer les autres, imprimer ou exporter en PDF, puis restituer l'ordre d'origine des feuilles et leur visibilité.

    Exemple d'utilisation de la fonction ci-dessous pour exporter en PDF les feuilles "Menu", "TCD", "Graph", "Sources" en PDF puis ouvrir la visionneuse.
    Call ImprimerFeuilles(Array("Menu", "TCD", "Graph", "Sources"), "C:\Users\ott_l\Downloads\Classeur1.pdf", True)
    Ou pour les imprimer :
    Call ImprimerFeuilles(Array("Menu", "TCD", "Graph", "Sources"), "", False)
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    '------------------------------------------------------------------------------------------------
    Function ImprimerFeuilles(ByVal Feuilles As Variant, Fichier As String, Afficher As Boolean) As Boolean
    '------------------------------------------------------------------------------------------------
    ' Imprime les feuilles (même masquées) passées dans l'argument Feuilles (dans l'ordre désiré d'impression) soit sur
    ' l'imprimante par défaut, soit en fichier PDF.
    '------------------------------------------------------------------------------------------------
    ' Feuille : la liste des feuilles concernées au format Array si plusieurs feuilles.
    ' Fichier : le fichier PDF à générer (ou vide pour une impression sur l'imprimante par défaut).
    ' Afficher : True pour voir le fichier PDF généré, ou l'aperçu avant impression.
    '------------------------------------------------------------------------------------------------
    ' Renvoie : True si tout s'est bien passé, False dans le cas contraire.
    '------------------------------------------------------------------------------------------------
    ' Exemple d'appels :
    ' Call ImprimerFeuilles(Array("Feuil1", "Feuil6"), "C:\Users\ott_l\Downloads\Classeur1.pdf", False)
    ' Call ImprimerFeuilles("Feuil1", "", True)
    '------------------------------------------------------------------------------------------------
    Dim OrdreOrigine()
    Dim VisibleOrigine()
    Dim AncActive As String
    Dim i As Integer
    Dim Rep
     
    ' Initialisation des variables:
    ReDim OrdreOrigine(1 To Sheets.Count)
    ReDim VisibleOrigine(1 To Sheets.Count)
    AncActive = ActiveSheet.Name
     
    ' Gestion des erreurs:
    On Error GoTo Gest_Err
    Err.Clear
     
    ' Mémorise le nom des feuilles du classeur, leur ordre et leur état visible:
    For Each sh In Sheets
        i = i + 1
        OrdreOrigine(i) = sh.Name
        VisibleOrigine(i) = sh.Visible
    Next sh
     
    ' Force le mode Array si une seule feuille est passée en argument:
    If IsArray(Feuilles) = False Then Feuilles = Array(Feuilles)
     
    ' Déplace les feuilles à imprimer dans l'ordre désiré:
    For i = UBound(Feuilles) To LBound(Feuilles) Step -1
        Sheets(Feuilles(i)).Visible = True
        Sheets(Feuilles(i)).Move Before:=Sheets(1)
    Next i
     
    ' Si aucun fichier n'est indiqué alors imprime les feuilles désirées sinon les exporte en PDF:
    Select Case Fichier
     
        ' Sélectionne les feuilles désirées pour les imprimer:
        Case ""
        Sheets(Feuilles).Select
        ActiveWindow.SelectedSheets.PrintOut Preview:=Afficher
     
        ' Masque les autres feuilles du classeur pour ne pas les exporter en PDF:
        Case Else
        For i = 1 To Sheets.Count
            Rep = Filter(Feuilles, OrdreOrigine(i), True, vbTextCompare)
            If UBound(Rep) = -1 Then Sheets(OrdreOrigine(i)).Visible = False
        Next i
        ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fichier, OpenAfterPublish:=Afficher
     
    End Select
     
    ' Renvoie Vrai:
    ImprimerFeuilles = True
     
    ' Gestion des erreurs:
    Gest_Err:
     
    ' Restaure la situation d'origine:
    For i = 1 To Sheets.Count: Sheets(i).Visible = True: Next i
    For i = UBound(OrdreOrigine) To LBound(OrdreOrigine) Step -1
        Sheets(OrdreOrigine(i)).Visible = VisibleOrigine(i)
        Sheets(OrdreOrigine(i)).Move Before:=Sheets(1)
    Next i
    Sheets(AncActive).Activate
     
    ' Affiche le message d'erreur:
    If Err.Number <> 0 Then
        MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description, vbExclamation, ThisWorkbook.Name
        Err.Clear
    End If
     
    End Function

    Cordialement.
  13. Avatar de Philippe Tulliez
    • |
    • permalink
    Bonjour Curt,
    Merci pour ton message congratulant.
    Philippe
    Citation Envoyé par curt
    Bonjour Philippe,

    un billet (précieux) de plus à mettre dans la collection .... merci
  14. Avatar de curt
    • |
    • permalink
    Bonjour Philippe,

    un billet (précieux) de plus à mettre dans la collection .... merci
  15. Avatar de Philippe Tulliez
    • |
    • permalink
    Bonjour,
    Merci pour votre réaction.
    Il est exact qu'il y a mieux et surtout plus complet que la fonction Dir mais tout dépend de ce que l'on attend comme information.
    J'utilise cette fonction depuis plus de 20 ans et elle répond à mes besoins ainsi qu'aux demandes de mes clients.
    Le jour où j'aurai un cas plus complexe, je passerai par le FSO que je connais très bien.

    J'ai eu un NOKIA pendant très longtemps alors que des collègues avaient déjà des smartphone mais pour mes besoins de l'époque qui étaient de téléphoner et de communiquer pas SMS cela me suffisait amplement.
  16. Avatar de Philippe Tulliez
    • |
    • permalink
    Bonjour,
    Merci pour votre message.
    Pour l'impression certes, en revanche, créer un document pdf qui tient en un seul document, je ne crois pas.
    J'ai dû effectuer un travail de ce type là pour un client, il y a quelques années et il me semble que je n'avais pas pu le faire et c'est cette option que j'avais choisie.
    Pour répondre avec certitude, je referai un test prochainement.
  17. Avatar de cduigou
    • |
    • permalink
    Bonjour,

    Quelque chose m'échappe dans votre procédure. Pourquoi copier des feuilles dans un nouveau classeur suivant un ordre fourni par un tableau ?
    Personnellement j'aurais juste fait une boucle d'impression directement sur les éléments du tableau non ?

    Mais peut-être n'ai-je pas perçu l'astuce sous-jacente...
  18. Avatar de cduigou
    • |
    • permalink
    Bonjour,

    Je pense qu'il y a une manière quand même plus moderne que les vieilles commandes natives de VBA comme DIR pour gérer le système de fichiers.
    Référencer la très complète bibliothèque Microsoft Scripting Runtime

    Dim fso as Scripting.FileSystemObject
    Set fso =New Scripting.FileSystemObject

    Et pour tester l'existence d'un fichier :
    If fso.FileExists(nom complet du fichier) Then
  19. Avatar de Philippe Tulliez
    • |
    • permalink
    Bonjour Curt,
    Merci pour ton message congratulant qui me va droit au cœur.
    Cela encourage à continuer l'écriture de ces billets
    Philippe

    Citation Envoyé par curt
    Bonsoir Philippe,

    tes trois derniers billets ne font qu'alimenter une mine d'or déjà très prolifique.
    Imprimer des feuilles Excel en pdf m'a souvent posé des problèmes dans l'ordre des feuilles sans que j'y voit une "logique"..... merci pour ce superbe travail
  20. Avatar de curt
    • |
    • permalink
    Bonsoir Philippe,

    tes trois derniers billets ne font qu'alimenter une mine d'or déjà très prolifique.
    Imprimer des feuilles Excel en pdf m'a souvent posé des problèmes dans l'ordre des feuilles sans que j'y voit une "logique"..... merci pour ce superbe travail
Page 1 sur 3 123 DernièreDernière