Microsoft 365 WinSearch VBA | PowerPivot et/ou PowerQuery

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Pour faire écho à la discussion de @patricktoulon, j'ai retrouvé ce fil

J'ai voulu testé sur 365 et W10 64 bits
Et j'ai ce message d'erreur
ERROR_DSO.PNG

Alors tout comme @patricktoulon , je vous invite à tester le code présent dans la discussion de 2013 citée plus haut

La question étant: est-ce que chez vous aussi ce message d'erreur apparait ?

EDITION: Voir le message#57 où apparait PowerPivot dans l'histoire.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@jurassic pork
Je suis d'accord.
Un double-clic sur ces fichiers permet de relancer une recherche précédemment enregistrée.

@patricktoulon
L'intérêt ( ou plutôt le pourquoi de la chose) je l'avais évoqué dans le message#3 de ta discussion pseudo boite
Staple¸ en mode K.I.S.S à dit:
Je n'ai pas de lecteur K et Windows Search me suffit amplement pour rechercher des fichiers ;)
(D'autant plus que je peux enregistrer mes recherches)
Et ainsi je laisse Excel vivre sa vie de tableur.
Ma participation à ton fil, et ma digression (la création de cette discussion), c'est juste par curiosité intellectuelle, et pour macérer mes neurones dans VBA/PS*PQ et tutti quanti. ;)

Donc actuellement, je suis en train de me fader la lecture de
Microsoft Windows Desktop Search (WDS) utilise la syntaxe de requête avancée (AQS) pour aider les utilisateurs et les programmeurs à mieux définir et affiner leurs recherches.

Je ne reviendrai dans Excel un peu plus tard, voir beaucoup plus tard ;)

Bon dimanche à tous
 

crocrocro

XLDnaute Occasionnel
Bonjour le fil,
Intéressant … ou pas, peut-être hors sujet :
La syntaxe SQL propose des options qui permettent de

- D'extraire seulement une partie des enregistrements correspondant à la sélection (en utilisant TOP associé à ORDER BY)
VB:
SELECT TOP 100 …. WHERE …. ORDER BY …
Le temps d'exécution est quasi proportionnel au nombres d'enregsitrements extraits (d'où l'intérêt de le faire dans la requête et non à postériori dans la feuille)

- D'effectuer une recherche dans le contenu des fichiers (en utilisant CONTAINS ou FREETEXT)
Code:
SELECT  …. WHERE SCOPE = ... AND  CONTAINS('"xxx" AND "yyy" AND zzz"')
SELECT  …. WHERE SCOPE = ... AND  FREETEXT('xxx yyy zzz')
SELECT  …. WHERE SCOPE = ...  AND  (CONTAINS ( System.Author,'"crocrocro"' ) RANK BY WEIGHT ( 1.000 ) OR CONTAINS ( System.Document.LastAuthor,'"CestEncoreMoi"' ) RANK BY WEIGHT ( 0.500 ))
 

Staple1600

XLDnaute Barbatruc
Re, Bonsoir @patricktoulon


@patricktoulon
Je reste focalisé sur la fonction Windir de @dysorthographie (qui est plus concise)
PS: je suis étonné que vu ton niveau, tu te laisses allé à utiliser une IA 🤔

@crocrocro
Suite à ta suggestion, j'ai testé cette syntaxe
SELECT System.ItemName, System.ItemPathDisplay, SYSTEM.FileOwner, System.ItemType FROM SYSTEMINDEX WHERE (SCOPE = 'C:\Users\STAPLE\Documents') AND (CONTAINS(System.Search.Contents,'*Integer*') AND CONTAINS(System.FileExtension,'*xls*') OR CONTAINS(System.FILEOWNER,'*STAPLE*'))"
C'est très rapide mais j'ai un doute sur le
CONTAINS(System.Search.Contents,'*Integer*')
J'essaie de lister les classeurs contenant du code VBA
J'ai essayé avec *End* , avec *Sub"
Est-ce que vraiment cela fonctionne ?
PS: *End Sub* fait planter la macro
 

Staple1600

XLDnaute Barbatruc
Re

@patricktoulon
Comme dit précédemment, je priorise une autre voie.

En rentrant du boulot, j'ai fait : Contenu suivi/Discussions suivies
J'ai vu qu'il y avait du nouveau
C'était la suggestion de @crocrocro (qui m'a ouvert des perspectives)

Ayant adopté la fonction WINDIR, ce qui m'intéresse ici désormais c'est de tester des chaines SQL de plus en plus complexes (pour parfaire mon apprentissage SQL)

Bonne fin de soirée.

PS: aujourd'hui, c'est lundi... c'est donc soirée PQ et ou PS ;)
 

crocrocro

