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

Bonjour.

Mon analyse me conduit à 3 observations :
1 — Plutôt que tout reproduire puis supprimer ce qu'on ne veut pas, il vaudrait mieux ne prendre que ce qu'on veut.
2 — Il ne faut jamais travailler directement sur les cellules individuelles, mais toujours dans des tableaux en mémoire ou des collections.
3 — Un TCD c'est fait pour produire un rapport sans avoir besoin de macro. S'il lui faut un prétraitement des données par une macro, autant s'en passer et produire directement le rapport avec ! Et ce sous la forme exactement désirée, et plus le carcan des TCD !
Ce qui m'amène à vous proposer quelque modules de service qui permettent d'appliquer tout ça automatiquement.
Ce n'est qu'une ébauche en attendant. Vérifiez que la feuille "Test" contient bien les informations voulues dans l'ordre souhaité pour les deux futurs rapports.
On étoffera après, pour ajouter des sous titres de rubriques, les colonnes de BU et des totaux et sous totaux.
Testez avec plus de ligne pour vérifier que les temps d'exécution de la Sub RapportTest restent raisonnables.
 

Pièces jointes

  • GrpOrgMerlin258413.xlsm
    407.5 KB · Affichages: 47
  • GrpOrgMerlin258413.xlsm
    407.5 KB · Affichages: 54

Merlin258413

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

Bonjour
Si nous indiquons comme mois en cellule C2 Janvier cela fonctionne parfaitement
Par contre, si j'indique le mois de février nous avons un problème car il faut prendre les valeurs correspondant à FAE en Février soit 151 979.25 € c'est à dire je prend aussi toutes les prestations antérieures qui sont toujours en statut FAE

IDem pour FACTURE il me manque les prestations de janvier qui sont passées en statut FACTURE en février
Le montant des FACTURE de FEVRIER est de - 7 470.75 €


Merci infiniment pour votre aide je n'avais pas assez de compétences pour ce projet autodidacte j'ai réalisé l'existant sur le tas
 

Dranreb

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

Avec ces modifications, c'est mieux ?
VB:
Rem. ——— Préfiltrage en vue utilisation fonction GroupOrg
For Le = 1 To UBound(Te)
   If Te(Le, 1) <= DateSel And Left$(Te(Le, ColDate), 2) = "FA" Then 'modifié "=" en "<="
…
Rem. ——— Production des états définitifs (simple test pour l'instant)
ReDim Ts(1 To UBound(Te), 1 To 24): Ls = 0
For Each Typ In GroupOrg(Te, ColDate, , 3, 1) 'ajouté critère de classement date
Est-ce qu'il ne serait pas plus simple de ne plus tenir compte de la date et prendre comme état ce que vous avez calculé dans la colonne U ?
Hmmm. Aux cellule vides près peut être quand même à la date demandée … vieux trucs.
 
Dernière édition:

Merlin258413

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

Malheureusement cela ne fonctionne pas, je ne peux pas vous envoyer le fichier car je suis limité à 293 ko
Je ne pense pas avoir fait d'erreurs lors de la correction
Par contre chose que je n'avais pas dans votre 1er fichier : ce sont les encours

Pour connaitre le résutat attendu sur février il suffit de faire un filtre dans Base colonne J (Fevr -15) et sélectionner soit FAE soit FACTURE
 

Merlin258413

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

Concernant la date,

La colonne A n'est pas utilisée pour les 2 états, elle me sert uniquement pour d'autres états qui nécessite pas du vba :)

Pour les états en question seule la date de la prestations est importante colonne D

Et seul le statut du mois sélectionné est important

Avec ces 2 éléments on peut sortir les prestations qui sont passées en facturées par exemple en mois de février (ligne5)
Et quelles sont les FAE qui sont toujours en STATUT FAE en février (ligne 5) donc je n'ai pas besoin dans ces états de la 1ère colonne
 

Dranreb

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

Bon, comme ça alors. Les EN COURS feront-ils l'objet d'un 3ième rapport dans une feuille séparée ?
…Sauf que le dernier paramètre de GroupOrg c'est peut être 4 et non 1 ?
 

Pièces jointes

  • GrpOrgMerlin258413.xlsm
    408.5 KB · Affichages: 49
  • GrpOrgMerlin258413.xlsm
    408.5 KB · Affichages: 49
Dernière édition:

Dranreb

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

Très bien. Y a plus qu'a… Ce serait pas possible d'avoir tous les rapports sous la même forme ?
Ça pourrait m'arranger que vous en fassiez une maquette (me fait mal aux yeux de décrypter les TCD LoL)
 

Merlin258413

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

Voici une trame des états

Malheureusement ils ne peuvent pas être tous sous la même forme

Par exemple pour l'état des FAE (Facture A Etablir) je n'ai pas besoin du numéro de facture "Colonne F : Facture" car justement les factures ne sont pas encore réalisées. Par contre la données mois de prestations est hyper importante pour mener des plans d'actions pour relancer les clients et facturer
J'aurais besoin ici d'un sous total par BU et un classement par ordre croissant de la BU , activités, Prestations et programmes


Pour l'états des factures cette fois si j'ai rajouté la colonne f : facture
J'aurais besoin ici d'un sous total par Prestation et un classement par ordre croissant des colonnes Prestations puis BU puis activités et enfin Programmes


les colonnes en vert seront remplies manuellement mais doivent être crées

Pour toutes les données chiffrées Montant, facturation, correction et solde si on peut autonomiser le format : Nombre/ 2 décimales et séparateurs de milliers et rouge pour les nombres négatifs

Je ne sais pas si je suis assez clair mais contre peut être trop exigeant merci pour tout
 

Pièces jointes

  • Trame.xlsx
    10 KB · Affichages: 51
  • Trame.xlsx
    10 KB · Affichages: 47

Dranreb

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

Si des infos seront rajoutées à la main, ça veut dire qu'elle seront effacées quand on redemandera la production des 3 rapports ?
Je ne peux guère faire autrement d'ailleurs.
L'ordre de classement n'est pas le même pour les FAE que pour les autres ? C'est gênant.
 
Dernière édition:

Dranreb

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

Pourtant l'actuel TCD des FAE semble aussi classé d'abord par Activité ?
Très très embêtant s'il est le seul à devoir être classé par BU, parce que le classement est fait en amont par la fonction GroupOrg…
Pourriez vous rajouter en rouge, au dessus des titres de vos modèles, les numéros de colonnes de la ligne 2, feuille Base ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 334
Membres
103 189
dernier inscrit
Bob34000