Alléger et rendre plus rapide un code VBA
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:
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 SubBonsoir,
Pour un novice tu as produit un bon code, chez moi il s'exécute tout à fait normalement.
Pour le reste, je me poserai juste la question de la pertinence, faire un calendrier en vba faut avouer que cela peut surprendre, tant il en existe des tas de versions différentes (et ici, la partie la plus importante du code concerne du visuel très basique)
Bonsoir,
Pour un novice tu as produit un bon code, chez moi il s'exécute tout à fait normalement.
Pour le reste, je me poserai juste la question de la pertinence, faire un calendrier en vba faut avouer que cela peut surprendre, tant il en existe des tas de versions différentes (et ici, la partie la plus importante du code concerne du visuel très basique)
Re,
Merci pour le compliment, après je n'avais trouvé que cet alternative pour le moment. Je sais qu'avec la MFC je peux faire le côté dimanche et jours fériés mais pour le reste je ne sais pas du tout comment procéder. De plus pour ce qui est d'effacer à chaque changement d'année je ne sais pas, en conclusion je n'ai aucune idée comment faire ce planning sans passer par le code VBA.
bonjour,
Sans le fichier ça motive pas vraiment...
Si en plus il faut aller "à la pêche" dans le forum pour essayer de trouver quelques qui y ressemble...
A+
Bonjour,
Bonjour Galopin01,
Le fichier étant trop volumineux même en le passant en Zip. Son objectif est de renseigner le travail sur toute l'année en calculant les heures de dimanche, jours fériés et tout autre calcul pour la feuille de paye. Ce planning est personnel et j'ai essayé de le rendre le plus compréhensif possible si d'autres personnes le voulaient.
voici le liens pour le télécharger: http://lameteo23.000webhostapp.com/Planning.zip
@+