XLDnaute Occasionnel
Bonsoir le fil,
pour Staple
SELECT System.ItemName, System.ItemPathDisplay, SYSTEM.FileOwner, System.ItemTypeFROM SYSTEMINDEXWHERE (SCOPE = 'C:\Users\STAPLE\Documents') AND (CONTAINS(System.Search.Contents,'*Integer*') AND CONTAINS(System.FileExtension,'*xls*')OR CONTAINS(System.FILEOWNER,'*STAPLE*'))"
C'est très rapide mais j'ai un doute sur le
CONTAINS(System.Search.Contents,'*Integer*')
J'essaie de lister les classeurs contenant du code VBA
J'ai essayé avec *End* , avec *Sub"
Est-ce que vraiment cela fonctionne ?
Comme je te le disais dan mon post 76, CONTAINS et FREETEXT permettent de faire une recherche dans le contenu du fichier (par exemple un document Word, un fichier Excel , un pdf ...)
Pour un fichier Excel, la recherche se fait dans la feuille, pas dans les modules.
Il faut donc avoir les .bas pour que la recherche fonctionne.
Dans ta requête, tu fais tes recherches avec CONTAINS mais en indiquant de manière explicite la propriété où tu effectues la recherche System.Search.Contents pour integer ...
tu utilises CONTAINS comme un Like mais ce n'est pas sa fonction. Idem pour FREETEXT.
Je te suggère de parcourir ces liens
https://learn.microsoft.com/fr-fr/windows/win32/search/-search-sql-contains
https://learn.microsoft.com/fr-fr/windows/win32/search/-search-sql-freetext
Je découvre, grâce à ton fil ;) et donc pas suffisamment de recul et donc de fiabilité ...

Dans le post 81, en réponse à Patrick, tu dis :
ce qui m'intéresse ici désormais c'est de tester des chaines SQL de plus en plus complexes (pour parfaire mon apprentissage SQL)
Si tu t'intéresses au langage SQL, je te suggère (mais de quoi je me mêle !) de faire une recherche sur "langage SQL", le SQL de Windows Search est trop restrictif et n'est pas, selon moi la meilleur voie pour parfaire son SQL.
 

Staple1600

XLDnaute Barbatruc
Re


Ce que je voulais faire, c'est ce je faisais jadis sur W98SE (avec cmd.exe)
(ca nous rajeunit pas!)
En l'occurrence l'équivalent en SQL de:
findstr /s /m c:"End Sub" *.xls*

