Programme de traitement de fichier en VBA
Bonjour à tous,
Je sollicite votre aide, car cela fait plusieurs semaines que je bloque sur un problème et j'aimerai avoir un coup de main de personne ayant une expérience solide en VBA.
Mon programme fait les choses suivantes :
- Je dois renseigner une période et cela calcul automatiquement les dates de début et de fin (pour filtrer les valeurs).
- Je choisi un fichier excel dans lequel je vais renseigner mes calculs
- je choisi les fichiers .txt à ouvrir
- ensuite le programme doit mettre en forme le fichier en enlevant des caractères.
- il doit reconnaître la machine sélectionnée en fonction d'un numéro présent dans le nom du fichier et cela doit récupérer une valeur de puissance max dans un tableau excel
- ensuite je dois lire le fichier ligne par ligne en contrôlant la date et l'heure et vérifier si c'est bien compris dans ma période choisi. Si ça ne l'est pas je récupère rien.
- Je fais un test sur la valeur de production récupérée et si elle dépasse la valeur max, je dois lui affecter une valeur fixe (valeur max de la machine).
- Je stocke la valeur totale dans une variable A et je stocke la valeur modifié dans un autre variable B
- Une fois le fichier passé, je dois ouvrir un fichier excel, stocker la valeur A dans une colonne et la valeur B dans une autre colonne.
- Je dois ensuite enregistrer le fichier excel et le fermer.
- je dois afficher l'état d'avancement.
En tout j'ai une cinquantaine de fichier a passer..
Mon problème est que ma macro fonctionne bien, mais elle est vraiment dégeu (ayant appris VBA il y a mois de 6 mois en auto-didact).
J'essai de mettre à jour mon code vers une programmation Objet sachant que je vais devoir rajouter des machines et aussi créer de nouvelles macros pour des nouveaux types de machine.
Le tout devra être utilisable dans une appli Excel avec des menus, sous-menus...
Le projet est tellement complexe et c'est mon premier gros projet que je ne sais pas par où commencer.
Par exemple, dois-je dans un premier temps faire une boucle qui remet en forme chaque fichier avant de lancer le traitement ou dois je faire la remise en forme sur chaque ligne lorsque je vais lire le fichier ?
Idem, si je créer une classe fichier avec une méthode traitement(), dois-je créer une boucle sur les fichiers dans mon main et appeler la méthode traitement() ou faire une méthode traitement() qui boucle sur tous les fichiers... ?
Pour le moment j'ai :
Un module TestClassFichier contenant :
- L'instanciation de ma classe Fichier avec dans le constructeur une date de début et une date de fin
- Un appel vers la méthode ouvrir de ma classe Fichier
Un module de classe avec :
- Sub Ouvrirfichier() qui boucle sur les fichiers et qui appel une sub Traiter()
- Sub Traiter() qui récupère le nom du fichier, qui appelle une fonction pour récupérer le nom de la machine, puis qui appelle une autre fonction avec le nom de la machine pour récupérer la valeur max de la machine (des switch case renseignés, environ 50 tests...). Ensuite elle lit le fichier ligne par ligne et appelle une fonction de remise en forme de la ligne en supprimant des caractères. Ensuite elle split la ligne en deux parties et fait un test sur les deux parties. Si la date n'est pas compris dans l'intervalle, elle ne fait rien. Sinon elle récupère la valeur de production et la test en fonction de la valeur max puis stocke la valeur dans deux variables :
Variable 1 Valeur = valeur + valeur (on somme toutes les valeurs et on les sommes)
Variable 2 Valeur 2 = Valeur2 + Valeur2 si valeur2 <ValeurMaxMachine sinon Valeur2 = Valeur 2 + ValeurMaxMachine.
A la fin du fichier, elle appelle une Sub EnregistrerExcel() qui ouvre le fichier Excel, y stocke la Valeur1 dans la colonne A puis la Valeur2 dans la colonneB puis l'enregistre et le ferme.
Vous comprenez à présent pourquoi je suis complètement perdu... :(
je suis conscient que cela est complexe et que cela vous fera pas mal de lecture, donc je remercie d'avance ceux qui vont prendre le temps de m'aider.
Amicalement.