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

Passer rapidement valeurs cellules dans variant

  • Initiateur de la discussion Initiateur de la discussion mécano41
  • Date de début Date de début

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 !

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
 
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:
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
 
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

Dernière édition:
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

- 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

Discussions similaires

Réponses
3
Affichages
879
Réponses
7
Affichages
814
Réponses
0
Affichages
657
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…