Bonjour,
Je viens de regarder un peu ton code.
Déjà dans le code de la feuille donnees, tu fais une boucle sur 806 lignes. Il est préférable de limiter cette boucle au nombre de majeur.
Voici une partie du code que tu peux modifier.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address).Interior.ColorIndex = 3 Then
ActiveSheet.Unprotect "MP2005"
Range(Target.Address).Interior.ColorIndex = 36
ActiveSheet.Protect "MP2005"
End If
SaisieCorrecte = True
If Automatique = True Then Exit Sub
Automatique = True
Call DefinirDureeEtatNominatif
Application.ScreenUpdating = False
NbMajeur = Range("A" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne A
For LigneEnCours = 7 To NbMajeur '
Pense à déclarer Public NbMajeur as integer dans le module 1
Pense à remettre les evenements à true Application.enableEvents=True en fin de ce code
Je pense que tu devrais trouver du changement.
Une remarque encore l'Application.ScreenUpdating peut faire des sauts à l'écran dans la mesure où tu passes de false à true inutilement.
Il faut tenter de les limiter.
Pour cela il faut suivre ton code pas à pas et supprimer les inutiles.
Cordialement