Passer rapidement valeurs cellules dans variant

mécano41

XLDnaute Accro
Bonjour à tous,

J'ai le code suivant pour tester une plage de cellules à l'aide d'une fonction qui nécessite des arguments de type Variant. Actuellement cela fonctionne parfaitement mais c'est long (13 s sur mon PC)

Code:
Dim PlageTestX As Range
Dim ValTextX As Variant
Dim ValTextY As Variant

Set PlageTestX = Range("A1:A6000")
For Pos = PlageTestX.Rows.Count To 1 Step -1
    ValTextX = Range("A1").Resize(Pos, 1).Value
    ValTextY = Range("B1").Resize(Pos, 1).Value
    If Application.WorksheetFunction.Correl(ValTextY, ValTextX) ^ 2 > 0.999 Then Exit For
Next Pos

J'ai cherché comment faire passer rapidement les valeurs dans les deux variants ValTextX et ValTextY en chargeant d'abord un autre tableau ou un Variant avec la totalité des cellules puis en ne transférant que les lignes souhaitées dans les deux Variant ValTextX et ValTextY ...mais apparemment, ce n'est pas possible car le Variant n'est pas dynamique...Comment faire?

Merci d'avance (c'est pour aider Ration65 dans ce sujet :https://www.excel-downloads.com/threads/recuperation-de-la-partie-lineaire-dune-courbe.180552/)

Nota : j'ai également pensé à réduire le temps en remplaçant la boucle par une recherche dichotomique, mais je n'ai pas encore essayé...

Cordialement
 

mutzik

XLDnaute Barbatruc
Re : Passer rapidement valeurs cellules dans variant

bonjour,

essaie
ValTextX = Range("A1").Resize(Pos, 1).Value
à remplacer par ValTextX = cells(nr de ligne , nr de colonne)
c'est à dire cells(Pos,1) -> à vérifier

par ailleurs, déclarer en variant utilise un max d'espace mémoire, si tu affines en mettant le type de données utilisées, ton traitement peut également s'en trouver allégé
 
Dernière édition:

mécano41

XLDnaute Accro
Re : Passer rapidement valeurs cellules dans variant

Bonjour Mutzik,

Merci pour ta réponse.

...
ValTextX = Range("A1").Resize(Pos, 1).Value
à remplacer par ValTextX = cells(nr de ligne , nr de colonne)
c'est à dire cells(Pos,1) -> à vérifier

1 - ValTextX et ValTextY passent des Variant sous forme de tableaux de valeurs à la fonction. Ce que tu me donnes Cells(L,C) passe une valeur unique...ou alors je n'ai pas compris.

Mon problème c'est que ValTextX(a,b)= xxx ne semble pas possible avec un Variant ni le transfert direct d'une plage d'un tableau ou d'un autre variant dans ce variant...

2 - Cells(L,C) serait plus rapide que Range(...).value ? (c'est simplement une question ; je n'ai pas testé...)


par ailleurs, déclarer en variant utilise un max d'espace mémoire, si tu affines en mettant le type de données utilisées, ton traitement peut également s'en trouver allégé

Cela, je le sais mais ici c'est une obligation pour la fonction Correl...

Cordialement
 

job75

XLDnaute Barbatruc
Re : Passer rapidement valeurs cellules dans variant

Bonjour mécano41, mutzik, mapomme,

Avec cette macro 6,8 secondes sur mon ordi fixe avec XP/Excel 2003 :

Code:
Option Explicit
Option Base 1

Sub Test()
Dim t#, PlageTest, ub&, ValTextX(), ValTextY(), Pos&
t = Timer
PlageTest = [A1:B6000] 'matrice
ub = UBound(PlageTest)
ReDim ValTextX(1, ub)
ReDim ValTextY(1, ub)
For Pos = 1 To ub
  ValTextX(1, Pos) = PlageTest(Pos, 1)
  ValTextY(1, Pos) = PlageTest(Pos, 2)
Next
For Pos = ub To 1 Step -1
  ReDim Preserve ValTextX(1, Pos)
  ReDim Preserve ValTextY(1, Pos)
  If Application.Correl(ValTextY, ValTextX) ^ 2 > 0.999 Then Exit For
Next
' ---Affichage résultats---
[H2] = "Limite à X ="
[H3] = "R² ="
[I2] = PlageTest(Pos, 1)
[I3] = Application.Correl(ValTextY, ValTextX) ^ 2
MsgBox Timer - t
End Sub
La macro travaille uniquement sur des tableaux mais de toute façon le calcul du coefficient de corrélation prend du temps...

Fichier joint.

Edit : testé le même fichier sur mon portable avec W7/Excel 2010 => 3,8 secondes.

A+
 

Pièces jointes

  • Essai test(1).xls
    426.5 KB · Affichages: 32
Dernière édition:

mécano41

XLDnaute Accro
Re : Passer rapidement valeurs cellules dans variant

Merci pour ces réponses. Sur mon PC : 5,3 s

Finalement, je l'ai fait par dichotomie et là, le temps est imperceptible.

Je joins le fichier ; cela pourra peut-être intéresser quelqu'un...

Encore merci.

Cordialement
 

Pièces jointes

  • Essai test2.xlsm
    110.7 KB · Affichages: 40

Discussions similaires

Réponses
0
Affichages
196

Statistiques des forums

Discussions
312 779
Messages
2 092 043
Membres
105 162
dernier inscrit
djikon