variable array

  • Initiateur de la discussion noelle
  • Date de début
N

noelle

Guest
bonsoir à tous
je cherche à lire un tableau de données contenu dans une feuille excel en utilisant la variable "array" qui, si j'ai bien compris me remonte les valeurs de la plage range selectionnée.
mais je n'arrive pas à trouver la façon d'utiliser "array" en vba
quelqu'un aurait il une idée ?
merci mille fois d'avance
 
@

@+Thierry

Guest
Bonsoir Noelle, le Forum

Une Array peu avoir plusieurs dimensions... Disons que pour commncer on peux décrire tout simplement ceci :

Sub MiniArray()
Dim MyArray As Variant
Dim i As Byte

MyArray = Sheets("Feuil1").Range("A1:A500")

For i = 1 To UBound(MyArray)
MyArray(i, 1) = MyArray(i, 1) * 2
Next

Sheets("Feuil1").Range("A1:A500") = MyArray

End Sub

Ce genre de codes sur de grande plage de données est jusqu'à dix fois plus rapide que de travailler directement dans une boucle For Each Cell in Plage...

Mais peut-être cherches-tu quelques chose de plus précis ? ou de plus compliqué ?

Bonne Soirée
@+Thierry
 
@

@+Thierry

Guest
Bonjour Noelle, le Forum

Tiens, pendant la nuit "OurDearFriend" a mis un autre exemple tout chaud de ce type d'Array dans le Forum, çà permettra de confirmer quant à la rapidité d'exécution car il utilise le même type de Timer que j'ai testé dimanche soir pour les Set de Collection et c'est concluant :

=> Lien supprimé

Bonne Journée
@+Thierry
 
B

Bernard

Guest
Bonjour le forum

Sur un fil précédent, dans un test d'optimisation, MyDearFriend a démontré brillamment que le temps d'exécution entre deux macros en boucle de nature différente peut varier de 1 à 15 fois environ.

@+Thierry donne dans ce fil un modèle de configuration de macro utilisant la boucle For Next avec affichage en fin de calcul de tableau.

Avec tout cela, j'ai testé le temps d'exécution de deux macros de natures de boucle différentes mais qui affichent à chaque récurrence le résultat dans le tableau.

Essai 1 avec For Each Next :

Sub ForeachTableau()
Dim A As Long
T = Timer
A = 1
For Each C In Sheets("Feuil1").Range("A1:J50000")
C.Value = A
A = A + 1
Next
MsgBox " cellules renseignées en " & CStr(Timer - T) & " secondes"
End Sub

Essai 2 avec For Next en double boucle :
Sub ForTableauBis()
Dim MyArray As Variant
Dim i As Long
Dim j As Long
Dim A As Long
A = 1
T = Timer
MyArray = Sheets("Feuil1").Range("A1:J50000")
For i = 1 To UBound(MyArray, 1)
For j = 1 To UBound(MyArray, 2)
Cells(i, j) = A
A = A + 1
Next j
Next i
MsgBox " cellules renseignées en " & CStr(Timer - T) & " secondes"
End Sub

Les temps d’exécution sont à peu de chose près équivalents : 54s sur ma bécane.


Puis j’ai repris l’essai deux. J’ai modifié la macro comme le suggère opportunément @+Thierry, de façon que l’affichage ne soit effectué qu’en fin de procédure:

Essai 3 :
Sub ForTableau()
Dim MyArray As Variant
Dim i As Long
Dim j As Long
Dim A As Long
A = 1
T = Timer
MyArray = Sheets("Feuil1").Range("A1:J50000")
For i = 1 To UBound(MyArray, 1)
For j = 1 To UBound(MyArray, 2)
MyArray(i, j) = A
A = A + 1
Next j
Next i
Sheets("Feuil1").Range("A1:J50000") = MyArray
MsgBox " cellules renseignées en " & CStr(Timer - T) & " secondes"
End Sub

Temps d’exécution : 0,6s !

Y’a pas photo, 100 fois plus vite !

Cette configuration fait toute la différence, je roule désormais en Ferrari, Lol

Merci Père Noël @+Thierry

Cordialement

Bernard
 
@

@+Thierry

Guest
Héhéhé Bernard

Merci en tout cas, savais-tu même que Ferrari vendait des LapTops ?

!!!

Mais même avec un truc comme çà, il reste des bases importantes en programmation, que, si elles sont ignorées, on a vite fini par se retrouver en 2 Chevaux !!

Bonne Fin de Journée
@+Thierry
 
B

Bernard

Guest
Re à tous

C'est pour le fun hi hi

Quel est le sexe d'un micro-ordinateur ?

Réponse d'un informaticien :

Un micro-ordinateur est de sexe féminin pour les 5 raisons suivantes :

* A l'exception de son concepteur, personne ne comprend sa logique interne.
* Avant de faire impression, il doit être aperçu.
* Les menus qu'il affiche sont copieux mais beaucoup d'options sont indisponibles.
* La moindre erreur est stockée en mémoire pour être ressortie au moment le plus inopportun.
* Vous découvrez vite qu'il coûte un budget énorme en accessoires et en maintenance.

Réponse d'une informaticienne :

Un micro-ordinateur est de sexe masculin pour les 5 raisons suivantes :

* Pour capter son attention, il faut d'abord l'allumer.
* Il contient plein d'informations mais il est sans imagination.
* Il est incapable de vider la poubelle sans injonction de votre part.
* Il est supposé vous aider, mais la plupart du temps c'est lui qui constitue le problème.
* Vous réalisez vite que si vous aviez attendu plus longtemps avant de l'acquérir, vous auriez eu un modèle plus performant !


Salut :)

Bernard
 

Discussions similaires

Réponses
16
Affichages
491

Statistiques des forums

Discussions
312 315
Messages
2 087 168
Membres
103 489
dernier inscrit
CACCA