Forums XLPages

Tous les messages (GGlyon)

Re: Optimisation de code VBA pour réduire le temps d'exécution
#1
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 29-03-2011 17h07
@ Guy : désolé pour la mauvaise compréhension de la question et merci pour ta patience...

Le fichier doit permettre de réaliser le suivi de chaque "client/dossier" avec différentes présentations suivant l'information recherchée. Par exemple si je veux savoir ce que moi j'ai à faire aujourd'hui pour un dossier, je vais voir un onglet spécifique. Si je veux voir pour un client/dossier donné ce qu'il y a à faire, je vais voir un autre onglet...

Les seules données devant être rentrées par l'utilisateur (je n'ai pas envisagé d'empêcher les erreurs de saisie), à un seul endroit pour plus de facilité, sont :
 - soit du type date : (nom) info suivi ou pas de * pour le suivi variable. Si aucune date précise ne peut être entrée, elle est de la forme XX/mois/année et doit pouvoir être gérée

 - soit une couleur de fond de cellule (vert, orange ou rouge) et parfois un peu de texte (par exemple xx %) dans 11 colonnes qui correspondent à 11 étapes de suivi fixes

Actuellement, les infos sont entrées sur une ligne vierge d'un client/dossier (15 lignes réservées pour chaque client/dossier) ou alors modifiées sur une ligne déjà écrites.

Une fois rentré, l'information doit être traitée sans action supplémentaire de la part de l'utilisateur.

