XL 2013 Traitement trop long optimisation de code pour générer 2 états

Merlin258413

XLDnaute Occasionnel
Bonjour à tous je me permets de solliciter votre aide dans le cadre d'une optimisation de code. Ces codes me permettent de sortir 2 états en TDC (ONGLET ETAT DES FAE attendu et ETAT DES FACTURES)
Ces codes fonctionnent parfaitement mais le temps de traitement est très long.
Ce fichier peut comporter énormément de ligne j'ai indiqué ici qu'une petite partie de janvier et février à fin octobre je suis à 1200 lignes d'où le temps du traitement.

Comme les 2 états sont issus du même tableau, une simplification peut être apportée, mais là j'ai atteint mes limites.
Mon projet en PJ explication
J'ai un onglet "Base" dans cet onglet j'ai aussi un tableau intitulé "base" source de mes TDC
Dans cet onglet lorsque je choisis un mois cellule C2 j'ai un code qui est généré.

1- le code va tout d'abord lancer une macro qui se trouve dans le module SUIVI
- Mise à blanc des états intermédiaires (FACTURE et FAE) qui servent à réaliser les TDC
- Section du tableau "Base" et copie sur l'état intermédiaire FAE
- Suppression des colonnes ne correspondant pas au mois sélectionné dans l'état FAE
- Suppression des lignes de cette colonne si j'ai la valeur vide ou ANNULEE
- Sélection de l'état intermédiaire FAE pour une copie dans l'état intermédiaire FACTURE : j'utilise cette étape intermédiaire car je n'aurais pas besoin dans mon état FAE de la colonne facture et dans mon état FACTURE de la colonne Programme
- Traitement de l'état FAE
- Suppression de toutes les valeurs différentes de FAE (à ce stade, je ne peux qu'avoir FAE, FACTURE ou ENCOURS)
- Tri par ordre croissant
- Traitement de l'état FACTURE
- Suppression de toutes les valeurs différentes de FACTURE (à ce stade, je ne peux qu'avoir FAE, FACTURE ou ENCOURS)
- Suppression des colonnes inutiles
- Tri par ordre croissant
- Protection de la feuille
2- Lancement du code MISE EN FORME ne concerne uniquement que la mise en forme de l'état des FAE avant d'obtenir le TDC final "ETAT DES FAE ATTENDU et enfin Actualisation de tous les TDC
J’ai réussi à réduire en le sauvegardant en xlb au lieu de xlsm.
Quand vous le télécharger il faudra le reconvertir en xlsm.
Le mot de passe de protection de l'onglet Base est ProgSN vous le retrouvez dans les modules
Ce fichier peut comporter énormément de ligne j'ai indiqué ici qu'une petite partie de janvier et février à fin octobre je suis à 1200 lignes d'où le temps du traitement.
En espérant avoir été clair et merci pour toute votre aide
 

Pièces jointes

  • Production 2015.zip
    292.6 KB · Affichages: 50
  • Production 2015.zip
    292.6 KB · Affichages: 41

Dranreb

XLDnaute Barbatruc
Re : Traitement trop long optimisation de code pour générer 2 états

Mais en tout cas hélas pas par prestation comme les autres ?
Pourriez vous rajouter en rouge, au dessus des titres de vos modèles, les numéros de colonnes que j'ai ajouté ligne 3, feuille Base ?
Ça me faciliterait bien la vie. Et aussi la mention "Tot" sous ceux qui doivent être totalisé.

Remarquez si la colonne X (24: "Option") n'est reproduite nulle part, je pourrait m'en servir en interne pour y mettre une copie des Id du sous groupes de niveau 2. comme ça je pourrais y mettre une copie du BU pour les FAE et… non ça ne va pas. Je vais être obligé d'extraire les données séparément pour les 3 états.
 
Dernière édition:

Merlin258413

XLDnaute Occasionnel
Re : Traitement trop long optimisation de code pour générer 2 états

Est ce que cela correspond à votre demande je vous ai indiqué l'ordre de tri croissant (je commence par le Niv1 puis le Niv2...ce ne sont pas des sous totaux mais juste des niveaux)
 

Pièces jointes

  • Trame v2.xlsx
    11.7 KB · Affichages: 46

Dranreb

XLDnaute Barbatruc
Re : Traitement trop long optimisation de code pour générer 2 états

Bonjour.

Voilà où j'en suis.
Ça pourrait être très intéressant pour vous d'écrire vous même les procédures RapportEnCours et RapportFactu, si pour ça vous voulez bien de moi comme coach. Elles se rédigent sur le modèle de la RapportFAE, en ayant avant tout sous les yeux la feuille "Cahier de charges".
 

Pièces jointes

  • GrpOrgMerlin258413.xlsm
    431.5 KB · Affichages: 51
  • GrpOrgMerlin258413.xlsm
    431.5 KB · Affichages: 51

Merlin258413

XLDnaute Occasionnel
Re : Traitement trop long optimisation de code pour générer 2 états

Bonjour c'est parfait par contre serait -il possible de rajouter devant la ligne du total général l'intitulé de TOTAL et la mettre sous le même fond que les entêtes.
Vous je veux bien essayer d'écrire les procédures (novice je ne garantie pas le résultat) cela sera un bon entrainement
Je risque de vous poser des questions très bête
Puis il faut que je décortique les codes pour les comprendre car je vais être honnête quand je regarde le code de Rapport FAE je n'y comprend vraiment rien
Je vais pouvoir m'y mettre qu'à partir de vendredi et je vous tiens au courant
Merci beaucoup pour la réalisation de ce projet du temps passé

le module Utilit ce sont des exemples de code c'est bien cela
 

Dranreb

XLDnaute Barbatruc
Re : Traitement trop long optimisation de code pour générer 2 états

Il n'y a pas de question bête, je m'évertuerai seulement à faire en sorte que mes réponses ne le soient pas.
Ajoutez comme antépénultième ligne de code :
VB:
Cel.EntireRow.Columns("A") = "Total général"
Ah et puis tenez, j'ai ajouté cette formule en A1 :
Code:
="Rapport des factures à établir "&SI(ESTNUM(Base!$C$2);"pour le mois de "&TEXTE(Base!$C$2;"mmmm aaaa");"en derniers lieux")
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Traitement trop long optimisation de code pour générer 2 états

Oups, je n'avais pas vu votre question du poste précédent.

Un module standard est un ensemble d'options et de déclarations de variables globales suivies de procédures.
Les variables globale et les procédures déclarées avec le mot clé Public sont connues sous leur simple nom dans tout le projet VBA et même dans d'autres projets qui auraient celui ci en référence, tandis que celle déclarées avec Private ne sont partagées que par toutes les procédures du module mais inconnues à l'extérieur de celui ci.

Un module de classe est à la fois un modèle d'objet, son plan de construction et la programmation destinée à fonctionner sur les exemplaires qui en seront créés. On préfèrera ce mot "exemplaire" à l'anglicisme "instance" du jargon informatique, pour bien le distinguer de son type, qui n'est autre que le nom du module de classe. Celui ci devient en effet d'office un type de donnée, de sorte qu'on peut le préciser derrière As dans une déclaration Dim, Private ou Public.
Dans la programmation extérieure au module de classe on ne voit de celui ci que les éléments y étant précisés avec le mot clé Public, mais, à la différence d'un module standard, on ne peut y accéder qu'à condition de le faire précéder d'un point, puis encore devant, à moins d'une instruction With préalable la précisant déjà, d'une expression représentant un exemplaire de cet objet (sinon: erreur de compilation). S'il s'agit d'une variable, il faut en outre qu'une expression de son type lui ait été affectée par un Set (sinon: erreur d'exécution, cette fois). Fort heureusement, l'expression formée du mot clé New suivi du type d'objet (qui est en même temps le nom de son module de classe) représente un exemplaire tout juste créé de ce type d'objet.
Propriétés et méthodes sont les appellations conventionnelles de ces éléments visibles de l'extérieur du module de classe, déjà vues dans l'aide de VBA à propos des objets de bibliothèques fournies. Une chose déclarée Public dans un module de classe a un statut de propriété quand il s'agit d'une simple variable, d'une Function ou d'une Property Get dépourvues de paramètre, ou d'une Property Let ou Set munie du seul faux paramètre formel représentant la valeur à lui attribuer. Dans tous les autre cas il s'agit d'une méthode, en particulier quand c'est une Sub avec ou sans paramètre.
Quelquefois, dans la littérature, la notion de propriété semble bizarrement étendue aux méthodes dont le seul rôle est de renvoyer quelque chose, même si elle nécessite un paramètre, comme .Range(…). Mais Add est bien considéré comme une méthode, le renvoi de l'objet créé n'étant pas, je suppose, son rôle principal.
Enfin, un objet peut aussi décrèter des évènements dans un autre module objet. Pour cela, il doit y être déclaré en tête avec le mot clé WithEvents. Cela a pour conséquence d'installer son nom dans la liste de gauche (Objet) qui surmonte la fenêtre de code. S'il y est sélectionné, celle de droite (Procédure) propose les différents modèles de procédures pouvant être installés automatiquement pour profiter de ces évènements. Le nom des procédures installées seront de la forme NomObjet_NomÉvènement. Elle seront généralement Private, ce qui ne les empêchera pas d'être connues quand même du gestionnaire d'évènements. Dans le module de classe, ces évènements sont déclarés au moyen d'instructions Event, et, lors des exécutions, décrétés par des RaiseEvent.
Pour être tout à fait complet, il ne resterait qu'un tout petit point à aborder à propos d'une espèce bien étrange de module de classe: le module d'interface. Mais je crois que ça suffit pour aujourd'hui !

Un module Objet tel que celui d'une feuille Excel ou d'un UserForm est très assimilable à un module de classe.

Les seuls points communs à toutes les sortes de modules, c'est que les variable locales ne sont connue et conservée que durant l'exécution des procédures où elles sont déclarées, et que le mot clé Private annonce quelque chose qui n'y est connu qu'à l'intérieur.
 
Dernière édition:

Merlin258413

XLDnaute Occasionnel
Re : Traitement trop long optimisation de code pour générer 2 états

Bonjour voici mes premières questions
1- est ce que ma ligne 4 dans base sert encore à quelque chose ?
2- Est ce que les lignes numérotées de 1 à 24 dans le fichier "Base" aussi ?
3- Afin de voir le gain de temps j'ai essayé de mettre les codes dans mon fichier excel d'origine mais cela me provoque une erreur
"Erreur de compilation : Type défini par l'utilisateur non défini" il bloque dans MClassement sur "#If MSRCochée Then"
La je ne sais pas quoi faire le fichier est si volumineux que je ne peux l'envoyer par le site

merci
 

Merlin258413

XLDnaute Occasionnel
Re : Traitement trop long optimisation de code pour générer 2 états

Je ne sais pas si cela a un rapport lorsque je fais outils macros il me manque lorsque je fais de copie des modules CopierClassé
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    23.6 KB · Affichages: 39
  • Capture.JPG
    Capture.JPG
    23.6 KB · Affichages: 43

Dranreb

XLDnaute Barbatruc
Re : Traitement trop long optimisation de code pour générer 2 états

Boujour.
1 — Oh mais je ne l'avais même pas vu cette ligne 4 ! Trop tôt pour le dire. Il reste qu'en ligne 5 les dates n'en sont plus, mais des textes pouvant servir d'idt de colonnes du tableau Excel. Donc ça se décidera au code qui les rectifiera.
Mais j'avais peut être aussi mal compris cette question. Ne l'ayant pas vue je me suis appuyé dans mes macros sur la ligne 5 en y cherchant FBase.[C2].Text qui représente le texte montré par la cellule après application de son format. De ce point de vue on n'en a donc plus besoin.
2 — Ça ne presse vraiment pas de supprimer ces numéros de colonne ! Mais ils ne sont utilisés nulle part. Ce n'est qu'un guide visuel, en cette phase de développement.
3 — MSRCochée est une directive de compilation initialisée au début du module. Son nom veut dire "Microsoft Scripting Runtime cochée". Je vous conseille de la laisser à 1 et de cocher ça dans la liste Références disponibles, menus Outils, Références…
Oui et pour l'ajouter par macro le chemin spécifié dans le module Utilit n'est plus bon. C'est :
VB:
Sub AjoutRéfScripting()
ActiveWorkbook.VBProject.References.AddFromFile "C:\Windows\SysWow64\scrrun.dll"
End Sub
 
Dernière édition:

Merlin258413

XLDnaute Occasionnel
Re : Traitement trop long optimisation de code pour générer 2 états

Oui cela provenait bien de la par contre j'ai essayé plusieurs fois (le gain de temps est considérable je passe de 20min à quelque chose d'instantanée vous êtes formidable) le hic après plusieurs essaies j'ai une erreur
Erreur d'exécution 1004
Impossible de lire la propriété Match de la classe WorksheetFunction
Ce qui est étrange c'est qu'elle a fonctionné
 

Merlin258413

XLDnaute Occasionnel
Re : Traitement trop long optimisation de code pour générer 2 états

Après une recette du projet
Est-il possible que su Nous avons la meme BU /ACTIVITE /Mois de prestation ... le montant affiché soit la somme
C'est pour cela qu'initialement je suis passé par un TDC

Et si (Facultatif) la somme est égale à 0 alors ne pas mettre la ligne

En vous remerciant je ne peux même pas vous envoyer votre fichier car maintenant il est trop volumineux et il ne passe plus voici une capture
 

Pièces jointes

  • capture rapport.jpg
    capture rapport.jpg
    42.6 KB · Affichages: 34

Discussions similaires

Réponses
18
Affichages
1 K

Statistiques des forums

Discussions
315 098
Messages
2 116 189
Membres
112 679
dernier inscrit
Yupanki