LAMBDA TOOLS MANAGEMENT V2.1

oguruma

XLDnaute Occasionnel
N'ayant pas les droits suffisants pour déposer cette ressource dans le forum [RESSOURCE] je passe donc par ici.
Il fait suite à la V1.0 très limitée et simpliste.
La version 2.0 est un peu plus complète.
Elle permet de :
* de recopier des fonctions LAMBDA d'un classeur vers un autre classeur
* de gérer une bibliothèque de fonctions ; cette bibliothèque peut être soit intégrée sans l'utilitaire soit dans un autre classeur qui servira de dépôt et de référence pour toutes vos fonctions LAMBDA.

Page d'accueil
1690123928522.png


1690123950668.png
-->permet de renseigner le classeur source
1690123997638.png
--> permet de renseigner le classeur cible

Dès les classeurs source et cible renseignés il faut effectuer l'inventaire des fonctions via
1690124059662.png

L'inventaire des fonctions est lancé et également on récupère les fonctions LAMBDA qui pourraient se trouver dans l'utilitaire.
Elles sont déposées dans
1690124132038.png


Bien entendu il y a des contrôles : il faut que les classeurs soient renseignés par exemple, on vérifie également si les tableaux ne sont pas vides avant d'effectuer les traitements, la source ne peut pas être identique à la cible,.... je vous laisse lire le code pour comprendre tout cela

Par défaut les colonnes "RECOPIE" et "FORCE" sont mises à Non.
"FORCE" permet de forcer la recopie si la fonction est déjà présente dans la cible.

1690124228013.png
ces boutons permettent de mettre la colonne soit à Oui soit à Non

1690124266390.png
--> recopie les fonctions vers le classeur cible
1690124291559.png

1690124304003.png
--> recopie les fonctions vers la bibliothèque interne
1690124336505.png

1690124356749.png
--> recopie les fonction vers le classeur cible
1690124392647.png
--> recopie les fonctions vers le classeur source

