Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Bonjour,
Vous trouverez une version 3.4 qui a fait totalement peau neuve concernant l'interface utilisateur.
Les boutons dans les onglets ont été abandonnés au profit d'un ruban.
Ayant connu des déboires avec les versions 2007 et 2010 je me suis réconcilié.
Bon tout n'est pas encore parfait mais la version 1.9 de l'UIRibbon apporte quelques satifactions.
![]()
Voici le ruban
![]()
Codification XML de ce dernier
XML:<!-- ===================== --> <!-- RibbonUI LIBMAC --> <!-- Auteur : OGURUMA --> <!-- Date : 16/06/2025 --> <!-- Version : 3.4 --> <!-- ===================== --> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="LIBMAC_onLoad"> <!--On masque les onglets par défaut--> <ribbon startFromScratch="false"> <tabs> <tab id="customTab" label="Modules VBA - PowerQuery" insertAfterMso="TabHome"> <!-- Groupe inventaire des fichiers --> <!-- ============================== --> <group id="InvGroup" label="Inventaire des fichiers"> <!-- Fonctions concernant l'inventaire des fichiers --> <!-- ============================================== --> <button id="InvActualiser" label="Inventorier" size="normal" onAction="RibbonInvActualiser" image="actualiser10" supertip="Recherche les fichiers à traiter via une requête PowerQuery" /> <button id="InvExtraire" label="Extraire" size="normal" onAction="RibbonInvExtraire" image="inventaire10" supertip="Extrait les macros VBA, les requêtes PowerQuery, les fonctions LAMBDA" /> <button id="InvEffacer" label="Effacer" size="normal" onAction="RibbonInvEffacer" image="eraser10" supertip="Efface le contenu du tableau" /> <button id="InvExporter" label="Exporter CSV" size="normal" onAction="RibbonInvExporterCSV" image="csv10" supertip="Exporte le contenu du tableau dans un fichier .csv" /> <button id="InvDossiers" label="Dossiers" size="normal" onAction="RibbonInvChoisirDossiers" image="dossier10" supertip="Sélection des dossiers à inventorier" /> <button id="InvDefaut" label="Défaut" size="normal" onAction="RibbonInvDefautDossier" image="default10" supertip="Dossier par défaut" /> <button id="InvRazFiltres" label="Raz filtres" size="normal" onAction="RibbonInvRazFiltres" image="reinit210" supertip="Efface les filtres du tableau" /> <!-- Gestion des critères et effacement --> <!-- ================================== --> <menu id="menuRazParams" label="Raz paramètres" size="normal" image="poub10" > <button id="InvRazParams" label="Tous" onAction="RibbonInvRazParams" image="poub10" supertip="Efface tous les paramètres de recherche des fichiers" /> <button id="InvRazType" label="Type fichiers" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère type de fichiers" /> <button id="InvRazDateCre" label="Date de création" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère date de création" /> <button id="InvRazDateMod" label="Date de modification" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère date de modification" /> <button id="InvRazDateAcc" label="Date de dernier accès" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère date de dernier accès" /> <button id="InvRazTri1" label="Critère de tri 1" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère de tri n°1" /> <button id="InvRazTri2" label="Critère de tri 2" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère de tri n°2" /> <button id="InvRazName" label="Name" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère Name" /> <button id="InvRazFolder" label="Folder" onAction="RibbonInvRazParams" image="poub10" supertip="Efface le critère Folder" /> <button id="InvRazDossier" label="Dossiers à explorer" onAction="RibbonInvRazParams" image="poub10" supertip="Efface la liste des dossiers à examiner" /> </menu> <!-- Rétention --> <!-- ========= --> <button id="InvRazSelection" label="Raz rétention" size="normal" onAction="RibbonInvRazSelection" image="croixroige10" supertip="Efface la sélection des fichiers" /> <separator id="sep1"/> <!-- Options --> <!-- ======= --> <checkBox id="chkInvBoxSousDossier" label="Sous-sossiers" onAction="RibbonInvChkBoxSousDossiers" getPressed="RibbonInvChkBoxSousDossiers_getPressed" enabled="true" /> <checkBox id="chkInvBoxLog" label="Log" onAction="RibbonInvChkBoxLog" /> <checkBox id="chkInvRetention" label="Rétention" onAction="RibbonInvChkRetention" /> <checkBox id="chkInvBoxAutofit" label="Autofit" onAction="RibbonInvChkAutofit" /> <!-- Liste de choix sur le mode d'extraction souhaité --> <!-- ================================================ --> <dropDown id="dropMode" label="Mode : " onAction="dropMode_onAction" getSelectedItemID="dropMode_SelectedItemID" > <item id="ModeItemRempl" label="REMPLACEMENT" /> <item id="ModeItemAjout" label="AJOUT" /> </dropDown> <!-- Liste de choix sur le type d'extraction souhaitée --> <!-- ================================================= --> <dropDown id="dropExtraction" label="Extraction : " onAction="dropExtraction_onAction" getSelectedItemID="dropExtraction_SelectedItemID" > <item id="ModeItemMacros" label="MACROS" image="vb10" /> <item id="ModeItemPwq" label="POWERQUERY" image="requete10" /> <item id="ModeItemLambda" label="LAMBDA" image="lambda10" /> </dropDown> </group> <!-- Groupe choix des onglets --> <!-- ======================== --> <group id="WksGroup" label="Navigation"> <splitButton id="SplitWks" size="normal"> <button id="WksBtn_btn1" imageMso="AnimationGallery" label="Fonctionnalités" supertip="Onglets des fonctionnalités" onAction="WksBtn_onAction" /> <menu id="splitBtn_menu" itemSize="large"> <button id="WksBtn_INV" image="inventaire10" label="Inventaire" onAction="WksBtn_onAction" description="Liste des fichiers inventoriés" /> <button id="WksBtn_MAC" image="vb10" label="Macros" onAction="WksBtn_onAction" description="Liste des Maros VBA" /> <button id="WksBtn_PWQ" image="requete10" label="Powerquery" onAction="WksBtn_onAction" description="Liste des Requêtes Powerquery" /> <button id="WksBtn_LBD" image="lambda10" label="Fonctions Lambda" onAction="WksBtn_onAction" description="Liste des fonctions Lambda" /> <button id="WksBtn_BIB" image="bib10" label="Bibliothèque" onAction="WksBtn_onAction" description="Contenu de la bibliothèque" /> <button id="WksBtn_QRY" image="loupe210" label="Recherches de Macros" onAction="WksBtn_onAction" description="Recherches de modules Macros" /> </menu> </splitButton> </group> <!-- Menu --> <!-- ==== --> <group id="grp_menu" label="Gestion"> <!-- Gestion des modules VBA --> <!-- ======================= --> <menu id="menuVBA" label="VBA" size="large" image="vb10" > <button id="VBA_ExportCSV" label="Export CSV" onAction="VBA_onAction" image="csv10" supertip="Exporter le tableau vers un fichier .csv" /> <button id="VBA_Extract2Dossier" label="Extraire vers dossier" onAction="VBA_onAction" image="extraire2dossier10" supertip="Extraire les modules vers le dossier Excel" /> <button id="VBA_Extract2Biblio" label="Extraire vers biblio " onAction="VBA_onAction" image="bib10" supertip="Extraire les modules vers la bibliothèque" /> <button id="VBA_Actualiser" label="Actualiser" onAction="VBA_onAction" image="actualiser10" supertip="Actualiser le tableau" /> <button id="VBA_EffacerTab" label="Effacer le tableau" onAction="VBA_onAction" image="eraser10" supertip="Effacer le tableau" /> <button id="VBA_EffacerFlt" label="Effacer les filtres" onAction="VBA_onAction" image="reinit210" supertip="Effacer les filtres" /> <button id="VBA_SelectAll" label="Sélectionner tout" onAction="VBA_onAction" image="cocheverte10" supertip="Tout sélectionner" /> <button id="VBA_DelSelect" label="Supprimer la sélection" onAction="VBA_onAction" image="croixroige10" supertip="Effacer la sélection" /> </menu> <!-- Gestion des modules PWQ --> <!-- ======================= --> <menu id="menuPWQ" label="Powerquery" size="large" image="requete10" > <button id="PWQ_ExportCSV" label="Export CSV" onAction="PWQ_onAction" image="csv10" supertip="Exporter le tableau vers un fichier .csv" /> <button id="PWQ_Extract2Dossier" label="Extraire vers dossier" onAction="PWQ_onAction" image="extraire2dossier10" supertip="Extraire les modules vers le dossier Excel" /> <button id="PWQ_Extract2Biblio" label="Extraire vers biblio " onAction="PWQ_onAction" image="bib10" supertip="Extraire les modules vers la bibliothèque" /> <button id="PWQ_Actualiser" label="Actualiser" onAction="PWQ_onAction" image="actualiser10" supertip="Actualiser le tableau" /> <button id="PWQ_EffacerTab" label="Effacer le tableau" onAction="PWQ_onAction" image="eraser10" supertip="Effacer le tableau" /> <button id="PWQ_EffacerFlt" label="Effacer les filtres" onAction="PWQ_onAction" image="reinit210" supertip="Effacer les filtres" /> <button id="PWQ_SelectAll" label="Sélectionner tout" onAction="PWQ_onAction" image="cocheverte10" supertip="Tout sélectionner" /> <button id="PWQ_DelSelect" label="Supprimer la sélection" onAction="PWQ_onAction" image="croixroige10" supertip="Effacer la sélection" /> </menu> <!-- Gestion des modules LBD --> <!-- ======================= --> <menu id="menuLBD" label="Lambda" size="large" image="lambda10" > <button id="LBD_ExportCSV" label="Export CSV" onAction="LBD_onAction" image="csv10" supertip="Exporter le tableau vers un fichier .csv" /> <button id="LBD_Actualiser" label="Actualiser" onAction="LBD_onAction" image="actualiser10" supertip="Actualiser le tableau" /> <button id="LBD_EffacerTab" label="Effacer le tableau" onAction="LBD_onAction" image="eraser10" supertip="Effacer le tableau" /> <button id="LBD_EffacerFlt" label="Effacer les filtres" onAction="LBD_onAction" image="reinit210" supertip="Effacer les filtres" /> </menu> <!-- Gestion des modules BIB --> <!-- ======================= --> <menu id="menuBIB" label="Biblio" size="large" image="bib10" > <button id="BIB_ExportCSV" label="Export CSV" onAction="BIB_onAction" image="csv10" supertip="Exporter le tableau vers un fichier .csv" /> <button id="BIB_Actualiser" label="Actualiser" onAction="BIB_onAction" image="actualiser10" supertip="Actualiser le tableau" /> <button id="BIB_EffacerTab" label="Effacer le tableau" onAction="BIB_onAction" image="eraser10" supertip="Effacer le tableau" /> <button id="BIB_EffacerFlt" label="Effacer les filtres" onAction="BIB_onAction" image="reinit210" supertip="Effacer les filtres" /> <button id="BIB_ExportHtml" label="Export HTML" onAction="BIB_onAction" image="html04" supertip="Exporter le tablleau au format HTML" /> <button id="BIB_ExportXml" label="Export XML" onAction="BIB_onAction" image="xml05" supertip="Exporter le tablleau au format XML" /> <button id="BIB_ExportJson" label="Export JSON" onAction="BIB_onAction" image="json05" supertip="Exporter le tablleau au format JSON" /> </menu> <!-- Gestion des modules QRY --> <!-- ======================= --> <menu id="menuQRY" label="Recherches" size="large" image="loupe210" > <button id="QRY_ExportCSV" label="Export CSV" onAction="QRY_onAction" image="csv10" supertip="Exporter le tableau vers un fichier .csv" /> <button id="QRY_Actualiser" label="Actualiser" onAction="QRY_onAction" image="actualiser10" supertip="Actualiser le tableau" /> <button id="QRY_EffacerFlt" label="Effacer les filtres" onAction="QRY_onAction" image="reinit210" supertip="Effacer les filtres" /> <button id="QRY_RazParams" label="Raz paramètres" onAction="QRY_onAction" image="poub10" supertip="Efface les paramètres de recherche" /> </menu> </group> <!-- Groupe configuration et infos --> <!-- ============================== --> <group id="CfgGroup" label="Configuration"> <button id="CfgVersion" label="Version" size="normal" onAction="Cfg_onAction" image="information10" supertip="Version de l'application" /> <button id="CfgLOV" label="LOV" size="normal" onAction="Cfg_onAction" image="lov10" supertip="Liste des valeurs automatiques" /> <button id="CfgMessages" label="Messages" size="normal" onAction="Cfg_onAction" image="message10" supertip="Messages dialogue utilisateur" /> <button id="CfgParams" label="Paramètres" size="normal" onAction="Cfg_onAction" image="param10" supertip="Paramètres de l'application" /> <button id="CfgInv" label="Inventaire" size="normal" onAction="Cfg_onAction" image="lib05" supertip="Retour à l'onglet inventaire" /> </group> </tab> </tabs> </ribbon> </customUI>
Au passage vous remarquerez :
- fichier commenté (ce qui est assez rare)
- des balises et propriétés alignées (ce qui est aussi assez rare, bien souvent c'est un peu fouilli)
Attention
'* : /!\ Attention : il arrive que les DropBox dans le ruban perdent leurs valeurs quand on change de d'onglets ou de rubans
'* : JE NE CORRIGERAI PAS ! j'ai bien codé quelques tentatives sans succès que je laisse en l'état. Elles n'ont aucune incidence.
'* : Pour ma part c'est un Bug dans le cache où les valeurs sont perdues. C'est le JOB de Microsoft pas le bien !
'* : C'était déjà le cas dans les 1ères versions de l'UIRibbon. Microsoft ne l'a jamais corrigé !
'* : Je refuse de partir dans des appels d'API abracadabra pour conserver le pointeur du ruban en mémoire cache.
'* : Les API oui c'est bien et NON ! ça limite la portabilité de votre code bien qu'il y ait des variables de compilation qui permettent de tenir compte de l'OS (WIN/MAC) et la version du VBA !
'* : Ca vous rend tributaire des évolutions de Windows. Microsoft a totalement le loisir de modifier les appels au hwnd. C'est déjà arrivé !
'* : Donc je n'entre pas dans ce bricolage.
'* : Il serait bien que Microsoft mette à disposition une propriété dans son XML du style preservedropdowncache="yes/no:defaut no" afin de maintenir et afficher les valeurs sélectionnées quand on navigue dans les onglets ou dans les ruban
'* : Un peu en conflit là-dessous dans les versions 2007, 2010.. je reste un peu déçu !
Bonjour Le Forum XLD,
Cette version 3.3 apporte les nouvelles fonctionnalités majeures :
En supplément de ces nouvelles fonctionnalités :
- Construction d'une bibliothèque dans laquelle seront déposés les modules VBA des Macros et les requêtes PowerQuery
- La possibilité de renseigner plusieurs dossiers afin de construire l'inventaire des fichiers Excel à examiner
L'utilisation n'a pas été modifié. Rappel :
- Allègement, factorisation et optimisation du code
- Correction de quelques bugs mineurs
- Une reformulation des types pour les modules .bas, les feuilles, les classes, les frm (MACROS)
- Une légère réorganisation des icônes
- Changement de la barre de progression
- Allègement de la log. Celle-ci se libère tout les 100 lignes dans le fichier log
Scénario d'utilisation
- Réalisation de l'inventaire des dossiers à explorer
- Extraction des Macros
- Extraction des requêtes PowerQuery
- Extraction des fonctions LAMBDA
- Utilisation des fonctions de recherches une fois les extractions réalisées
- Et petite nouveauté construction de la bibliothèque sur disque et recherches dans celle-ci
- Choix d'un ou plusieurs dossiers via ce bouton
![]()
![]()
- Pour ajouter un dossier cliquer à nouveau sur l'icône dossier
![]()
Par défaut le séparateur des noms de dossiers est ";". Il est paramétrable dans l'onglet Params mot clé DEFAUT_SEP_DOSSIERS
- Recherche des fichiers et actualisation de l'inventaire via ce bouton
dans l'onglet PARAM_INVENTAIRE![]()
- Sélectionner le type d'extraction souhaitée et son mode
puis lancer l'extraction via ce bouton
et pour chaque type d'extraction renouveler cette opération![]()
![]()
Dans cet exemple les 3 types d'extractions ont été réalisés.
- En ce qui concerne la bibliothèque son emplacement se déclare dans les paramètres. Les traitements vérifient la bonne syntaxe du nom de dossier.
![]()
Il n'est pas nécessaire de créer les dossiers et les sous-dossiers. Ceux-ci seront créés automatiquement pendant l'extraction des modules et requêtes via une fonction dans le code nommée MakeDirP (pour ceux qui connaissent Linux j'ai reconduis la fonction mkdir -p qui permet de créer une arborescence de répertoires si ceux-ci n'existent pas.
Le nom est affiché dans l'onglet PARAM_INVENTAIRE
![]()
- Les onglets MACROS et POWERQUERY disposent désormais d'une icône
permettant d'exporter dans la bibliothèque les objets voulus qui sont toujours à marquer par une croix une "X" dans la colonne EXTRACTION.![]()
- L'extraction des objets dans le dossier qui héberge le classeur Excel a été conservée
![]()
- vous avez donc le choix ; elle reste présente à des fins de compatibilité et pour ceux qui souhaitent dans l'ancien mode.
- La bibliothèque apporte l'avantage de ne pas éparpiller les objets et extraits. Ainsi il est plus facile de les retrouver quand ils sont centralisés.
![]()
![]()
- Voici comment cela présente sur le disque
![]()
- A la racine de l'emplacement de la bibliothèque le dossier MODULES.BASa été automatiquement créé
- Dans ce dossier on y retrouve les dossiers correspondants aux dossiers de l'inventaire et de l'extraction
- Pour chaque classeur Excel un dossier est créé au nom du classeur Excel (un nettoyage des caractères parasites dans le nom du classeur est automatiquement effectué pour éviter tous plantages.
- Les modules sont ensuite déposés dans le dossier au nom du classeur Excel
![]()
Un lien Windows est automatiquement créé afin d'ouvrir le fichier Excel et de le retrouver dans son emplacement d'origine![]()
- Concernant l'extraction des requêtes POWERQUERY le principe d'extraction est identique
![]()
- Un dossier REQUETES.PQ est automatiquement créé
- Le rangement des objets suit les mêmes règles que les modules Macros
![]()
- Dans cet exemple nous avons deux liens car à l'origine nous avons deux classeurs Excel
- Exploitation de la bibliothèque construite via l'application LIBMAC
- Aller dans l'onglet BIBLIO
- Mettre à jour la bibliothèque via le bouton
![]()
![]()
A des fins éventuelles d'utilisations externes vous avez les onglets qui permettent une extraction aux formats XML, HTML, JSON, CSV![]()
- Je vous invite aussi aller voir le code Powerquery permettant d'explorer les dossiers en boucle avec la fonction List.Accumulate certes un peu complexe à manipuler pour les débutants mais très puissante.
PowerQuery:let Source = "", tmp_NOM_DOSSIER = Excel.CurrentWorkbook(){[Name="NOM_DOSSIER"]}[Content]{0}[Column1], sSep = fnGetParameter("TB_PARAMS","DEFAUT_SEP_DOSSIERS"), LST_Dossiers=Text.Split(tmp_NOM_DOSSIER,sSep), LstCombine=List.Accumulate( LST_Dossiers, // Initialisation de la boucle sur la liste � traiter #table({},{}), // Initialisation de l'accumulateur sur une table vide (state,current) => // Boucle de traitement pour combiner les fichiers un � un let Source = fnExtractFiles(current), // Importation de la table en cours Combine = if Table.IsEmpty(Source) then Table.Combine( {state , #table({},{})}) else Table.Combine( {state , Source}) // Combinaison de la table in Combine // Ensemble des tables combin�es ), STR_crit1=Excel.CurrentWorkbook(){[Name="LB_CRIT_TRI_1"]}[Content]{0}[Column1], STR_crit2=Excel.CurrentWorkbook(){[Name="LB_CRIT_TRI_2"]}[Content]{0}[Column1], crit1=if STR_crit1="<AUCUN>" then null else STR_crit1, crit2=if STR_crit2="<AUCUN>" then null else STR_crit2, pcrit1=if crit1 is null then null else "{{""" & crit1 & """, 0}}", pcrit2=if crit2 is null then pcrit1 else if pcrit1 is null then "{{""" & crit2 & """, 0}}" else "{{""" & crit1 & """, 0}" & ", {""" & crit2 & """, 0}}", evCritTri=if pcrit2 is null then null else Expression.Evaluate(pcrit2), TBL_TRI = if evCritTri is null then LstCombine else Table.Sort(LstCombine,evCritTri) in TBL_TRI
- REMARQUE : Les tests de robustesse ont été effectués sur plus de 5000 fichiers créés pour l'occasion et répartis dans divers dossiers. Certes les traitements d'inventaires et d'extractions prennent un peu de temps mais Excel n'a pas "freezé" en fin de traitement. Bon il faut dire que j'ai une bête de course, un I7 avec 12 Go de mémoire et disque flash interne de 1 Go.
- Pour un gain optimal il faudrait pouvoir extraire les objets sans devoir ouvrir les fichiers Excel par VBA et réussir peut-être à passer par l'OLE (je n'ai pas essayé). Je ne suis pas certain que ADO qui fonctionne très bien pour extraire des données de l'extérieur puissent fournir les mêmes résultats pour les modules VBE, les requêtes PowerQuery ou les noms pour les fonctions LAMBDA. Personnellement je n'ai pas tenté la manoeuvre. Si quelqu'un a une idée ? Je suis preneur
Bonjour Le Forum XLD,
Une nouvelle version qui embarque les nouveautés suivantes :
- la possibilité de mettre en place une log des traitements
- traçabilité des modules exécutés et l'affichage de pile des modules concernés par l'erreur
- les traitements d'exportation des modules et requêtes se font uniquement sur les lignes visibles
- les exports .csv se font aux aussi sur les lignes visibles
- les boutons de l'interface utilisateur sont remplacés par des icônes
- optimisation et factorisation du code
1. Les logs de traitements
Il est possible d'activer cette log via cette case à cocher![]()
Quand celle-ci est activée un fichier log est créé de la manière suivante :
![]()
En fin de traitement ce message est affiché
![]()
Exemple de contenu :
![]()
La gestion de cette log est assurée par la classe VBA
VB:Public oLog As Cls_LogFile ... ... Set oLog = New Cls_LogFile ... ... ... oLog.AddLogLine "Début traitements : " & vAppel
2. Suivi de la pile d'exécution
En cas d'erreur - exemple ci-dessous :
![]()
Cette pile est gérée par la classe
Code:Public oStack As Cls_StackModule empilement.. PUSH_STACK "MAIN()" dépilement POP_STACK "MAIN()"
3. Exports .csv et codes sur les lignes visibles
Exemple sans filtre
![]()
![]()
Exemple avec filtre
![]()
![]()
4. Refonte de l'interface
Fichiers - PARAM_INVENTAIRE
![]()
==> Recherche les fichiers (appel de PowerQuery)![]()
==> Lance l'extraction des macros, des requêtes powerquery, des fonctions Lambda![]()
==>Exportation .csv![]()
réinitialise et efface le tableau![]()
==> efface les critères powerquery pour la recherche des fichiers à traiter![]()
==> efface les filtres![]()
==> onglet Params![]()
MACROS
![]()
==> extraction du code![]()
==> Relance l'extraction des macros, des requêtes powerquery, des fonctions Lambda![]()
POWERQUERY
![]()
LAMBDA
![]()
QUERIE
![]()
==> Retour à l'onglet PARAM_INVENTAIRE![]()
==> Lance la recherche![]()
5. Optimisation du code
Dans les versions précédentes les objets traités pendant les phases d'extraction des macros, des requêtes powerquery et des fonctions Lambda étaient mémorisés dans des tableaux VARIANT. Leur dimension à chaque nouvel élémént était gérée par des REDIM PRESERVE... UBOUND() etc. etc.
En cas de fortes volumétries ces instructions sont assez coûteuses en mémoire. Les tableaux ont donc été abandonnés au profit des collections qui sont plus performantes. Il n'est nullement nécessaire de retailler le tableau en cas d'ajout d'un élément. Voir les classes suffixées *Define qui définissent les propriétés des objets traités. Pour la collection en elle-même nous avons la classe Collection de VBA.
Enfin, certaines parties de codes étaient redondantes, elles ont été factorisées et la déclaration des variables DIM a été "aérée" dans certaines procédures ou fonctions.
Pour conclure sur cette Saga 🙂 une V4 est en réflexion afin d'apporter une navigation dans les fonctionnalités via une personnalisation du ruban et donc l'abandon des icônes. L'ajout de ce ruban personnalisé demande une petite analyse et une restructuration peut-être de certaines parties de code.
Cette réflexion est en chantier actuellement et beaucoup trop "jeune" pour être publiée. En revanche je reste preneur d'idées pour l'organisation de ce ruban suite aux tests que vous auriez réalisés avec cet outil depuis sa première version. Merci le forum XLD.
Dans cette V4 il y aura certainement la création d'une bibliothèque centrale regroupant les codes des macros, les codes des requêtes powerquery et les codes des fonctions Lambda. Actuellement c'est "dispatché" dans les répertoires respectifs où sont hébergés les classeurs. Ceci pourrait devenir peu pratique pour effectuer des recherches.
La structure pourrait être la suivante
<NOM_DE_LA_BIBILIOTHEQUE> (Répertoire au choix au moment de la création de la bibliothèque)
<DOSSIER_DU_CLASSEUR_1> (dossier au nom du fichier EXCEL)
<MODULES.BAS>
...
...
...
<REQUETES.PQ>
...
...
<LAMBDA>
...
...
<DOSSIER_DU_CLASSEUR_(n)>
<MODULES.BAS>
...
...
...
<REQUETES.PQ>
...
...
<LAMBDA>
...
...
Cette hiérarchie sur disque pour donner lieu à la création d'un fichier .XML afin d'embarquer un mini moteur de recherche fondé sur ce fichier .XML
DONC IL Y A ENCORE DU BOULOT SUR CE PROJET
Bonsoir,
une nouvelle version qui boucle certainement la boucle.
En effet il manquait l'inventaire des fonctions personnelles développées avec LAMBDA().
C'est donc chose faite.
La liste déroulante EXTRACTION propose ceci
![]()
A ce titre le bouton d'inventaire des objets a été renommé :![]()
Concernant le paramétrage de l'inventaire des fichiers sur disque rien n'a changé.
Les fonctions LAMBDA détectées sont dans l'onglet LAMBDA.
La liste des valeurs dans l'onglet LOV a été adaptées ainsi que les l'onglets Params et Messages.
La recherche des fonctions LAMBDA est effectuée via le paramètre![]()
La "(" dans la clef de recherche renforce le fait de trouver une fonction personnalisée LAMBDA.
Voir le code pour plus de compréhension (pour les avertis en VBA).
L'onglet LAMBDA se présente comme suit
![]()
On peut constater qu'il a été simplifié. La fonction EXTRACTION d'une fonction sur disque n'a pas été reprise. Je n'y voyais pas trop d'intérêts. Le double-clic sur la ligne permet toujours d'ouvrir le fichier.
Nous avons deux colonnes de scripts
![]()
SCRIPT : formules avec les fonctions "anglaises"
SCRIPT_LOCAL : formules avec les fonctions en langue de votre version.
Avantage : cela vous permet de trouver les correspondances entre les fonctions Anglaises et les fonctions locales.
L'export sur disque crée un fichier dans le répertoire de l'application :
![]()
![]()
A noter : afin que ce fichier soit compatible avec Excel en cas d'ouverture avec ce dernier les ";" du script local ont été remplacés par des ","... ça évite la multiplication de colonnes... en effet ";" c'est le séparateurs de cellules... (selon la config de votre Excel)... à modifier si besoin et éventuellement le code pour y mettre un autre séparateur selon votre installation d'Excel
Correction concernant Autofit et la largeur automatique des colonnes désormais paramétrable
Autofitne doit pas être activé pour l'extraction des macros et des requêtes![]()
correction sur le positionnement des shapes... qui sont toujours galère avec les largeurs de colonnes
![]()
Il y a réglage systématique dans l'onglet querie à l'issue de la recherche
Bonjour Le Forum,
Suite à une utilisation plus personnelle sur mes fichiers Macro et PowerQuery je me suis rendu compte qu'il manquait certaines choses et que le mode de stockage des objets devait être revu. C'est l'une des évolutions majeures.
Autre évolution majeure : extraction sur disque des composants VBA (module.bas)
Enfin cette nouvelle version a bénéficié de quelques fonctionnalités supplémentaires.
Evolution de la liste de choix des fichiers à sélectionner
![]()
Sélectionner les composants des fichiers à extraire dans la colonne
![]()
puis cliquer sur![]()
Valider![]()
![]()
7 sélections ont été traitées mais seulement deux modules ont été exportés. En effet il y a des objets qui appartiennent au même ficher, il est donc inutile de récréer le module étant donné qu'il a déjà été créé.
Les modules sont enregistrés dans un sous-dossier dans le dossier qui héberge fichier. Ce dossier est dans les paramètres![]()
exemple
![]()
Nouveau bouton que l'on retrouvera dans tous les ongletsIl permet de réinitialiser les filtres posés dans les colonnes du tableau.![]()
Ces boutons agissent uniquement que sur les lignes visibles, pratique quand on filtre sur les colonne du tableau pour extraire des composants.![]()
Ces boutons fonctionnent de la même manière dans les autres onglets.
Conseil : préparer vos sélections dans les colonnes et appuyer sur le boutonpour embarquer votre sélection uniquement.![]()
Concernant les extractions des requêtes elles sont aussi déposées dans un sous-dossier du dossier qui héberge le fichier Excel.
Exemple de compte rendu en fin de traitement
![]()
En effet il est possible que l'on retrouve le même nom de requête dans plusieurs fichiers. Afin de ne pas écraser la requête existante déjà exportée, la nouvelle est renommée avec le fichier du fichier en préfixe.
Le dossier![]()
exemple :
![]()
Dans l'onglet QUERIE il est aussi désormais possible d'extraire les modules VBA.
Bonjour,
vous trouvez une nouvelle version qui réalise aussi l'inventaire des requêtes PowerQuery.
Inventaire des requêtes PowerQuery - L'onglet paramétrage
Ajout d'un mode Extraction :
![]()
Le paramètre type de fichier tient compte désormais des fichiers .XLSX
![]()
Exemple de paramétrage
![]()
Le libellé permettant de réaliser l'inventaire des objets macros et requêtes a été adapté.
Le mode ajout/remplacement fonctionne de la même manière que les macros.
Rappel ! le remplacement ne se fait (effacement) que pour les tableaux macros et requêtes
Présentation de l'onglet POWERQUERY
![]()
On retrouve déjà les fonctionnalités de base de l'onglet macros.
Colonne SCRIPT : Présentation non formatée du script de la requête - les retours chariots on été supprimés pour ne pas alourdir la cellule. On retrouve son contenu comme ceci :
![]()
Cependant pour une meilleure lisibilité par un double-ci dans la colonne REQUETE la requête est affichée comme suit :
![]()
![]()
C'est donc plus présentable.
cliquer sur la [X] pour fermer la fenêtre.![]()
Un Double-Clic dans la colonne FICHIER exportera la requête sur disque
![]()
![]()
![]()
Construction du nom de fichier :
TBL_CONSO_GAZ => nom de la requête
__ => séparateur
LAB_GROUPER_PAR_V1.004.xlsm ==> nom du fichier Excel
.pq ==> extension pour PowerQuery
Par défaut elle est exportée dans le dossier de l'outil et dans le dossier EXPORT_REQUETES (voir le paramétrage). Si à la 1ère utilisation il n'est pas créé il le sera pas l'outil.
Si la requête a déjà été exportée il y aura une demande confirmation...
![]()
Les extractions peuvent être faites soit :
- de manière unitaire (cas ci-dessus)
- de manière sélective en marquant par une [X] la requête dans la colonne EXTRACTION
quelque soit la casse du X. Un compteur des fichiers marqués est automatiquement calculé. Pour les extraire :
puis confirmer![]()
- de manière totale par ce boutonToutes les requêtes seront marquées par une [X] et relancer l'opération Extraire les requêtes.![]()
Efface le marquage![]()
Un double-Clic dans les autres colonnes ouvrira le fichier comme pour les Macros.
L'export au format .csv est aussi disponible :![]()
Nouvelle fonctionnalité que l'on retrouvera aussi dans l'onglet Macros :![]()
Enfin cette nouvelle version a été aussi l'occasion de corriger quelques petites coquilles mineures de la version 1.0
Je rappelle une nouvelle fois : le code est ouvert. Les fonctionnalités sont adaptables à vos besoins.
Nous utilisons des cookies essentiels pour faire fonctionner ce site, et des cookies facultatifs pour améliorer votre expérience.