Utilisation d'un UserForm dans le code de base
Bonjour à toutes et tous,
j'essaye de développer un petit outil très simple pour gagner du temps au travail (et m'entraîner en VBA parce que je suis un total débutant, niveau 0, au ras des pâquerettes) et j'aurai besoin de votre aide.
Pour résumer : Un software sort un fichier .csv très bourrin. Le but est d'automatiser son nettoyage et le traitement des données afin d'obtenir un ou plusieurs graphiques.
Il faut savoir qu'un ami m'a déjà beaucoup aidé mais j'aimerai faire la suite tout seul (ou presque) !
Tout d'abord, vous trouverez dans mes fichier un premier fichier "Besoin_CodeV1" qui contient :
- 3 worksheets de "tuto" que j'ai fait pour expliquer ma demande de base à mon ami (vous me pardonnerez les quelques familiarités)
- 1 worksheet étant le résultat de ce que lui m'a fait (code VBA compris)
Ensuite, le deuxième fichier "Fichier_Test", est un modèle de fichier .csv que peut produire notre software et dont j'aimerai automatiser le traitement.
1ere problématique :
Ça va paraître bête, mais déjà j'aimerai savoir s'il est possible de sauvegarder le projet VBA localement et non à l'intérieur de "Besoin_CodeV1" ?
Tout simplement pour pouvoir appeler la macro depuis n'importe quel classeur sans avoir à ouvrir le classeur que m'a fait mon ami en arrière-plan. (Je vous ai dit que j'étais au niveau 0 ?)
2emE PROBLÉMATIQUE :
J'ai bien lu le programme de mon ami et je pense avoir compris ce qu'il fait, et comment il le fait, à environ 60%. C'est plus compliqué pour moi à partir de la gestion de "SplittedTable" et du For if mais bref, ce n'est pas le sujet.
Comme vous l'aurez peut-être déjà remarqué, le code qu'il m'a fourni ne peut traiter que 5 colonnes de données (CH1/CH2/CH3/CH4/CH5) tandis que mes fichiers .csv peuvent en contenir jusqu'à 20 (En l'occurrence, jusqu'à 7 dans "Fichier_Test" que je vous ai fourni).
J'aimerai comprendre comment augmenter la capacité du programme en terme de récupération de mes colonnes CH, et surtout comment faire en sorte qu'il s'adapte au nombre de colonnes CH même si je crois que c'est déjà le cas grâce à :
' Recherche de la dernière ligne non vide
lastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row3EME PROBLÉMATIQUE :
(Après j'arrête c'est promis)
J'aimerai optimiser le choix des CH à traiter (autrement qu'avec l'input box de base ou il faut écrire chaque N° de CH à traiter séparés par des /).
C'est pour ça que j'ai créé un UserForm dans le projet VBA. Composé de 20 checkboxes représentant les potentielles 20 channels à traiter et d'un bouton de validation.
Le problème c'est que je n'ai aucune idée de comment utiliser un UserForm une fois la partie esthétique/Frontend effectuée. Comment faire en sorte de remplacer l'InputBox de base par mon UserForm ? Comment appeler les nouvelles variables dans le code de base ? Y a-t-il besoin de créer 20 nouvelles variables ?
Voilà ! Maintenant vous savez tout, j'espère que tout est clair. Merci d'avance à celles et ceux qui pourront m'aider !
Bonjour
Oublie VBA et travaille avec PowerQuery intégré à Excel
J'ai allégé le csv pour pouvoir reposter mais il te suffit de modifier le chemin dans la cellule jaune et tu retrouveras tes données
Le changement de cette cellule ou du choix de CH traite le fichier et le CH voulu. Avec tes très gros fichiers cela peut prendre quelques secondes
(seuls les 2 changements de choix sont gérés par VBA pour déclencher la mise à jour)
Bonjour Chris,
Merci beaucoup pour ta réponse ! C'est en effet très efficace.
Je connaissais PowerQuery de nom seulement, c'est vrai que je n'ai jamais trop cherché à connaitre son utilité...
Du coup si j'ai bien compris, le fichier que tu m'as envoyé fait office d'interface de contrôle ? Je change juste le chemin d'accès vers le .csv de mon choix et abracadabra ?
Un petit souci persiste cependant, le fait d'être limité à 5 CH alors que mon fichier test, par exemple, en contient 7.
Ok c'est bon j'ai un peu triffouillé (et découvert en même temps) le fichier et je pense que j'ai compris les paramètres à modifier. Je considère le sujet clos !
Encore merci !
RE
Tu donnes un exemple où tu as viré les 6 et 7 donc on en déduit que tu n'en veux pas...
Il peut y en avoir un nombre variable ?
J'avais précisé dans le paragraphe "2eme problématique" de mon premier message ce qui suit :
Comme vous l'aurez peut-être déjà remarqué, le code qu'il m'a fourni ne peut traiter que 5 colonnes de données (CH1/CH2/CH3/CH4/CH5) tandis que mes fichiers .csv peuvent en contenir jusqu'à 20 (En l'occurrence, jusqu'à 7 dans "Fichier_Test" que je vous ai fourni).
Il peut donc y en avoir jusqu'à 20. Du coup j'ai réussi à modifier tes requêtes en faisant un petit peu de reverse engineering. Le fichier peut donc traiter jusqu'à 20 channels maintenant !
Le seul souci, que je viens tout juste de découvrir, c'est que la liste déroulante dans la cellule de choix ne propose que jusqu'à CH5. Et là je sèche, je ne vois pas où c'est configuré.
C'était tout simplement dans "validation des données" je suis un guignol, toutes mes excuses !
Cette fois c'est officiellement clos, merci beaucoup pour ton aide et pour m'avoir fait ouvrir les yeux sur PowerQuery haha !
RE
Effectivement partant du principe que je ne ferai pas de VBA je n'ai pas lu tout le message mais me suis référé aux étapes du classeur exemple
Classeur modifié :
- importation de 25 colonnes,
- nettoyage automatique des colonnes autres que Date et CH
- extraction de la liste des CH pour alimenter la liste déroulante pour le choix de CH (qui liste donc ceux trouvés dans le fichier csv)