Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Problème tableau structuré et code vba

telemarrk

XLDnaute Occasionnel
Bonsoir,

J'ai un souci avec ma mise en forme structurée. J'ai un code vba qui se lance au démarrage et qui me permet d'afficher les fichiers PDF présents dans mon dossier PDF se trouvant sur mon bureau, il fonctionne correctement.

Je sélectionne le tableau, je lui applique "Mettre sous forme de tableau" et j'enregistre pour finir.

Dès l'ouverture de mon fichier, les titres de colonne se trouvent en dernière ligne (voir capture), je pense que cela vient du code VBA qui fait un tri automatique sur la colonne d.


Je n'arrive pas à résoudre ce problème, quelqu'un peut-il m'aider ?


Merci.
 

Pièces jointes

  • Capture.png
    6.2 KB · Affichages: 6
  • test.xlsm
    18.9 KB · Affichages: 8
  • TEST1.pdf
    29.6 KB · Affichages: 7
  • TEST2.pdf
    29.9 KB · Affichages: 2

telemarrk

XLDnaute Occasionnel
VB:
Private Sub Workbook_Open()

    Dim FolderPath As String
    Dim FileSystem As Object
    Dim Folder As Object
    Dim File As Object
    Dim Ligne As Long
    Dim Feuille As Worksheet
    
    'Référencer l'onglet "Factures"
    Set Feuille = ThisWorkbook.Worksheets("Factures")
    
    'Chemin du dossier contenant les fichiers PDF
    FolderPath = "C:\Users\solan\Desktop\pdf"
    
    'Créer une instance de l'objet FileSystemObject
    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    
    'Référencer le dossier
    Set Folder = FileSystem.GetFolder(FolderPath)
    
    'Commencer à la ligne 6
    Ligne = 6
    
    'Boucler sur chaque fichier du dossier
    For Each File In Folder.Files
        'Vérifier si le fichier a l'extension .pdf
        If LCase(Right(File.Name, 4)) = ".pdf" Then
            'Colonne A : Nom du fichier
            Feuille.Cells(Ligne, 1).Value = File.Name
            
            'Colonne B : Date de dernière modification
            Feuille.Cells(Ligne, 2).Value = FileDateTime(File.Path)
            
            'Colonne C : Lien hypertexte
            Feuille.Cells(Ligne, 3).Formula = "=HYPERLINK(""" & File.Path & """,""" & File.Name & """)"
            
            'Colonne D : Date d'accès
            Feuille.Cells(Ligne, 4).Value = File.DateLastAccessed
            
            'Passer à la ligne suivante
            Ligne = Ligne + 1
        End If
    Next File
    
    'Ajuster automatiquement la largeur des colonnes
    Feuille.Columns("A:D").EntireColumn.AutoFit
    
   'Trier la colonne D à partir de D6 par ordre croissant
     ActiveWorkbook.Worksheets("Factures").ListObjects("Tableau1").Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets("Factures").ListObjects("Tableau1").Sort.SortFields. _
        Add2 Key:=Range("Tableau1[[#All],[Colonne4]]"), SortOn:=xlSortOnValues, _
        Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Factures").ListObjects("Tableau1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'    With Feuille.Range("D6:D" & Feuille.Cells(Rows.Count, "D").End(xlUp).Row)
'        .Sort Key1:=.Cells, Order1:=xlAscending, Header:=xlNo
'    End With
    
    'Libérer les objets
    Set FileSystem = Nothing
    Set Folder = Nothing
    Set Feuille = Nothing
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Bizarre, avec ce code hier parfois ça fonctionnait chez moi.

Mais franchement, as-tu besoin de récrire le nom du fichier qui est déjà dans première colonne ?

Si oui, je pourrais te poster dans la journée un code qui devrait fonctionner.
Si non, je te posterai un autre code.


À plus tard
 

telemarrk

XLDnaute Occasionnel
l'objectif est de lister les fichiers PDF se trouvant dans mon dossier en les transformant en lien hypertexte mais également que la dernier colonne soit trier automatiquement paar ordre croissant.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

@telemarrk
Puisque tu disposes d'Excel 2019, donc de PowerQuery
Une autre solution sans macro, et qui s'actualise simplement en cliquant sur Actualiser tout
PowerQuery:
let
    Source = Folder.Files("C:\Users\STAPLE\Documents\EXCEL\TESTS_PDF"),
    #"Autres colonnes supprimées" = Table.SelectColumns(Source,{"Name", "Folder Path"}),
    #"Colonnes permutées" = Table.ReorderColumns(#"Autres colonnes supprimées",{"Folder Path", "Name"}),
    #"Colonnes fusionnées" = Table.CombineColumns(#"Colonnes permutées",{"Folder Path", "Name"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Chemin et Nom Fichier PDF")
in
    #"Colonnes fusionnées"
Et ci-dessous le tableau structuré obtenu dans Excel


NB: Lors du premier import, j'ai ajouté une colonne Liens, dans laquelle j'ai ajouté cette formule
=LIEN_HYPERTEXTE([@[Chemin et Nom Fichier PDF]];"Vers Fichier PDF")

Ensuite à chaque actualisation, le tableau augmentera de taille si il y a de nouveaux PDF dans le dossier et les liens se mettront à jour.

PS: Le code M est obtenu en faisant : Obtenir des données/A partir d'un fichier/A partir d'un dossier
 
Dernière édition:

telemarrk

XLDnaute Occasionnel
Bonjour Staple1600,

j'ai réalisé le même tableau avec power query, je compare les deux méthodes (Power Query et VBA).
Mon tableau va évoluer et je gardereai la meilleur méthode des deux.

Merci

 

Staple1600

XLDnaute Barbatruc
Re

L'avantage de PowerQuery, c'est qu'il n'est pas dissociable d'Excel. VBA, lui l'est.
Il peut arriver que certaines DSN ou DSI installent les packs Office sans VBA, par souci de sécurité

PS: j'ai fait un exemple PQ sans la colonne File.DateLastAccessed, et sans le tri.

PQ peut faire cela aussi. Je reviens avec les modifs nécessaires du code M.

EDITION: Ce qui donne donc comme nouveau code M
PowerQuery:
let
    Source = Folder.Files("C:\Users\STAPLE\Documents\EXCEL\TESTS_PDF"),
    #"Autres colonnes supprimées" = Table.SelectColumns(Source,{"Name", "Date accessed", "Folder Path"}),
    #"Colonnes permutées" = Table.ReorderColumns(#"Autres colonnes supprimées",{"Folder Path", "Name", "Date accessed"}),
    #"Colonnes fusionnées" = Table.CombineColumns(#"Colonnes permutées",{"Folder Path", "Name"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Chemin et Nom Fichier PDF"),
    #"Lignes triées" = Table.Sort(#"Colonnes fusionnées",{{"Date accessed", Order.Ascending}})
in
    #"Lignes triées"
 

telemarrk

XLDnaute Occasionnel
Le problème avec powerquery c'est comme tu peux le voir dans les deux captures ci-jointes, quand j'ajoute un nouveau fichier PDF il décale mon choix "Validé" présent dans la cellule E10 en E11.
 

Pièces jointes

  • Capture1.png
    12.8 KB · Affichages: 7
  • capture2.png
    15 KB · Affichages: 7

Cousinhub

XLDnaute Barbatruc
Inactif
Le problème avec powerquery c'est comme tu peux le voir dans les deux captures ci-jointes, quand j'ajoute un nouveau fichier PDF il décale mon choix "Validé" présent dans la cellule E10 en E11.
Hello,
Juste en passant...
Avec cette nouvelle contrainte, la solution n'est donc plus la solution?
Si tu rajoutes des commentaires personnalisés à ton tableau le lundi, et que tu ouvres ton fichier le mardi, toutes les lignes vont être recrées, et pffffit, les commentaires, ils deviennent quoi?
D'après "la solution", ils disparaissent
VB:
.....
With Range("Tableau1")
   If Not .ListObject.DataBodyRange Is Nothing Then .Delete
End With
----
Bref, je pense que le problème a été, dès le début, mal exposé, et surtout, incomplet...
A mon avis, il faudrait déjà vérifier si le fichier pdf est déjà enregistré dans le TS de ton fichier, et de le rajouter le cas échéant.
VBA pourrait le faire
PQ aussi, en utilisant le self-referencing...
Bon courage
 

Discussions similaires

Réponses
5
Affichages
266
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…