Accélérer code VBA

laplayast

XLDnaute Occasionnel
Bonsoir,

Initialement j'ai ce code en bleu dans la feuille mais qui recalcule trop lentement les cellules,
et le code qui est en vert normalement accélère ce recalcul; mais je ne sais pas écrire sur le modèle du second, en respectant les conditions du code en bleu.
J'ai besoin de votre aide.
Merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim CelluleAvant
CelluleAvant = Target.Address
If Not IsEmpty(CelluleAvant) Then
If Not Intersect(Range(CelluleAvant), [E5:LV30]) Is Nothing Then Calculate
End If
ActiveSheet.Unprotect
If Not Application.Intersect(Target, Range("E5:LV30")) Is Nothing And Target.Count = 1 Then 'Adapter la plage
UserForm1.Show
End If
Calculate
ActiveSheet.Protect
End Sub





Sub Liretraitercellules_2()
Dim datarange as variant
Dim irow as long
Dim icol as integer
Dim myvar as double
'Lire les données d'un seul coup

Datarange = Range("A1:C10000").Value
For irow = 1 to 10000
For Icol = 1to 3
Myvar = Datarange(Irow, Icol)
If Myvar > 0 then
'changer la valeur
MyVar = Myvar * Myvar
'si changement, le faire dans le tableau
Datarange(Irow, Icol) = Myvar

End if
Next Icol
Next Irow
' transcrire le tout dans la feuille excel
Range ("A1:C10000") .Value = Datarange
End sub
 

Pièces jointes

  • modif code.xlsm
    251.2 KB · Affichages: 38

Dranreb

XLDnaute Barbatruc
Bonsoir.
C'est votre fonction NbCoul qui est longue à calculer.
Vous auriez peut être intérêt à calculer les valeurs qu'elle renvoie et ne plus l'employer en formules.
Mais le mieux ce serait certainement de trouver un autre système qui ne s'appuie plus du tout sur des couleurs.
Une couleur peut être un sous produit visuel montré par des mises en formes conditionnelles, mais ce n'est pas une donnée.
 

Discussions similaires

Réponses
12
Affichages
534