Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Excel-VBA - Problème de bouche trop longue

yannos12

XLDnaute Nouveau
Bonjour,
J'ai un problème dans la gestion de mon fichier "vacances".
Le problème est un problème de lenteur de calcul dû à des boucles dans mon VBA qui contraignent le tout.
Je n'arrive pas à penser à une autre solution donc je fais appel à votre génie ;-)
Je ne peux pas partager mon fichier donc je vais essayer d'être assez clair dans mes explications.
J'ai une liste de 50 employés qui ont droit à 6 semaines de vacances.
Chaque employé peut définir 3 semaines de vacances prioritaires et 3 autres.

J'enregistre aujourd'hui dans un onglet 1 des numéros de semaine en face de chaque nom
Nom/InitialesPrio 1Prio 2Prio 2Autres 1Autres 2Autres 3
AS13751123552
AF2535362351

Ensuite je compile tout cela dans un autre onglet sur un calendrier lineaire ou j'empile les noms sous les numeros de semaine.

Numero Sem12...343536...5152
ASAF
ASAFAFAFASAS

Donc dans mon vba, je passe donc ligne par ligne, les 3 colonnes prioritaires pour empiler les demandes prioritaires puis je refais la même chose pour les autres.

Bref cela fonctionne mais c'est lourd.
Une idée pour alléger cela?

D'avance merci ;-)
 

yannos12

XLDnaute Nouveau
J'ai retrouvé mon fichier initial de travail (2018).
Forcément maintenant il fait plus de 4MB car il comporte beaucoup plus de données.
Mais on voit déjà ici la "lenteur" de mon excercire de "trier vacances" sur l'onglet "Annuel"

Peut être que ce sera ainsi plus parlant.
 

Pièces jointes

  • Essai vacances 0.0.xlsm
    86.7 KB · Affichages: 7

cp4

XLDnaute Barbatruc
Bonsoir,

@yannos12: Tu as constaté que ton code rame. Pourquoi veux-tu nous infliger la même corvée?
Explique-nous ce que tu veux obtenir.
 

yannos12

XLDnaute Nouveau
Bonsoir,

@yannos12: Tu as constaté que ton code rame. Pourquoi veux-tu nous infliger la même corvée?
Explique-nous ce que tu veux obtenir.
Je ne vous inflige rien ;-)
J'aimerais juste savoir/connaitre/apprendre si il y a un autre moyen de traiter ma problématique.
En gros je sais que les boucles ne sont pas réputées pour économiser du temps mais je ne sais pas comment faire autrement.
Et on est d'accord que mon fichier fonctionne, c'est juste la lenteur qui est problématique.
 

vgendron

XLDnaute Barbatruc
Bonsoir

de quelle macro parle t on??
celle que tu as posté en début n'apparait pas dans ton fichier...
et comme indiqué: il faudrait déjà expliquer ce qu'est censé faire la macro
je vois des whiles imbriqués...
travailler sur un tablo vba est surement plus indiqué que directement sur la feuille

en attente de plus de renseignements

je viens de voir que la feuille "Jumbo" n'existe pas non plus dans ton fichier...
 

yannos12

XLDnaute Nouveau

Comme dis, je suis retombé sur mon fichier de départ donc oui la macro a un peu évolué par rapport à celle dans le fichier mais j'ai gardé l'imbrication des boucles.
En gros je répertorie les demandes de vacances exprimées par mes collègues dans le 1er tableau et ensuite je les transposé en fonction de critères de priorité (les couleurs) sur le 2eme onglet.
 

vgendron

XLDnaute Barbatruc
déjà que ton code est alambiqué. on ne va pas non plus essayer de faire le lien entre un code et un fichier qui ressemble de loin au besoin...

1) transforme tes données sous forme de tables structurées ==> plus simple à manipuler et a naviguer à l'intérieur==> les 3/4 de tes variables "indice colonne, première ligne..." vont dégager

2) mets le contenu de ces tables dans des tablo vba
et tu fais ton traitement (boucles) sur ces tablo
enfin, tu colles le résultat des tablos sur la feuille

3) faudrait expliquer un peu plus que "les collègues mettent leurs vacances"
ou ca? tu vas quand meme pas me dire qu'ils s'amusent à remplir TOUTE la ligne qui les concerne dans la feuille "Vacances" ??
et ils ne peuvent saisir que 5 jours??
 

yannos12

XLDnaute Nouveau
Alambiqué? Pas compris.
Le code que j'utilise aujourd'hui est quasi le même, j'ai juste par exemple créer un module avec des "Public const" pour les utiliser ailleurs.

1) qu'entends tu par tableau structuré? La problématique que j'ai c'est qu'en fonction du statut de la personne (avec ou sans enfant) (plus ou moins de 40 ans) le nombre de semaine disponible par couleur change.
2)tablo vba? Faut que je regarde ce que c'est alors
3) mes collègues remplissent un formulaire sur le choix du numero de semaine de vacances et peuvent poser 5j en isolé. Le formulaire est ensuite saisi manuellement dans le 1er onglet.

Les contraintes pour mes collegues (pas moi qui les ai définies):
Rouge/jaune pour les sans enfants
Bleu/Bleu clair pour les avec enfants
-40 ans 6 semaines à poser
+40ans 7 semaines à poser
- 45ans 3 semaines max en rouge ou bleu
+ 45ans 4 semaines max en rouge ou bleu
Le complément dans les jaunes et bleu clair.

Bref c'est une usine à gaz, un peu comme mon code
 

vgendron

