XL 2016 boucle VBA jusqu'à un nombre de lignes précis

MR.O

XLDnaute Junior
Bonjour à tous,

Je souhaiterais savoir comment définir une boucle jusqu'à 170 000 lignes par exemple.

Voici mon mon code mais il ne fonctionne que pour la première ligne :

Sub If_Conditions_Multiples()

If Range("AD2").Value = "CM" Then
Range("AP2").Value = Range("AC2") / 100
ElseIf Range("AD2").Value = "MM" Then
Range("AP2").Value = Range("AC2") / 1000
ElseIf Range("AD2").Value = "DE" Then
Range("AP2").Value = Range("AC2") / 10

End If

End Sub

Merci d'avance pour votre aide,

Cordialement,
 
Solution
Bonjour MR.O, Deadpool_CC

Avec 170 000 lignes il ne faut surtout pas traiter les cellules une par une.

Utiliser des tableaux VBA :
VB:
Sub If_Conditions_Multiples()
Dim tabloAC, tabloAD, tabloAP, i&
tabloAC = [AC2:AC170000] 'matrice, plus rapide
tabloAD = [AD2:AD170000] 'matrice, plus rapide
tabloAP = [AP2:AP170000] 'matrice, plus rapide
For i = 1 To UBound(tabloAC)
    If IsNumeric(tabloAC(i, 1)) Then
        If tabloAD(i, 1) = "CM" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 100
        ElseIf tabloAD(i, 1) = "MM" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 1000
        ElseIf tabloAD(i, 1) = "DE" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 10
        End If
    End If
Next
[AP2:AP170000] = tabloAP 'restitution...

job75

XLDnaute Barbatruc
Bonjour MR.O, Deadpool_CC

Avec 170 000 lignes il ne faut surtout pas traiter les cellules une par une.

Utiliser des tableaux VBA :
VB:
Sub If_Conditions_Multiples()
Dim tabloAC, tabloAD, tabloAP, i&
tabloAC = [AC2:AC170000] 'matrice, plus rapide
tabloAD = [AD2:AD170000] 'matrice, plus rapide
tabloAP = [AP2:AP170000] 'matrice, plus rapide
For i = 1 To UBound(tabloAC)
    If IsNumeric(tabloAC(i, 1)) Then
        If tabloAD(i, 1) = "CM" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 100
        ElseIf tabloAD(i, 1) = "MM" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 1000
        ElseIf tabloAD(i, 1) = "DE" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 10
        End If
    End If
Next
[AP2:AP170000] = tabloAP 'restitution
End Sub
Edit : corrigé une petite coquille.

A+
 
Dernière édition:

MR.O

XLDnaute Junior
Bonjour MR.O, Deadpool_CC

Avec 170 000 lignes il ne faut surtout pas traiter les cellules une par une.

Utiliser des tableaux VBA :
VB:
Sub If_Conditions_Multiples()
Dim tabloAC, tabloAD, tabloAP, i&
tabloAC = [AC2:AC170000] 'matrice, plus rapide
tabloAD = [AD2:AD170000] 'matrice, plus rapide
tabloAP = [AP2:AP170000] 'matrice, plus rapide
For i = 1 To UBound(tabloAC)
    If IsNumeric(tabloAC(i, 1)) Then
        If tabloAD(i, 1) = "CM" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 100
        ElseIf tabloAP(i, 1) = "MM" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 1000
        ElseIf tabloAD(i, 1) = "DE" Then
            tabloAP(i, 1) = tabloAC(i, 1) / 10
        End If
    End If
Next
[AP2:AP170000] = tabloAP 'restitution
End Sub
A+
Bonjour Job75,

Merci beaucoup, cela fonctionne parfaitement.

encore merci,

Cordialement,
 

Statistiques des forums

Discussions
315 098
Messages
2 116 193
Membres
112 679
dernier inscrit
Yupanki