Je disais donc précédemment que je ne suis pas sur que CONTAINS(System.Search.Contents,'*Integer*' permet de voir si un classeur contient un projet VBA.

EDITION: @crocrocro
Je viens juste voir ton dernier message
Merci pour ces liens

Sinon tu veux dire qu'avec SQL on ne peut pas faire ce que fait findstr ?
(Car findstr me renvoie bien une liste de classeurs avec du vba en parcourant un dossier où il n'y a que des classeurs et pas de *.bas, *.cls ou *.frm)

CORRECTION pour findstr
Il ne trouve que les fichiers *.xls
Il zappe les *.xlsm et ne peut pas ouvrir les *.xlsb
 
Dernière édition:

crocrocro

XLDnaute Occasionnel
pour Staple
Sinon tu veux dire qu'avec SQL on ne peut pas faire ce que fait findstr ?
(Car findstr me renvoie bien une liste de classeurs avec du vba en parcourant un dossier où il n'y a que des classeurs et pas de *.bas, *.cls ou *.frm)
Non, ton post (84) est arrivé après le mien. donc pas vu ton findstr.
Je découvre le SQL de Windows Search, et je ne sais pas s'il permet de retrouver des classeurs contenant une chaine (par exemple un nom de Sub) dans un module.
Je pressens (quelqu'un, j'espère, me contredira) que l'on ne puisse pas faire mieux que ce que propose la fenêtre Recherche de l'explorateur 😢
Ma remarque "pour parfaire son SQL" portait sur l'utilisation SQL de Windows Search
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re


@crocrocro
C'est simplement par curiosité.
J'ai déjà un script PowerShell pour lister les classeurs contenant un projet VBA.

==> Je vais donc me concentrer sur l'apprentissage de SQL et WSearch
Et il y a de quoi faire si on regarde cette liste à gauche

EDITION: Premier essai de complexification (test OK)
VB:
Sql="SELECT System.FileName, System.Author, System.DateModified, System.Size " & _
               "FROM SystemIndex " & _
               "WHERE SCOPE='file:" & strPath & "' AND System.FileExtension = 'xlsx' OR System.FileExtension = 'xls' " & _
               "ORDER BY System.Author ASC, System.DateModified DESC"
 
Dernière édition:

dysorthographie

XLDnaute Accro
Bonjour,
Where FileExtension in('.xls','.xlsx','.xlsm')
ASC est implicite par défaut, on ne précise que DESC

Je pense qu'il n'est pas nécessaire de précéder le nom de la table avant le nom du champ, la citer après l'instruction from devrait être amplement suffisant.

On fait ça quand plusieurs tables sont concernées par la requête et qu'un risque de confusion est possible.
 
Dernière édition:

crocrocro

XLDnaute Occasionnel

Pièces jointes

  • InfosPropriétésTableWindowsSearch.xlsx
    14.5 KB · Affichages: 1

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

@crocrocro
Merci pour ton fichier

De mon côté, en cherchant des infos sur le net, je suis tombé sur ceci
(et qui m'a scotché !)
Ce qui donne ce résultat (et ce, sans macro aucune !) :eek:😍

Je ne comprends pas tout de la syntaxe SQL(*) utilisée mais le résultant est bluffant.
Powerpivot.png
Je connais mal PowerPivot, donc je tâtonne ;)

(*) notamment les lignes en rouge
SELECT
System.ItemTypeText,
System.Size, System.ItemFolderNameDisplay,
CAST(System.ItemFolderPathDisplay as DBTYPE_BSTR),
System.DateCreated,
System.DateAccessed,
System.FileExtension,
CAST(System.ItemName AS DBTYPE_BSTR)
FROM SYSTEMINDEX
WHERE SCOPE=’file:C:\Users\Chris Webb\Documents’
 

crocrocro

XLDnaute Occasionnel
Bonsoir le fil,
pour Staple :
Avec ma version d'Excel, privé de PowerPivot ...
Je ne connais pas ton niveau en SQL mais franchement, c'est beaucoup plus facile que, par exemple les formules Excel très puissantes qui peuvent faire 2m de long, que certains lisent comme un texte en français (ce n'est pas mon cas :(), un peu comme les musiciens qui, en lisant une partition entendent la musique (ce n'est toujours pas mon cas :().
Tu as dû voir que CAST te permettait dans la requête de faire de la conversion de type de données.
Bientôt, la technologie peut beaucoup, dommage de s'en priver, mais dommage, selon moi, de ne pas comprendre, en regardant le canard qui file sur l'eau , qu'en dessous, il mouline comme un malade avec ses petites pattes 🥵
 

Staple1600

XLDnaute Barbatruc
Re

@crocrocro
J'ai posté le message#57, simplement pour la beauté du geste (et pour les curieux)
(je tire d'ailleurs mon chapeau à Chris Webb ;))
Mon niveau SQL est je dirai débutant.
J'aimerai pouvoir parler le SQL comme une langue maternelle ;) mais ce n'est pas le cas

PS : je n'ai pas compris ta dernière phrase ;) (où tu parles de canard)

Je continue à chercher et et tester des syntaxe SQL +VBA

@[Aux lecteurs du fil]
(si des Powerpivotitstes passent dans le fil, je suis aussi preneur de les infos&conseils)
J'ai voulu testé la chaine basique qu'on a utilisé dans le fil
PPivot2.PNG
SELECT
System.ItemTypeText,
System.Size, System.ItemFolderNameDisplay,
CAST(System.ItemFolderPathDisplay as DBTYPE_BSTR),
System.DateCreated,
System.DateAccessed,
System.FileExtension,
CAST(System.ItemName AS DBTYPE_BSTR)
FROM SYSTEMINDEX
WHERE SCOPE='C:\Users\STAPLE\Documents\EXCEL'
Mais si je modifie comme ci-dessous, ca me renvoie 0 lignes
SELECT
System.ItemTypeText,
System.Size, System.ItemFolderNameDisplay,
CAST(System.ItemFolderPathDisplay as DBTYPE_BSTR),
System.DateCreated,
System.DateAccessed,
System.FileExtension,
CAST(System.ItemName AS DBTYPE_BSTR)
FROM SYSTEMINDEX
WHERE SCOPE='C:\Users\STAPLE\Documents\EXCEL' AND System.FileExtension = 'xlsx'
 
Dernière édition:

crocrocro

XLDnaute Occasionnel
Pour Staple :
Mon niveau SQL est je dirai débutant.
Les concepts sont simples. Plein de tutos je pense ici ou là
PS : je n'ai pas compris ta dernière phrase ;) (où tu parles de canard)
Le canard (l'application) à l'air d'être pépère. Mais dans la salle des machines, çà mouline pour faire ce qu'on lui demande et qui n'est pas toujours pertinent, mais comme on ne voit que ce qui est au-dessus de l'eau, quand çà avance bien, on ne se rend pas forcément compte quand ce qu'on demande est absurde.
AND System.FileExtension = 'xlsx'
ile te manque le . avant xlsx
 
Dernière édition:

Statistiques des forums

Discussions
314 244
Messages
2 107 699
Membres
109 906
dernier inscrit
flavie06