On peut donc entrevoir tous les mixages possibles entre vos fichiers. Il est donc facile de propager vos fonctions d'un classeurs vers un autre ou vers plusieurs.
A l'issue d'une recopie, afin de voir le résultat il est possible d'actualiser et d'afficher les fonctions disponibles
1690124520480.png
(l'outil ne le fait pas automatiquement)

1690124572150.png
--> réinitialise le tableau (les fonctions dans le classeur ne sont pas effacées)

Pour les néophytes en VBA, je les invite à explorer le code. Il est assez bien documenté.
A travers celui-ci il est montré :
- comment on accède au système de fichiers de windows pour sélectionner un classeur
- comment on manipule des tableaux structurés (je les 'invite de favoriser l'utilisation de TS dans vos applications. Voir le net, il y a assez de prose là-dessus)
- comment on pilote les erreurs éventuelles
- un petit détour par la gestion des classes (SpeedMacro) afin de bloquer les fenêtres etc. pour accélérer les traitements
- la manière dont on code en général, l'utilisation de variables globales (pour cela je conseille de réserver un module spécifique)
- ne pas hésiter à découper votre code par le passage de paramètres

A des fins de tests vous pouvez par exemple utiliser les fichiers avec les exemples de fonctions LAMBDA que j'ai déposé les semaines précédentes.

Si vos tests sont concluants recommencez l'opération avec vos propres fichiers.

PRUDENCE : Il est recommandé au préalable de faire une sauvegarde des fichiers source et cible.
On n'est pas à l'abri de corrompre un fichier pendant la recopie.... Avec EXCEL il faut s'attendre à tout !.... les experts ont déjà connu cela ;););)
 

Pièces jointes

  • LambdaToolsManagement_2.0.xlsm
    79.3 KB · Affichages: 4
  • LambdaToolsManagement_2.0.xlsm
    79.3 KB · Affichages: 2
Dernière édition:

oguruma

XLDnaute Occasionnel
A suivre une version 2.1
- optimisée
- inventaire automatique à l'issue de la sélection des classeurs
- export du code des fonction dans un fichier texte en même que la recopie vers un classeur cible ou biblio
- extraction du code source des fonctions afin de les placer dans des onglets spécifiques pour des besoins consultations.... ça évite pour le classeur source de l'ouvrir pour se rappeler ce que ferait une fonction dont on ne sait plus trop ce qu'elle fait...
- la prise en compte du champ commentaires et son alimentation pour suivre les versions....

ainsi l'outil devrait être complet. Les experts en VBA pourront le reprendre pour le compléter éventuellement selon leurs propres besoins. Perso j'ai fait le tour du sujet.
 

oguruma

XLDnaute Occasionnel
Pour les plus pressés : une version 2.0.16 qui est déjà à un stade très proche finalisation puisqu'elle embarque toutes les évolutions citées dans le post précédent.
Les tests de surface étant réalisés, restent ceux en profondeur, les plus longs.
Il y a une fonction export au format texte. Je vous laisse apprécier et identifier comment elle se déclenche.

Les listing de codes des fonctions sont gérés par du PowerQuery. J'y reviendrai au moment de la livraison de la version 2.1. Les RQ powerquery s'appuient sur des fichiers .csv générés automatiquement pendant l'inventaire.
Voir l'onglet paramètres pour cela.
Les RQ vont directement chercher leurs paramètres dans cet onglet. Je passe par une fonction pqw personnalisée pour lire un paramètre. Les fichiers sont générés dans le répertoire où est hébergé l'outil ainsi le chargement dans le listing peut se faire automatique sous contrôle d'une gestion d'erreurs.
A des fins de tests je vous livre aussi des fichiers d'exemples.
Tout sera détaillé prochainement. La boucle sera ainsi bouclée sur ce chapitre.
 

Pièces jointes

  • LambdaToolsManagement_2.0.16.xlsm
    326.5 KB · Affichages: 0
  • O_365_CIBLE_5.xlsx
    9.7 KB · Affichages: 0
  • O_365_CIBLE_2.xlsx
    13.5 KB · Affichages: 0
  • O_365_CIBLE_3.xlsx
    13.5 KB · Affichages: 0
  • O_365_CIBLE_4.xlsx
    13.5 KB · Affichages: 0
Dernière édition:

oguruma

XLDnaute Occasionnel
La version 2.1 est désormais disponible.
Un bon nombre de tests ont été faits. Cependant, je ne suis pas à l'abri de quelques oublis. Pour ceux ou celles qui testerait ce "petit truc" me communiquer en réponse les Bugs ou les améliorations éventuelles.

Partons désormais dans la description technico-fonctionnelle.
L'application est livrée vierge.

1690294573420.png


Quelques nouveaux onglets par rapport à la v2.0
1690294609926.png
1690294620853.png


Comme annoncé dans un post précédent les onglets LISTING contient le code source des macros.
Ils sont alimentés au moment de l'inventaire des classeurs source, cible et biblio.
Cette alimentation passe par la création d'un fichier .csv dans le répertoire qui héberge l'outil de management.
Ce fichier est ensuite capté par une fonction PowerQuery (une pour chaque type).
Il est vrai qu'en PWQ j'aurai pu faire une fonction de chargement universelle. Peut-être dans une prochaine version si on veut être plus "pro".
Tout ceci est effectué en VBA.
Les RQ PowerQuery s'appuient sur l'onglet Params. La lecture des paramètres est effectuée par la fonction getParameters. (Un exemple de code a été déposé dans le forum). La voici pour mémoire
(pTable as text, pName as text) =>
let
Source = Excel.CurrentWorkbook(){[Name=pTable]}[Content],
RowsParams = Table.SelectRows(Source, each ([PARAMETRE] = pName)),
value = RowsParams{0}[VALEUR]
in
value


Le code d'une requête
let
PATH=getParameters("TB_PARAMS","PATH"),
FILENAME = getParameters("TB_PARAMS","FILE_NAME_SOURCE"),
Source = Csv.Document(File.Contents(PATH & "\" & FILENAME),3,"||",ExtraValues.Ignore,1252),
PROMOTE = Table.PromoteHeaders(Source, [PromoteAllScalars=true])
in
PROMOTE


Ainsi on voit comment on exploite les paramètre se trouvant dans l'onglet Params. Le paramètre PATH est positionné automatiquement dans l'onglet Params au chargement du classeur... Astucieux Hein ? ;)

Pour les moins expérimentés à l'ouverture dans le module ThisWorkBook
Private Sub Workbook_Open()
ThisWorkbook.Worksheets(WK_TRANSFERT).Select
Call INIT(NO_DIALOG)
End Sub


C'est la phase d'initialisation du classeur. On procède au nettoyage de l'ancienne session.
On peut remarquer ceci : Call INIT(NO_DIALOG)
En effet, la majorité des fonctions et procédures ont ce paramètre optionnel "DUMY".
Cela me permet de gérer des cas particuliers... exemple l'affichage de messages ou PAS.
Voir aussi le module Mod_Global qui héberge les constantes de l'outil.

Au moment du choix des classeurs il y a quelques contrôles :
- la source ne peut pas être identique à la cible ;
- le classeur de l'outil ne peut pas être sélectionné pour éviter des dysfonctionnements en boucle.

Simulation : sélection d'un classeur source et cible

1690295586090.png


1690295619547.png
permet de positionner les options de copie et de remplacement en cas de présence dans le classeur cible ou biblio.

1690295680146.png

Ces boutons permettent :
- de mettre à jour le tableau (relance de l'inventaire) ;
- de recopier les fonctions sélectionnées soit vers la cible soit vers le biblio de l'outil.

1690297082272.png


1690297145634.png


1690297135758.png


1690297161575.png

1690297194339.png


EXEMPLE DE LISTING

1690297227411.png


Le fait d'avoir ce listing "sous les yeux" vous évitera d'ouvrir le classeur et le ruban des formules pour se rappeler comment vous avez codé la fonction ou voir ce qu'elle fait ; et de juger pourquoi pas la nécessaire de la transférer vers un autre ou de la place en biblio.

Le classeur choisi comme cible peut aussi faire office de bibliothèque si vous ne souhaitez la stockée dans l'outil. Cependant par sécurité je n'ai pas prévu de fonction DROP car dans ce cas il faudrait gérer une suppression au cas par cas. Peut-être dans une prochaine version....



1690295788876.png

si ce paramètre est à Oui les fonctions avec leur code sont exportées dans un fichier texte à titre de documentation. Le fichier est créé dans le dossier qui héberge le classeur.

Exemple de fichier généré

1690297280112.png


Donc facilement exploitable pour la transmission de vos fonctions à un collègue par exemple ;)

Le fichier export peut être créé sans devoir activer la copie. D'où la double fonction des boutons comme
1690295933117.png


L'outil par simplicité n'actualise pas directement les tableaux d'où la présence de ces boutons
1690295995604.png


1690296018603.png

Ce bouton comme son l'indique permet de supprimer physiquement les fonctions Lambda stockées dans la biblio de l'outil. Cela permet de faire du "propre" et de repartir sur un outil vierge sans devoir aller dans l'onglet Formules pour les supprimer une à une avec les risques d'erreurs.

Pour les experts et aussi pour les néophytes : une petite astuce de programmation par rapport aux 1ère versions livrées (et on n'y pense pas toujours).
En effet les boutons font tous appels à une procédure MAIN().
Rapidement :
- les boutons sont tous nommés, exemple BTN_GET_SOURCE
- il font appel à la Macro MAIN()
cette fonction identifie la l'origine de l'appel via la propriété CALLER.
CALLER renvoie un string (nom du bouton).
Un Select Case permet donc de lancer la procédure voulue.
Il y a bcp d'avantages à cela :
- une seule procédure qui fédère le lancement du code
- maintenance plus aisée
- évite la répétition de code dans certains cas, le code à lancer systématiquement pour toutes les fonctions développées peut être placé astucieusement dans cette procédure Main()

Une nouvelle fois j'invite les débutants à explorer le code dans ses moindres détails. Ils donne de bonnes pratique "sur comment coder", "comment bien déclarer ses variable", etc. etc. (nous ne sommes pas dans un cours VBA).

Bons tests. L'essentiels ayant été dit. Il ne vous reste plus qu'à tester. ;)
 

Pièces jointes

  • LambdaToolsManagement_2.1.xlsm
    303.8 KB · Affichages: 3
Dernière édition:

oguruma

XLDnaute Occasionnel
Un complément concernant le paramétrage de powerquery car il est possible qu'il vous renvoie un msg d'erreur sur des pb
1690313285735.png
de firewall ce qui n'est pas le cas.
Il faut en fait détourner la sécurité comme ceci dans les paramètres de pwq
ouvrir powerquery puis fichier

1690313426590.png


puis

1690313474470.png



1690313285647.png


1690313331073.png

1690313363975.png

1690313399934.png
 

Statistiques des forums

Discussions
314 697
Messages
2 111 993
Membres
111 383
dernier inscrit
ROSSI85