Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,

Oui j'ai essayer mais cela me signale une erreur. je vous ai joint un exemple avec quelques lignes, car 170 000 linges cela fais un trop je pense.

Merci.
 

Pièces jointes

  • Exemple.xlsm
    780.7 KB · Affichages: 3

MR.O

XLDnaute Junior
Bonjour Job75,

Merci beaucoup, cela fonctionne parfaitement.

encore merci,

Cordialement,
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…