Optimisation de calendrier
Medestrac
-
Medestrac -
Medestrac -
Bonjour,
Je veux faire un calendrier dans Excel: dans chaque cellule de la ligne 5 j'ai le numéro du jour, en ligne 4 j'ai le "nom" du jour, en ligne 3 j'ai une fusion de 7 cellules par semaine avec le numéro de semaine,
en ligne 2 j'ai une fusion de x cellules par mois avec le "nom" du mois.
Je remplis tout ça d'après une variable "annee" de la manière suivante:
Mais que c'est long!!! J'ai bien sur fait
Quelqu'un a des idées pour accélerer tout ça?
PS: La mise en forme est imposée...sinon je me passerai bien des merge.
Je veux faire un calendrier dans Excel: dans chaque cellule de la ligne 5 j'ai le numéro du jour, en ligne 4 j'ai le "nom" du jour, en ligne 3 j'ai une fusion de 7 cellules par semaine avec le numéro de semaine,
en ligne 2 j'ai une fusion de x cellules par mois avec le "nom" du mois.
Je remplis tout ça d'après une variable "annee" de la manière suivante:
annee = 2022 StartDate = DateSerial(annee, 1, 1) EndDate = DateSerial(annee, 12, 31) Jours = DateDiff("d", StartDate, EndDate) + 1 ***blabla clearcontents et unmerge pour débuter sur une base saine...je passe*** For j = 1 to Jours cells(5,j).value = StartDate + j -1 cells(4,j).value = Format(StartDate + j - 1, "ddd", vbMonday, vbFirstFourDays) 'Si le jour est un dimanche: je fusionne les 7 cellules en ligne 3 If Weekday(StartDate + j - 1) = vbSunday Then Select Case j Case 1 :'rien, pas de mise en forme particulière Case Is <= 7 Range(Cells(3, 1), Cells(3, 6 + j)).Merge Range(Cells(3, 1), Cells(3, 6 + j)).Borders(xlEdgeLeft).LineStyle = xlContinuous Range(Cells(3, 1), Cells(3, 6 + j)).Borders(xlEdgeRight).LineStyle = xlContinuous Cells(3, 1).Value = "S" & DatePart("ww", Cells(5, 4).Value, vbMonday, vbFirstFourDays) Case Is > Jours - 7 Range(Cells(3, j-6 ), Cells(3, j)).Merge Range(Cells(3, j -6), Cells(3, j)).Borders(xlEdgeLeft).LineStyle = xlContinuous Range(Cells(3, j -6), Cells(3, j)).Borders(xlEdgeRight).LineStyle = xlContinuous Cells(3, j - 6).Value = "S" & DatePart("ww", Cells(5, j - 6).Value, vbMonday, vbFirstFourDays) Range(Cells(3, j+1), Cells(3, Jours)).Merge Range(Cells(3, j+1), Cells(3, Jours)).Borders(xlEdgeRight).LineStyle = xlContinuous Cells(3, j+1).Value = "S" & CInt(DatePart("ww", Cells(5, j - 6).Value, vbMonday, vbFirstFourDays)) + 1 Case Else Range(Cells(3, j - 6), Cells(3, j)).Merge Range(Cells(3, j - 6), Cells(3, j)).Borders(xlEdgeRight).LineStyle = xlContinuous Cells(3, j - 6).Value = "S" & DatePart("ww", Cells(5, j - 6).Value, vbMonday, vbFirstFourDays) End Select End If 'si le jour est un premier, je fusionne les x jours du mois en ligne 2 If Day(StartDate + j - 1) = 1 Then nb_jours = Day(DateSerial(annee, Month(StartDate + j - 1) + 1, 1) - 1) Range(Cells(2, j), Cells(2, j + nb_jours - 1)).Merge Range(Cells(2, j), Cells(2, j + nb_jours - 1)).Borders(xlEdgeRight).LineStyle = xlContinuous mois = Format(StartDate + j - 1, "MMMM") Cells(2, j).Value = UCase(Left(mois, 1)) & Right(mois, Len(mois) - 1) End If Next j
Mais que c'est long!!! J'ai bien sur fait
application.screenupdating = false
application.calculation = xlmanual
Quelqu'un a des idées pour accélerer tout ça?
PS: La mise en forme est imposée...sinon je me passerai bien des merge.
Configuration: Windows / Firefox 97.0
A voir également:
- Optimisation de calendrier
- Optimisation pc - Accueil - Utilitaires
- Mon calendrier - Télécharger - Santé & Bien-être
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Calendrier partagé google - Guide
4 réponses
Bonjour,
Mais que c'est long!!!
Qu'est qui est long, car temps d'execution: 0.078s, ceci
sans
application.screenupdating = false
application.calculation = xlmanual
0.046s avec
Mais que c'est long!!!
Qu'est qui est long, car temps d'execution: 0.078s, ceci
sans
application.screenupdating = false
application.calculation = xlmanual
0.046s avec
Hein??? Ca a tourné pendant 32s chez moi!
J'ai optimisé en créant un tableau tblAnnee(1,Jours) que je remplit avec les jours en 0 et les noms de jours en 1, puis je colle d'un coup en faisant
Je suis descendu à 2s.
PS: je le fais sur 2 feuilles successivement. Donc 1s par feuille. C'est déjà plus raisonnable...mais bien plus élevé que les 0.078s!
J'ai optimisé en créant un tableau tblAnnee(1,Jours) que je remplit avec les jours en 0 et les noms de jours en 1, puis je colle d'un coup en faisant
range(cells(4,1),cells(5,Jours)) = tblAnnee
Je suis descendu à 2s.
PS: je le fais sur 2 feuilles successivement. Donc 1s par feuille. C'est déjà plus raisonnable...mais bien plus élevé que les 0.078s!
Re,
Pouvez mettre votre fichier a dispo?
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Pouvez mettre votre fichier a dispo?
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Je ne peux pas, mon fichier contient des données confidentielles et surtout des dizaines de macros, créées par plusieurs personnes différentes.
J'ai copié uniquement ma feuille dans un nouveau classeur, avec le code en question. Exécution en 0.56s (il n'y a plus qu'une feuille au lieu de 2)...là ça passe tout seul.
Quelque chose m'échappe...mais visiblement ça se passe dans le classeur d'origine et je ne peux pas le partager.
Merci quand même pour le coup de main.
J'ai copié uniquement ma feuille dans un nouveau classeur, avec le code en question. Exécution en 0.56s (il n'y a plus qu'une feuille au lieu de 2)...là ça passe tout seul.
Quelque chose m'échappe...mais visiblement ça se passe dans le classeur d'origine et je ne peux pas le partager.
Merci quand même pour le coup de main.