[Macro lente] Changement de signe d'une cellule suivant une valeur
L
Bonjour, je suis un petit nouveau sur le forum alors merci d'avance pour vos réponses
Je viens à vous car je suis un peu embêté avec mon code vba ci joint :
Sub Màj_Qt()
Dim nombre As Integer
Dim quantité As Double
Dim Mvt As Double
Dim montant As Double
nombre = 2
quantité = Sheets("Réception 2020").Range("K2").Value
montant = Sheets("Réception 2020").Range("N2").Value
While quantité <> 0
Mvt = Sheets("Réception 2020").Range("I" & nombre).Value
If Mvt = 101 Then
Sheets("Réception 2020").Range("K" & nombre).Value = Abs(quantité)
Else
Sheets("Réception 2020").Range("K" & nombre).Value = -Abs(quantité)
End If
If Mvt = 101 Then
Sheets("Réception 2020").Range("N" & nombre).Value = Abs(montant)
Else
Sheets("Réception 2020").Range("N" & nombre).Value = -Abs(montant)
End If
nombre = nombre + 1
quantité = Sheets("Réception 2020").Range("K" & nombre).Value
Mvt = Sheets("Réception 2020").Range("I" & nombre).Value
montant = Sheets("Réception 2020").Range("N" & nombre).Value
Wend
End SubL’intérêt de ce code est de simplement changer le signe de deux cellules en fonction du type de "mouvement" trouvé dans la colonne I
Or, il fonctionne plutôt bien dans un contexte avec peu de lignes. J'ai fait des test avec une centaine de lignes et cela a pris plusieurs minutes. Or j'aimerais l'utiliser dans un contexte avec plus de 30 000 lignes... d'où mon problème.
Je suis un débutant sur VBA donc peut être que j'ai fait une erreur grossière
Merci d'avance
Bonjour,
Une suggestion :
Sub Màj_Qt()
'Déclaration des variable
Dim nombre As Integer, quantité As Double, Mvt As Double, montant As Double
Application.ScreenUpdating = False 'Désactive l'affichage le temps de la macro
Application.Calculation = xlCalculationManual 'Désactive le recalcul auto des formules Excel
With Sheets("Réception 2020") 'Tout élément commençant par "." se rattache à cette feuille
For nombre = 2 To .Range("K" & Rows.Count).End(xlUp).Row 'Boucle sur les lignes
quantité = .Range("K" & nombre).Value
Mvt = .Range("I" & nombre).Value
montant = .Range("N" & nombre).Value
If Mvt = 101 Then
.Range("K" & nombre).Value = Abs(quantité)
.Range("N" & nombre).Value = Abs(montant)
Else
.Range("K" & nombre).Value = -Abs(quantité)
.Range("N" & nombre).Value = -Abs(montant)
End If
Next
End With
Application.Calculation = xlCalculationAutomatic 'Réactive le recalcul auto des formules Excel
End SubL
Merci beaucoup