Ce traitement comprend la mise en forme pour en faciliter la lecture (dates en gras, infos active en rouge, retour d'information en vert, etc.).

L'information doit aussi être répercutée sur les autres modes de vue qui sont : 
 - vue à 10j par client/dossier (actuel onglet permettant l'entrée des données) : présente les infos de 10j ou moins en fonction du client/dossier et les étapes fixes avec les couleurs (vert = OK, orange = en cours, rouge = manque info). Cette vue doit être facilement imprimable pour la partie infos variables. Cette vue doit être mise en forme

 - vue "active" par client/dossier : présente les infos actives en fonction du client/dossier et les étapes fixes avec les couleurs (vert = OK, orange = en cours, rouge = manque info), mise en forme

 - vue par utilisateur au quotidien : présente les infos actives du jour et antérieures à la date actuelle (par exemple je devais passer un coup de téléphone hier et je ne l'ai pas fait, l'info n'a pas été inactivée donc elle apparaît) en fonction des uilisateurs et des clients, mise en forme

 - l'historique de chaque client/dossier : cumule les infos non actives de plus de 10j, pas de mise en forme

Voilà pour les spécifications qui j'espère répondent en grande partie aux questions. Pour l'histoire des colonnes : dans mon fichier, l'info variable est en colonne 4 et les 11 infos fixes de la colonne 5 à 15 dans l'onglet de saisie.


Cordialement,
GGlyon
Hors Ligne
Rapport   Haut 

Re: Optimisation de code VBA pour réduire le temps d'exécution
#2
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 29-03-2011 14h23
Merci beaucoup pour l'aide sur la publication du fichier.

En ce qui concerne ce que je veux faire avec ces données :
tout d'abord, les données sont toujours entrées dans le premier onglet sous la forme "date : (nom) infos". Si cette info est une action à réaliser, on ajoute une asterisque * à la fin pour qu'elle soit reconnu comme "active"

A partir de là, je veux pouvoir annuler l'action s'il y a une erreur d'où les premières lignes de
code qui copie toute la feuille sur une des feuilles cachées.

Ensuite, si la modification de la première feuille concerne les colonnes 5 à 15, il suffit de copier ces mêmes colonnes dans le 2ème onglet. Cela correspond à la première boucle qui copie chaque première ligne de chaque dossier car il s'agit de 15 lignes fusionnées par dossier. J'ai mis en place 2 boucles : o = 5 to 15 et i = 2 to 452 (que je devrai d'ailleurs remplacer par i = 2 to Lig je pense).

Ensuite, s la modification concerne la colonne 4, il faut gérer les lignes visibles et invisibles. C'est le seul moyen que j'ai trouvé pour ne pas avoir trop de lignes vides affichées et pour permettre l'ajout d'infos sur chaque dossier. La boucle principale (i = 2 to Lig où Lig est le nombre de lignes total variable en fonction de l'ajout de dossiers) permet de ne garder qu'une ligne vide par dossier.

La boucle j = 2 to 100 me permet de faire la correspondance du nom de dossier entre les onglets 3 à 6 (une seule ligne par dossier) et le premier onglet (15 lignes par dossier).

La boucle suivante k=0 to 14 permet de récupérer pour un dossier donné du premier onglet les infos de plus de 10j qui doivent allées dans l'onglet "Historique"

Ensuite, les infos actives (donc avec *) datées de la date du jour ou antérieures sont copiées dans la feuille aujourd'hui dans la colonne de la personne devant réaliser l'action.

Ensuite, toutes les infos actives sont copiées dans la feuille "Client"

Ensuite, les textes sont mis en forme suivant un code que j'ai choisi (infos actives en rouge par exemple).

La dernière boucle i=2 to Lig2 permet la même mise en forme uniquement sur les onglets 2 et 3. Il s'agit principalement d'éliminer les retour à la ligne (vblf) inutiles.

J'espère que c'est assez clair, sinon n'hésitez pas à me poser des questions.

Cordialement,GGlyon

Hors Ligne
Rapport   Haut 

Re: Optimisation de code VBA pour réduire le temps d'exécution
#3
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 29-03-2011 10h17
Bonjour Guy,

effectivement, j'avais complètement oublié les feuilles cachées de sauvegarde et je ne savais pas que les boutons se copiaient à l'infini !! En enlevant tout ça, j'arrive à un fichier de 97ko, merci.

Ces sauvegardes permettent de revenir sur les 5 dernières opérations vue que les macros empêchent le classique "retour en arrière" (ctrl+Z).

J'espère que tu trouveras encore quelques éléments à éliminer pour arriver aux 80ko :)

Cordialement,
GGlyon
Hors Ligne
Rapport   Haut 

Re: Optimisation de code VBA pour réduire le temps d'exécution
#4
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 28-03-2011 10h19
Bonjour Guy,

merci d'avoir donné suite à mon post.
Pour ce qui est de mon expérience en vba, elle est plutôt limitée. J'ai organisé mon code et mis des commentaires au fur et à mesure donc ce ne devrait pas être trop la jungle !
Pour ce qui est de la taille, je ne sais pas ce qui prend autant de place car à part les macros, il n'y a que 5 onglets avec au plus 100 lignes pour 14 colonnes de textes...

Merci en tout cas pour la proposition d'aide, je t'envoie de ce pas mon classeur.

Cordialement,
GGlyon
Hors Ligne
Rapport   Haut 

Optimisation de code VBA pour réduire le temps d'exécution
#5
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 25-03-2011 15h14
Bonjour le forum,

j'ai construit un fichier excel avec macros pour mon boulot qui permet de suivre l'évolution de chaque dossier en cours. Après beacoup de temps passé dessus, les macros fonctionnent mais avec l'ajout de nouveaux dossier, le temps d'attente est maintenant rédhibitoire !

Pouvez-vous me donner des conseils pour optimiser mon code qui est très lourd ?

Je pense qu'il faut que je vous dise ce que j'attends de ce fichier pour que vous compreniez plus rapidement ce que j'ai fait : à partir d'un seul point d'entrée (premier onglet "Suivi sur 10j") où chaque utilisateur rentre les informations, les macros permettent pour la colonne D :
- de répercuter cette information dans les autres onglets ("Clients" pour les infos actives, c'est à dire avec *, en fonctions des clients ; "Aujoud'hui" pour les infos du jour ou non réalisée en fonction des collaborateurs ; "Clients historique" pour déplacer les infos non actives de plus de 10j)
- de mettre en forme cette information suivant un code couleur et suivant ce que le texte mentionne,
- de créer des feuilles imprimables avec les informations lorsque l'on clique sur le bouton "Impression" (le bouton "Tri des dates" n'est pas fonctionnel)
- de gérer le nombre de lignes visibles par client (chaque client dispose de 15 lignes mais seule une ligne vide apparaît pour prendre moins de place et les autres sont masquées automatiquement)

Pour les autres colonnes, il s'agt d'un simple copier/coller.
N'hésitez pas à me dire si je ne suis pas assez clair :)

Aïe ! il y a un problème : je n'arrive pas à réduire assez la taille du fichier pour le joindre (220ko min). Est-ce que je peux laisser une adresse mail pour que les personnes souhaitant m'aider me demande le fichier ?

Merci par avance
GGlyon



Hors Ligne
Rapport   Haut 

Re: Tri de tableaux de longueurs variables sur différentes feuilles
#6
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 07-08-2009 16h40
 Re,

merci pour ces explications supplémentaires, tout est clair maintenant :)

Cordialement,
Gaël
Hors Ligne
Rapport   Haut 

Re: Tri de tableaux de longueurs variables sur différentes feuilles
#7
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 07-08-2009 11h07
Bonjour le forum, Bonjour mDF,

Merci beaucoup mDF pour ce nouveau code qui fonctionne très bien et qui ressemble à quelque chose contrairement à ce que j'avais écris ! C'est impressionnant comme maintenant il est compact :)
J'ai juste modifié le "n as Byte" en "n as Integer" pour éviter le message "dépassement de capacité" du au fait que certains tableaux "commandes" et/ou "factures" dépassent la ligne 254.

En ce qui concerne ma compréhension du code, je bloque sur Select Case et Dateserial... J'ai lu l'aide VBA là-dessus mais ça ne m'a pas éclairé ! Est-ce que tu pourrais m'expliquer ?

Pour mes variables n, Z, etc je me demande ce qui pose problème ?! Il faudrait qu'elles soient plus explicites ?

Pour voir si j'ai bien tout compris, je vais essayer de modifier la macro concernant la feuille "Général" :)

Merci encore.
Gaël

Hors Ligne
Rapport   Haut 

Re: Tri de tableaux de longueurs variables sur différentes feuilles
#8
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 06-08-2009 09h55
Bonjour le forum, Bonjour mDF,

merci beaucoup pour avoir jeté un oeil sur mon problème.
Pour le moment, j'ai une erreur de compilation qui apparaît sur la ligne Key1:=.Range... dans ce que tu m'as proposé. Comme mes notions en VBA sont très limitées, je ne sais pas si ça provient de ce que j'ai pu écrire avant ou pas !
C'est aussi pour cette raison que tu trouves des ActiveWorkbook et ThisWorkbook partout et que qu'il y a des boucles qui parcourent beaucoup de cellules peut-être inutilement ! Je fais vraiment du bidouillage et je pense que tu passerais pas loin de la syncope en voyant le reste des lignes !
Pour répondre un peu plus à tes interrogations :
- i commence à 3 car j'ai une 2 feuilles (dont Finances) qui récupère des données sur le reste du classeur,
- en ce qui concerne les Activate, c'était juste un essai, y en a pas ailleurs :)
- la prochaine fois, j'incluerai ma déclaration de variables dans le code que je poste.
J'aurai bien mis mon classeur mais il s'agit de données confidentielles et j'ai peur de passer beaucoup de temps à l'épurer. Je vais voir quand même aujourd'hui si c'est possible car tes conseils et ceux du forum me seront précieux.

MAJ : voilà le fichier, qui était trop gros, donc il faut copier les feuilles du fichier 2 dans le 1 !

Cordialement,
Gaël 






Pièce jointe:
zip GGlyon1.zip   [ Taille: 67.00 Ko - Téléchargements: 421 ]
zip GGlyon2.zip   [ Taille: 18.39 Ko - Téléchargements: 435 ]
Edité par GGlyon le 06/08/2009 11:06:27
Hors Ligne
Rapport   Haut 

Tri de tableaux de longueurs variables sur différentes feuilles
#9
Débutant XLPages

Inscription: 20/07/2009

Messages: 9

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 05-08-2009 13h50
 Bonjour à tous,

voilà donc mon problème qui ne semble pas être présent dans l'un des forums :
à partir d'une feuille (Finances), je veux lancer une macro qui, entre autres, trie par dates des tableaux qui sont présents sur les autres feuilles du classeur. Ces tableaux n'ont pas une longuer fixe et seront amener à évoluer. Après de nombreux essais avec "Sort" qui me renvoyaient des erreur d'application ou d'objet(voir premier code), j'ai trouvé un code qui semblait marcher (voir deuxième code). Le problème est qu'il me modifie aussi ma feuille de départ et que je ne voudrais pas passer par une fontion "Activate".

Premier code (juste la partie concernée):
For i = 3 To ActiveWorkbook.Sheets.Count
    For l = 4 To 69
        If ActiveWorkbook.Sheets(i).Range("B9").Value <> "" And ActiveWorkbook.Sheets(i).Range("B9").Value = ThisWorkbook.Sheets("Finances").Range("E" & l).Value Then
            'Recherche de la dernière cellule remplie pour les Factures
            DerniereFacture = ActiveWorkbook.Sheets(i).Columns(28).Find("*", , , , , xlPrevious).Row
            'Trier le tableau des factures par dates croissantes
            ActiveWorkbook.Sheets(i).Range(Cells(154, 27), Cells(DerniereFacture, 35)).Select
            Selection.Sort Key1:=Range("AA154"), Order1:=xlAscending

Deuxième code (juste la partie concernée) :
For i = 3 To ActiveWorkbook.Sheets.Count
    For l = 4 To 69
        If ActiveWorkbook.Sheets(i).Range("B9").Value <> "" And ActiveWorkbook.Sheets(i).Range("B9").Value = ThisWorkbook.Sheets("Finances").Range("E" & l).Value Then
            'Recherche de la dernière cellule remplie pour les Factures
            DerniereFacture = ActiveWorkbook.Sheets(i).Columns(28).Find("*", , , , , xlPrevious).Row
            'Trier le tableau des factures par dates croissantes
            ActiveWorkbook.Sheets(i).Activate
            Range(Cells(154, 27), Cells(DerniereFacture, 35)).Sort   Key1:=Range("AB154"), Order1:=xlAscending
            ActiveWorkbook.Sheets("Finances").Activate
J'espère que mon explication est compréhensible et que j'ai mis assez d'informations pour que vous puissiez me répondre.
Cordialement,
Gaël
Hors Ligne
Rapport   Haut