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
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- 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.