Classeurs variant: Opérations sur des plages de cellules

napo124

XLDnaute Junior
Bonjour à tous,

J'aimerais savoir comment effectuer des opérations (somme ou autres) sur des plages de cellules de tableaux variant ? Voire juste renvoyer la plage de cellules vers un autre tableau?

Exemple:
Je suis habitué à utiliser une boucle do pour renvoyer une ligne d'un tableau TABL1 vers TABL2.
Ou j'utilise une boucle Do pour effectuer sur chaque cellule une multiplication par 2.

Pouvez vous m'aider en m'indiquant une manière plus rapide d’effectuer ces opérations?

Merci!
 

Dranreb

XLDnaute Barbatruc
Re : Classeurs variant: Opérations sur des plages de cellules

Bonjour.
En chargeant d'un seul coup la Value de toute la plage source dans un tableau de Variant, la corrigeant, puis le déchargeant d'un seul coup dans la plage cible.
Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Classeurs variant: Opérations sur des plages de cellules

Dans ce style:
VB:
Sub test()
Dim TABL() As Variant, L As Long, C As Long
TABL = ThisWorkbook.Worksheets(1).Cells(1, 1).CurrentRegion.Value
For L = 1 To UBound(TABL, 1)
   For C = 1 To UBound(TABL, 2)
      TABL(L, C) = TABL(L, C) * 2
      Next C
   Next L
ThisWorkbook.Worksheets(2).Cells(1, 1).Resize(UBound(TABL, 1), UBound(TABL, 2)).Value = TABL
End Sub
À +
 

napo124

XLDnaute Junior
Re : Classeurs variant: Opérations sur des plages de cellules

Bonjour !

Merci de votre réponse, mais cela revient à utiliser une boucle (do ou for) pour appliquer une opération cellule par cellule.

Mon objectif est de l'appliquer sur une plage de cellule.Exemple:
Ligne 1 de TABL = (Ligne 1 de TABL2)*2
Ou
Colonne 5 de TABL = (Colonne 4 de TABL2) * 5 + Colonne 2 de TABL

:)
 

Dranreb

XLDnaute Barbatruc
Re : Classeurs variant: Opérations sur des plages de cellules

Vous avez aussi le collage spécial avec opérations. Mais ça implique de copier d'abord une cellule contenant le facteur multiplicatif.
cela revient à utiliser une boucle (do ou for) pour appliquer une opération cellule par cellule.
Non. Ça ne revient pas du tout à ça, c'est beaucoup plus rapide. D'accord sur le mot boucle, mais pas sur le mot cellule.
En gros 1000 utilisations de Range pour chaque fois atteindre 1 seule cellule à la fois coute bien 900 fois plus temps qu'une seule utilisation de Range pour atteindre les 1000 cellules d'un coup via un tableau.
Quand aux opérations internes portant sur le tableau, leur coût en temps est carrément négligeable face à celui des requêtes Excel, à moins d'avoir plusieurs boucles imbriquées.
Cordialement.
 
Dernière édition:

Statistiques des forums

Discussions
291 501
Messages
1 915 830
Membres
178 990
dernier inscrit
shadowtheone
Haut Bas