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 Sub

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)

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,

je n'ai aucune idée comment faire ce planning sans passer par le code VBA.

Est-ce que tu peux décrire ce que tu as dans ce planning, quel est son objectif, à qui s'adresse-t-il ?

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

@+

Rechercher des sujets similaires à "alleger rendre rapide code vba"