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, 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 Impliqué
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 Impliqué
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 Impliqué

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 Impliqué
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 Impliqué
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:

Staple1600

XLDnaute Barbatruc
Re

En attendant de remettre le point, ce j'appelle la syntaxe SQL qui fonctionne donne ceci en modifiant le TCD comme suit.
Pivot3.png
Pivot3b.png


Je vais essayer de tester si l'actualisation du TCD est rapide ou pas quand j'ajoute des fichiers dans Documents

@crocrocro
Merci pour avoir relevé la coquille ;)
A l'usage, PowerPivot c'est plus ergonomique pour tester les chaines SQL
et le TCD permets de varier facilement les visualisations
Cela va simplifier mon apprentissage.
 
Dernière édition:

dysorthographie

XLDnaute Accro
Bonjour,
@dysorthographie (qui est plus concise)
PS: je suis étonné que vu ton niveau, tu te laisses allé à utiliser une IA 🤔
Je ne sais pas si cette remarque s'adressait à moi, m'a seule utilisation de ia consiste à la documentation pour expliquer ce que fait le code que je fournir.

Plus rarement la documentation du code proremenent dit, bien qu'il est très difficile de lui interdire de le modifier. Si vous avez les mots clés je suis preneur

A aborder de sujet que je ne metrise pas afin d'obtenir un minimum de compréhension.

Mais en aucun ca pour "pisser" du code ce que je fais beaucoup mieux que luis.

Il est très faible dans ce domaine. Le code qu'il produit mes incompréhensible.

Il serait dommage pour un illettrés comme moi de ce passer de la puissance rédactionnel de ia.

Si mon patron avait convenu ia à l'époque où j'étais encore en activité, il ce sera pas senti obligé de partager son secrétariat avec moi.


Et il a juger que ma productivité valait bien le sacrifice d'une secrétaire.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil


@dysorthographie
Non, je m'adressais pas à toi.

Je suis le conseil de @crocrocro => les tutoriels
Je commence par le début ;)

Et là, @dysorthographie , je m'adresse à toi, est-ce tu as un logiciel à me recommander pour pratiquer le SQL?
(à part Excel) ?
Mes recherches m'ont mené à : DB Browser for SQLite

 

Statistiques des forums

Discussions
315 094
Messages
2 116 148
Membres
112 670
dernier inscrit
Flow87