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

Gégé-45550

XLDnaute Accro
Bonsoir,
Le problème vient effectivement du tri.
Profitez des avantages du tableau structuré.
Corriger cette partie comme ci-dessous :
VB:
 '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
Cordialement,
 

telemarrk

XLDnaute Occasionnel
Bonjour Gégé-45550,

Manipulation :


J'ai supprimé les colonnes, ajouté le code VBA, enregistré mon fichier et quitté.

À l'ouverture, il m'affiche un message de débogage que j'ai fermé et j'ai ensuite appliqué "Mettre sous forme de tableau" et cela fonctionne.


Merci pour ton aide.
 

Pièces jointes

  • Capture2.png
    10.4 KB · Affichages: 7

telemarrk

XLDnaute Occasionnel
Bien vu TooFatBoy avec la colonne 3.


J'ai ajouté deux nouveaux documents PDF (Test 3 et 4).


Ils se placent bien à la suite, mais par contre en colonne 3, j'ai toujours le dernier fichier qui s'affiche.


Cela ne fonctionne pas.
 

Pièces jointes

  • Capture3.png
    11.9 KB · Affichages: 1

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").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" & 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
 

telemarrk

XLDnaute Occasionnel
code=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").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" & 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


/code
 

Discussions similaires

Réponses
10
Affichages
231
  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
665
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…