Re, Bonjour @dysorthographie
Avec cette syntaxe, je bute pour utiliser GetRows alors que je l'utilise plus haut dans le fil mais avec une autre syntaxe!
Dim TB()
With .Execute(Sql)
ReDim TB(.Fields.count-1) 'Pour combler le risque de .Eof du recodset vide!
If Not .EOF Then TB = .getrows
.Close
End With
Resultats = split(.GetString(, , vbTab, vbCrLf),vbCrLf)
Ligne=Split(Resultats(0),vbTab)
Me.list.column=.getRows
Presspapier =.GetString(, , vbTab, vbCrLf)
ActiveCell.PasteSpecial xlPasteAll
c'était difficile de refuser ton invitationbonsoir Robert ravi que tu soit venu
Enum SpecialFolders
Desktop = &H0 ' Bureau
Documents = &H5 ' Dossier Documents
Downloads = &H19 ' Dossier Téléchargements
Music = &H14 ' Dossier Musique
Pictures = &H27 ' Dossier Images
Videos = &H17 ' Dossier Vidéos
Recent = &H3C ' Dossier Éléments récents
Favorites = &H12 ' Dossier Favoris
End Enum
avec le code ci-dessous de dysorthographie : 0.55 secondes pour 10 000 fichiers+> A tous ceux qui passent dans ce fil <+
Quels sont vos résultats niveau temps exécution avec un très grand nombre de fichiers ?
Sub test_simple_BIS()
'-> dysorthographie
Dim SqlB As String
Dim T0 As Double
Dim Message As String
Cells.ClearContents
'SqlB = "SELECT System.ItemName, System.ItemPathDisplay, System.DateModified, System.Size" & vbCrLf & _
"FROM SYSTEMINDEX" & vbCrLf & _
"WHERE SCOPE = '" & CreateObject("Shell.Application").Namespace(&H5&).Self.Path & "' and System.FileExtension = '.xlsx'"
SqlB = "SELECT System.ItemName, System.ItemPathDisplay, System.DateModified, System.Size" & vbCrLf & _
"FROM SYSTEMINDEX" & vbCrLf & _
"WHERE SCOPE = '" & CreateObject("Shell.Application").Namespace(&H5&).Self.Path & "'"
T0 = Timer
With CreateObject("ADODB.Connection")
.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';" ' Ouvrir la connexion
' Exécuter la requête SQL : beaucoup plus rapide !!!
Cells(1).CopyFromRecordset .Execute(SqlB)
.Close
End With
Message = Format(Timer - T0, "#0.00 ""Secondes"" ")
MsgBox Message
End Sub
SqlB = "SELECT System.ItemName, System.ItemPathDisplay, System.DateModified, System.Size" & vbCrLf & _
"FROM SYSTEMINDEX" & vbCrLf & _
"WHERE SCOPE = '" & CreateObject("Shell.Application").Namespace(&H5&).Self.Path & "'"
N'étant pas archéologue, je n'ai pas décodé dans ce palimpseste, les auteurs historiques de chaque ligne. Chacun se reconnaitraLe code initial est certes de dysorthographie mais cette macro vient du message#30 où j'ai modifié la chaine SQL
Sub test_simple()
Dim TB()
TB = WinDir("SCOPE='file:C:\Myrep'", "AND System.FileExtension = '.xlsx'")
End Sub
Function WinDir(ParamArray valeurs() As Variant) As Variant()
Dim I As Integer, Whr As String
' Initialisation de la requête SQL pour sélectionner les colonnes souhaitées
Sql = "SELECT System.ItemName, System.ItemPathDisplay, System.DateModified, System.Size FROM SYSTEMINDEX"
For I = 0 To UBound(valeurs) ' Boucle à travers les paramètres fournis pour construire la clause WHERE
Whr = Whr & " " & valeurs(I) ' Concatène chaque paramètre dans la clause WHERE
Next
If Trim(Whr) <> "" Then Sql = Sql & vbCrLf & "WHERE " & Whr ' Si la clause WHERE est définie, elle est ajoutée à la requête SQL
Debug.Print Sql ' Affiche la requête SQL dans la fenêtre d'exécution pour débogage
With CreateObject("ADODB.Connection") ' Crée une connexion ADODB et ouvre la connexion à l'indexeur de recherche Windows
.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';" ' Ouvrir la connexion
' Exécute la requête SQL et stocke les résultats
ReDim WinDir(0) ' Redimensionne le tableau pour les résultats
With .Execute(Sql)
If Not .EOF Then WinDir = .getrows ' Si des résultats existent, les place dans le tableau WinDir
.Close ' Ferme le recordset
End With
.Close ' Ferme la connexion
End With
End Function
Sub test_simple()
Dim TB()
Dim T0 As Double
TB = WinDir("SCOPE='file:C:\Users\STAPLE\Documents'", "AND System.FileExtension = '.xlsx'")
Cells(1).Resize(UBound(TB, 1), UBound(TB, 2)).Value = TB
End Sub
Oui j'ai remarqué et je t'en remercie. Il est vrai, pour ce qui concerne la documentation, je m'améliore en ChatgptRe,
@crocrocro
Regarde la pièce jointe 1205117
W10 64 BITS / 365 64 BITS
@dysorthographie
Je suis avec assiduité toutes tes interventions concernant SQL sur XLD.
Function WinDir(ParamArray valeurs() As Variant) As Variant()
Dim I As Integer, Whr As String
Dim bm As New cBenchmark
' Initialisation de la requête SQL pour sélectionner les colonnes souhaitées
Sql = "SELECT System.ItemName, System.ItemPathDisplay, System.DateModified, System.Size FROM SYSTEMINDEX"
For I = 0 To UBound(valeurs) ' Boucle à travers les paramètres fournis pour construire la clause WHERE
Whr = Whr & " " & valeurs(I) ' Concatène chaque paramètre dans la clause WHERE
Next
If Trim(Whr) <> "" Then Sql = Sql & vbCrLf & "WHERE " & Whr ' Si la clause WHERE est définie, elle est ajoutée à la requête SQL
Debug.Print Sql ' Affiche la requête SQL dans la fenêtre d'exécution pour débogage
bm.TrackByName "Init Windir"
With CreateObject("ADODB.Connection") ' Crée une connexion ADODB et ouvre la connexion à l'indexeur de recherche Windows
.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';" ' Ouvrir la connexion
' Exécute la requête SQL et stocke les résultats
ReDim WinDir(0) ' Redimensionne le tableau pour les résultats
With .Execute(Sql)
If Not .EOF Then WinDir = .getrows ' Si des résultats existent, les place dans le tableau WinDir
.Close ' Ferme le recordset
End With
.Close ' Ferme la connexion
End With
bm.TrackByName "Execute Windir"
End Function
IDnr | Name | Count | Sum of tics | Percentage | Time sum |
0 | Init Windir | 1 | 281 | 0,09% | 28 us |
1 | Execute Windir | 1 | 305 342 | 99,91% | 31 ms |
TOTAL | 2 | 305 623 | 100,00% | 31 ms | |
Total time recorded: | 31 ms |