XL 2019 des calculs dans un tableau ("array") ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sheldor

XLDnaute Occasionnel
Supporter XLD
bonjour à toutes et tous,

j'ai des opérations assez simples à faire et je fais une boucle du style :

'arrondi de valeur:
precision = 0.2
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Cells(i, 3) = Int(Cells(i, 1) / precision) * precision
Next i

quand j'ai des dizaines de milliers de lignes à traiter je suis patient... mais je me demandais si on peut utiliser les "array" (cet outils incroyable qui m'émerveille mais que j'ai du mal à comprendre) pour faire ce genre de choses et aller plus vite ....

merci par avance pour vos lumières et excellente journée à vous

nico
 

Pièces jointes

Bonjour Sheldor,
Un essai en PJ avec :
VB:
Sub Arrondir()
   ' Pour l'exemple, remplit A de valeurs aléatoires
    [C2:C10000].ClearContents
    Application.ScreenUpdating = False
    For i = 2 To 10000
        Cells(i, "A") = 100 * Rnd
    Next i
    Application.ScreenUpdating = True
    ' Arrondir valeur, ici 1 chiffre après la virgule
    Application.ScreenUpdating = False
    tablo = Range("A2:A" & Range("A1000000").End(xlUp).Row) ' Transfert données colonne A dans array
    For i = LBound(tablo) To UBound(tablo)                  ' Pour toutes les lignes de l'array
        tablo(i, 1) = Round(tablo(i, 1), 1)                 ' Arrondir sa valeur
    Next i
    [C2].Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo ' Reverser ce tablo en colonne A
End Sub
La première partie ne sert à rien, juste pour l'exemple en remplissant un tableau de valeurs aléatoires.
J'ai arrondi à 1 chiffre après la virgule, la demande n'était pas claire.

C'est vrai que le passage par array est "obligatoire" si on veut aller vite.
Un autre PJ démo qui montre la différence de temps d'exécution entre RW cellules et RW arrays.
 

Pièces jointes

Bonjour nico, sylvanu,

une autre façon de faire, avec un tableau T() à une seule dimension. 🙂

clique sur ton bouton pour voir les résultats ; ensuite, c'est à tester
sur ton vrai fichier avec des dizaines de milliers de lignes.



code VBA (14 lignes) :

VB:
Option Explicit

Sub Bouton1_Cliquer()
  Dim n&: n = Cells(Rows.Count, 1).End(3).Row: If n = 1 Then Exit Sub
  Dim T, précision#, i&: précision = 0.2: n = n - 1
  T = Application.Transpose([A2].Resize(n))
  For i = 1 To n
    T(i) = Int(T(i) / précision) * précision
  Next i
  Application.ScreenUpdating = 0
  Columns(3).ClearContents: [C1] = "Mon résultat"
  [C2].Resize(n) = Application.Transpose(T)
End Sub

soan
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour