Accélération code

Bonjour le forum

Je vous soumet un fichier joint qui contient un Privatesub.

Le but de ce fichier est de suivre l'évolution des compétences des opérateurs. On visualise l'état de la compétence à l'aide d'icônes identiques à celles utilisées par les MFC.

En l'état, le code est fonctionnel mais si je me permet de vous le présenter c'est dans le but d'optimiser la vitesse d'exécution.

Sur mon PC et dans l'état de renseignement actuel du fichier il faut environ 4s pour que le code s'exécute.

Ce fichier est censé être utilisé sur des PC moins performant que le mien.

A la base ce fichier était géré par MFC mais à chaque rajout de colonnes ou lignes c'était galère pour mettre à jour les différentes MFC afin de coller aux évolutions, sachant que l'utilisation des icônes en MFC est assez restrictif (il faut impérativement un $ devant ligne et colonne et donc le copié/coller n'incrémente pas).

Je vous remercie par avance pour toute proposition permettant d'accélérer ce code.

Bonne journée

21fichier-exemple.xlsm (109.94 Ko)

Chez moi (Surface 1ère génération) = 97 secondes.

Bonjour

chez moi W7pro / office 2007 sur machine I7 3.6Ghz , 16Go de RAM , DD SSD cela tourne entre 2 et 3 secondes

Fred

Bonjour,

3,75 secondes (au départ, à chaque relance le temps augmente, j'ignore pourquoi...)

J'ai passé un peu de temps à essayer divers remodelages mais rien de probant... aucune réduction contrairement à ce que j'aurais pu escompter... donc rien de mieux à te proposer.

Hormis la question temps, je te signale toutefois un petit point : quand tu testes la présence d'une valeur "t", j'ai noté que quelques cellules comportaient "T" et non "t", la mention ne sera pas reconnue pour ces cellules...

Cordialement.

bonjour à tous

est-ce bien raisonnable de faire en macro ce qui peut se faire avec des des formules simples et des MFC

on cherche à imiter le collage de gommettes ?

Salut jmd !

Je n'ai pas du tout cherché à savoir ce qui se calculait... Je ne me prononcerai donc pas sur ce point. Mais il est fort possible qu'une organisation en base de données pourrait s'avérer plus productive et plus aisée à manipuler.

Pour ce qui est des MFC, en renonçant au type de MFC choisi également...

Bonne soirée.

Bonjour,

Ce qui m'étonne c'est le clignotement du curseur lors de l'exécution du code...

Chef moi entre 3.5 et 4.5 secondes.

Pour ce qui est de mettre en place des MFC par VBA, je ne suis pas contre !

Ceci dit ce qui me chiffonne c'est le fait de mettre la même MFC autant de fois qu'il y a de cellule où elle doit être mise.

Alors qu'en "l'inscrivant" une seule fois sur plusieurs zones cela ira plus vite, non

première zone : I9:BD9

deuxième zone : I12:BD12

etc...

Worksheets("Test").Range("D9").Activate
            With Worksheets("Test").Range("I9:BD9;I12:BD12;etc...")
                .FormatConditions.Delete
                .FormatConditions(1)
                .FormatConditions(1).ReverseOrder = True
                .FormatConditions(1).ShowIconOnly = True
                .FormatConditions(1).IconSet = ActiveWorkbook.IconSets(xl3Symbols)
            End With

un truc dans ce genre... à voir mon Application Apaches

ou bien ce fichier :

4mfc-par-vba.xlsm (47.79 Ko)

@ bientôt

LouReeD

Salut LouReed,

Les MFC à icônes ne se manipulent pas aussi aisément que les autres...

Bonjour Mferrand,

ceci dit dans le fichier joint :

6test-lrd.xlsm (13.22 Ko)

En travaillant un peu sous APACHEs j'ai réussit à gérer les MFC bicolors avec dégradé ou avec motif...

Sur le fichier, il y a une zone d'icones faites à la main, et un bouton qui permet de mettre en place la MFC sur deux zone différentes, et ça marche non ?

Mon idée pour son fichier, sélectionner les différentes lignes avec un range multiple, puis appliquer la MFC.

Ce devrait être plus rapide, non ?

@ bientôt

LouReeD

Bonjour Steelson, Fred2406, MFerrand, jmd, LouReeD

Merci pour votre intérêt.

jmd

Effectivement l'utilisation de formules et MFC seraient nettement plus rapide (voire même immédiat) mais mon souci est la reproductibilité qui doit s'effectuer lorsque l'on rajoute des lignes (toujours par groupe de trois) et/ou des colonnes. Les personnes censées utiliser ce tableau ne sont pas capables de mettre les mains dans le cambouis pour aller vérifier et modifier TOUTES les formules et MFC (elles même liées à des formules).

MFerrand

C'est vrai quand choisissant des MFC avec icône je me tire une balle dans le pied mais j'avoue quand même que je trouve le résultat visuellement plutôt sympa.

Pour ce qui est de de l'interprétation des majuscules et minuscules, y a t'il une solution en vba pour s'affranchir de ça?

LouReed

Je n'ai pas pu encore fouiller du côté de ta solution. Je vais m'y pencher.

Je me pose la question de l'interêt d'un privatesub dans mon cas.

Plusieurs modifications successives peuvent être effectuées (et donc autant de déclenchement du Privatesub). J'ai fait un essai en plaçant le code dans un module, je gagne 1 seconde !!!

Peux être est-ce ça la solution la plus simple.

Cordialement

JP

jp65 a écrit :

Bonjour Steelson, Fred2406, MFerrand, jmd, LouReeD

Merci pour votre intérêt.

jmd

Effectivement l'utilisation de formules et MFC seraient nettement plus rapide (voire même immédiat) mais mon souci est la reproductibilité qui doit s'effectuer lorsque l'on rajoute des lignes (toujours par groupe de trois) et/ou des colonnes. Les personnes censées utiliser ce tableau ne sont pas capables de mettre les mains dans le cambouis pour aller vérifier et modifier TOUTES les formules et MFC (elles même liées à des formules).

JP

sans VBA :

pour les colonnes, il te faudrait les créer par avance (et les laisser vides, prêtes à servir). Il en fait combien de plus par an ?

pour les lignes, tu 'mets sous forme de tableau" et les formules et les TCD suivent automatiquement. Génial

Bonsoir,

votre fichier modifié :

la date "butée" en dessous de la date d'exécution est remplacée par une formule qui affiche 2 super à jour, 1 dans 30 jours il est en butée, 0 périmé, car le fait de mettre une butée "en dur" par rapport à une date "en dur" autant que l'un soit fonction de l'autre, cela évite les erreurs, non ?

Les icônes sont placés sur cette ligne pour la première zone ligne 10.

Maintenant, il faut moins de 1 dixième de secondes pour effectuer la mise à jour des MFC 0,07125 !

@ bientôt

LouReeD

Bonjour,

une proposition :

Supprimer toutes tes MFC icones (c'est vrai qu'il y en a une palanquée... 4.6 s chez moi) et les remplacer par un format personnalisé qui affiche les coches des polices wingdings (un par coche à obtenir).

Visuel mis en D8:D12, c'est du pareil au même.

Par défaut tu mets le format coche verte à tout le monde. Seules les cellules avec date auront la coche. Plus qu'à changer le format pour les coches rouges.

Si tu compliques un peu le format avec un test sur la date tu peux même mettre un format unique à tout le monde qui mettra la coche ou la croix (one shoot) selon la date saisie.

A mettre à jour à l'ouverture vu que tu te bases sur date du jour.

Je pense que ça devrait être nettement plus rapide,.

mais... il y a un mais. Les dates ne sont plus lisibles en tant de dates (10/01/17 => 42745)

Si elles sont utiles en lecture (peut-être ne le sont-elles qu'aux formule ?), on peut imaginer un textboxt sur sélection d'une cellule qui affiche en format date.

Tu vois....

eric

Question annexe : sur une saisie en ligne 11 par exemple tu es vraiment obligé de revoir toutes les lignes ?

Bonsoir,

pour reprendre l'idée d'eriiic, seule le groupe de trois lignes concerné par le changement de valeur en colonne F et de I à BD sont mises à jour pour la MFC !

Ceci dit, cette mise à jour n'a lieu d'être que s'il y a changement de structure du tableau...

Mais là on descend en dessous de 0.05 seconde..., c'est imperceptible

A vous de voir,

@ bientôt

LouReeD

Re

J'ai bien noté vos propositions, pour l'instant je ne peu pas y travailler mais je vous garantie que je tiendrai compte de vos avis et propositions.

Merci pour votre attention.

Bonne soirée

JP

Bonjour le forum

Je sort de mon hibernation pour signaler qu'au final je suis parti sur la proposition de LouReed après de légers remaniements.

Et donc seule la ligne concernée est prise en compte et modifiée.

Exit les 4 secondes (ou plus) de traitement à chaque modif.

Encore merci à tous pour vos propositions.

Bonne soirée

JP

Bonsoir,

et merci de votre retour (positif) après un peu plus d'un mois !

Sachez que certain ne font même pas cet effort...

Donc merci à vous de vos mercis !

@ bientôt

LouReeD

Rechercher des sujets similaires à "acceleration code"