thunder23
XLDnaute Occasionnel
Bonjour le forum,
Étant novice dans le codage en VBA je souhaiterais savoir comment alléger son code et le rendre plus rapide en exécution car j'ai créer un planning pour mon travail et en taille de fichier il est très volumineux et l'exécution de ma macro est un peu lente.
Voici le code code que je souhaiterais déjà alléger:
Merci d'avance pour vos conseils !
Étant novice dans le codage en VBA je souhaiterais savoir comment alléger son code et le rendre plus rapide en exécution car j'ai créer un planning pour mon travail et en taille de fichier il est très volumineux et l'exécution de ma macro est un peu lente.
Voici le code code que je souhaiterais déjà alléger:
VB:
Sub generer_calendrier() 'Programme de création et mise en forme du calendrier
Application.EnableEvents = False 'Désactivation fenêtre avertissement pour nombre de poste
Application.ScreenUpdating = False
annee = SpinButton_annee
'Suppression
Range("A10:BH40").ClearContents
Range("F38:J38").Borders.LineStyle = Range("M6").Borders.LineStyle
Range("F38:J38").Interior.Color = Range("M6").Interior.Color
Range("A9:BH9").ClearComments 'Effacer commentaire sur Feuille GTA
Range("D9,E9,I9,J9,N9,O9,S9,T9,X9,Y9,AC9,AD9,AH9,AI9,AM9,AN9,AR9,AS9,AW9,AX9,BB9,BC9,BG9,BH9").ClearContents 'Efface suivis mensuel
Feuil8.Range("A3:IV2000").ClearContents 'Permet d'effacer les commentaires sur la feuille BDD_Call
'Boucle MOIS
For mois = 1 To 12
nb_jours = Day(DateSerial(annee, mois + 1, 1) - 1)
colonne = mois * 5 - 4
'Boucle JOURS
For jour = 1 To nb_jours
date_du_jour = DateSerial(annee, mois, jour)
cells(jour + 9, colonne) = date_du_jour
'Couleur de fond pour cellule
cells(jour + 9, colonne).Interior.Color = RGB(204, 255, 204)
cells(jour + 9, colonne + 1).Interior.Color = RGB(204, 255, 204)
cells(jour + 9, colonne + 2).Interior.Color = RGB(204, 255, 204)
cells(jour + 9, colonne + 3).Interior.Color = RGB(204, 255, 204)
cells(jour + 9, colonne + 4).Interior.Color = RGB(235, 241, 222)
'Couleur texte Weekend
If Weekday(date_du_jour) = 1 Or Weekday(date_du_jour) = 1 Then 'Coloration texte en rouge si dimanche
cells(jour + 9, colonne).Font.Color = RGB(255, 0, 0)
Else
cells(jour + 9, colonne).Font.Color = RGB(0, 0, 0)
End If
'BORDURES
'Gauche
With cells(jour + 9, colonne).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlMedium
End With
'Bas Ligne
With cells(jour + 9, colonne).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlHairline
End With
With cells(jour + 9, colonne + 1).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlHairline
End With
With cells(jour + 9, colonne + 2).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlHairline
End With
With cells(jour + 9, colonne + 3).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlHairline
End With
With cells(jour + 9, colonne + 4).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlHairline
End With
If Weekday(date_du_jour) = 1 Then 'Si dimanche
With cells(jour + 9, colonne).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
With cells(jour + 9, colonne + 1).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
With cells(jour + 9, colonne + 2).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
With cells(jour + 9, colonne + 3).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
With cells(jour + 9, colonne + 4).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
End If
If jour = nb_jours Then 'Ligne bas du calendrier
With cells(jour + 9, colonne).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlMedium
End With
With cells(jour + 9, colonne + 1).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlMedium
End With
With cells(jour + 9, colonne + 2).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlMedium
End With
With cells(jour + 9, colonne + 3).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlMedium
End With
With cells(jour + 9, colonne + 4).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlMedium
End With
End If
'Droite
If mois = 12 Or jour > 28 Then
With cells(jour + 9, colonne + 4).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Color = RGB(0, 0, 0)
.Weight = xlMedium
End With
End If
'Affichage des données
If derniere_ligne > 1 Then 'Si BD non vide
For i = 0 To UBound(tab_bdd, 1)
If tab_bdd(i, 0) = date_du_jour Then
cells(jour + 9, colonne + 4) = tab_bdd(i, 1)
no_couleur = tab_bdd(i, 3)
If no_couleur = 0 Then
cells(jour + 9, colonne + 4).Interior.Color = RGB(250, 255, 63)
ElseIf no_couleur = 1 Then
cells(jour + 9, colonne + 4).Interior.Color = RGB(91, 224, 255)
ElseIf no_couleur = 2 Then
cells(jour + 9, colonne + 4).Interior.Color = RGB(91, 255, 95)
Else
cells(jour + 9, colonne + 4).Interior.Color = RGB(255, 255, 255)
End If
End If
Next
End If
Next
Next
Application.EnableEvents = True 'Réactivation fenêtre avertissement pour nombre de poste
End Sub
Private Sub SpinButton_annee_Change() 'Bouton pour changement d'année
Label_annee.Caption = SpinButton_annee.Value
generer_calendrier
End Sub
Merci d'avance pour vos conseils !