XLDnaute Barbatruc
regarde en PJ

1)Feuille Vacances
j'ai transformé en table structurée (t_Saisies)
comme il faut des noms de colonnes uniques, j'ai nommé les colonnes avec un incrément (sera utilisé dans le code)
ex: pour les 5 colonnes J Isolé ==> Jiso1 / Jiso2/ Jiso3....

2) j'ai simplifié la macro qui efface les colonnes Fiso et qui les remplis
=> regarde le code: j'ai mis des commentaires

3) Feuille Annuel
idem: tu as maintenant 3 tables: "t_Cure" / t_Isolé et T_Vacances

la macro pour les effacer est toute simple

4) maintenant, il faut revoir la macro qui remplit les 3 tables Annuelles
mais. c'est censé etre laquelle??
==> TransfertCures? (pas de feuille Jumbo dans le fichier)
==> TransferVacances?? celle dans le fichier joint, ne fait rien...
il faudrait que tu expliques comment tu remplis
 

Pièces jointes

  • Essai vacances Ver2.xlsm
    125.3 KB · Affichages: 2

yannos12

XLDnaute Nouveau
Merci pour ton retour, je regarde cela demain ;-)
Le module transfertCure que j'avais mis, au début de conversation, est celui dans mon nouveau fichier donc à "oublier" ici. En gros j'ai splitté les choses à transférer pour que ce soit plus lisible. (dans mon esprit)

Sinon ici, dans l'onglet "Annuel", il a le bouton "Trier vacances" qui va chercher la fonction "TransferVacances".
Celle-ci rapatrie les données saisies manuellement dans l'onglet "Vacances" (Colonne C à AF). La partie Superviseur n'est pas traité dedans)
J'espère que c'est plus clair
 

vgendron

XLDnaute Barbatruc
hello

je suis en train de regarder la macro "transfertVacances"
si je comprend bien ce que tu dis
Elle récupère les infos dans la feuille Vacances, et les mets dans la feuille Annuel

pour chaque numéro de semaine (1 à 53), elle récupère les initiales concernées, et les colle dans la feuille Annuel
de ce que je vois.. elle commence par le Bleu Foncé, PUIS Rouge, puis Jaune puis bleu clair
==> dans la feuille Annuel, sur la semaine 14, Rouge et Bleu foncé sont inversés ==> pourquoi?? erreur??
 

yannos12

XLDnaute Nouveau
Hello,
Tu as très bien analysé ;-)
Il y a un changement de priorité dans l'affichage sur les semaines "vacances scolaires", ce sont les semaines définies par le fond gris de la ligne 52 de l'onglet "Annuel".
Cellule grise, la priorité va de Bleu foncé, rouge, bleu clair, jaune et dans les autres l'ordre est rouge, bleu foncé, jaune et bleu clair.
 

vgendron

XLDnaute Barbatruc
regarde en pj..
c'est "légèrement" plus rapide.....

j'ai mis un max de commentaires dans le code

pour le remplissage de la table Vacances dans Annuel, je n'ai pas du tout géré les priorités.. pour l'instant
il faut que je regarde (ou que tu expliques) comment les priorités changent
 

Pièces jointes

  • Essai vacances Ver2.xlsm
    125.4 KB · Affichages: 2

yannos12

XLDnaute Nouveau
Je trouve que c'est mieux que légèrement pour la rapidité ;-)
Je ne sais pas si j'ai bien saisie ta question, mais en gros l'entreprise définie la période considérée comme vacances scolaires durant lesquelles l'attribution des vacances se fait dans l'ordre des couleurs Bleu foncé, rouge, bleu clair, jaune. En dehors de ses périodes, l'ordre est rouge, bleu foncé, jaune et bleu clair.Chacun sait à quelle nombre de semaines par couleur il a droit.
Après qui vient s'ajouter dans le tri, c'est l'ancienneté qui n'est pas considéré ici. Les plus vieux seront prioritaires et apparaitront par ordre d'ancienneté en partant du bas dans les colonnes
 

vgendron

XLDnaute Barbatruc
pour l'odre de remplissage des couleurs, j'avais donc bien vu
voici une nouvelle version
tu as deux boutons: Un qui colle SANS tenir compte des priorités (j'ai laissé la macro telle quelle)
et j'ai fait une nouvelle macro qui gère la priorité (deuxième bouton)

==> tu auras noté quand meme que dans une meme couleur, l'ordre des initiales est inversé par rapport à ta feuille d'origine (annuel(2)) ==> est ce vraiment important?
par contre; pour l'histoire de priorité sur l'age... je ne vois rien la dessus
 

Pièces jointes

  • Essai vacances Ver4.xlsm
    133.1 KB · Affichages: 1

yannos12

XLDnaute Nouveau
La priorité sur l'âge n'est pas inclus ici mais c'est quelque chose que je dois gérer actuellement donc techniquement j'ai une colonne ancienneté et avant de faire mon transfert ligne à ligne, je reclasse les lignes en fonction de l'ancienneté et je remet en place par ordre alphabetique ensuite.
Après ça reste un facteur nécessaire car si j'ai trop de demande sur une semaine, j'enlève ceux qui ont peut d'anciennete.
Après j'ai une autre question, il se peut que certaine demande soit en "attente de validation", actuellement je met un fond sur la cellule et quand je le detecte je transfere en mettant des diagonales dans la cellule "annuel" concerné. Penses tu que ce genre de contrainte peut être gérer par le tableau vba?
 

Discussions similaires

Réponses
8
Affichages
452
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…