re,
chaque interaction avec la feuille coût du temps (très peu mais la somme peut être considèrable), donc il faut minimaliser tout cela. Ma première macro lit les choses nécessaires en matrices (sorte de tableaux en mémoire) puis fait ce qu'il est nécessaire et colle le résultat dans la feuille, donc il y a au max 5 interactions, = extrèmement vite. La dernière macro, il y a plusieurs interactions par cellule et la somme était votre 11 sec ...
Nouveau fichier, 2 valeurs temporaire en mémoire, old_ et new_. On lit chaque le contenu d'une cellule dans "Old_" et écrase la valeur de "New_". Chaque ligne on lit le contenu des 4 cellules pour les jours d'étude 1 fois dans la matrice aEtudes. Et puis on fait les comparaisons et le résultat on le sauvegarde dans le variable "New_". Au bout du boucle, si "New_" a reçu une autre valeur qui est différente de "Old_", on écrase la cellule. Résultat, on ne lit qu'une fois le contenu de chaque cellules au lieu de plusieurs fois (compte le nombre de ".Cells(li, co)" dans l'ancienne macro et comparez-le avec le nombre dans la nouvelle macro) et dans une minorité de fois, on écrase cette cellule avec une nouvelle valeur. Résultat : gagne de temps énorme. Pour le moment, ce temps, c'est environ 0.35-0.40 sec avec mon ordinateur (0.35 si rien ne change, 0.40 sec avec de changements), donc 30 fois plus vite,
Bon, mon premier fichier, il est encore 10 fois plus vite que ce dernier fichier, je vous propose que vous mettez un nouveau chiffre quelque part dans la plage pour voir le resultat
il y a une ligne avec "If (New_ <> Chr(1) And New_ <> Old_) Or 1 Then .Cells(li, co).Value2 = New_, modifiez ce 1 en 0 pour voir le résultat = la différence entre écraser chaque cellule ou seulement si sa valeur est modifiée.
EDIT : un autre fichier en PJ