XL 2016 fonction array

jimmy76002

XLDnaute Nouveau
Bonjour à tous, je redige une macro qui doit me servir a calculer une temperature par la suite.

Pour calculer cette temperature, l'utilisation de facteurs est necessaire. Ces facteurs ont été listés dans le fichier excel ci-joint.

Ces facteurs, (appelés a0, a1, a2...) sont des facteurs qui changent en fonction du capteur qui est choisi( j'ai pour cela utilisé un case qui fonctionne bien)

Prenons l'exemple du cas1

J'utilise une boucle for next qui fonctionne bien aussi , ou je parcours les lignes qui m'interesse pour recuperer la valeur de ce facteur à chaque boucle. (à la premiere boucle je recupere la valeur de a0, à la deuxieme celle de a1 ...)

Je souhaite les ranger dans un tableau à une dimension, et c'est là qu'un probleme se pose, la syntaxe est la suivante :
a(i) = Range("C" + Trim(Str(i) + Ligne_Depart))
La partie de droite est a chaque fois le facteur qui est bien pris dans la cellule, cependant, à gauche, j'ai toujours a(i) alors que je voudrais au premier tour par exemple : a0 = =-1,7600413686*10
et au deuxieme a1 = =3,8921204975*10 ect

Cela me pose probleme car je dois ensuite faire un calcul avec ces facteurs, que je ne "memorise" cependant pas, et l'utilisation de la fonction array m'est imposée.

Je ne sais pas si c'est un probleme de declaration de variable, de syntaxe...
Auriez vous une idée pour celà svp?

Restant à votre disposition

Cordialement
 

Pièces jointes

  • essay.xlsm
    16.2 KB · Affichages: 5
Solution
Dans ce cas, le plus simple est peut être :
VB:
Public a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10
Sub macro_essay()
capteur = "K"
Select Case capteur
        Case "K": Lire 6
        Case "T": Lire 29
End Select
End Sub
Sub Lire(Ldep) ' Affecte les valeurs aux variables a0 a10
    a0 = Cells(Ldep + 0, "C")
    a1 = Cells(Ldep + 1, "C")
    a2 = Cells(Ldep + 2, "C")
    a3 = Cells(Ldep + 3, "C")
    a4 = Cells(Ldep + 4, "C")
    a5 = Cells(Ldep + 5, "C")
    a6 = Cells(Ldep + 6, "C")
    a7 = Cells(Ldep + 7, "C")
    a8 = Cells(Ldep + 8, "C")
    a9 = Cells(Ldep + 9, "C")
    a10 = Cells(Ldep + 10, "C")
End Sub
Vous pouvez ensuite utiliser les variables a0 a10 dans la suite des macros.
NB: Il existe peut être mieux comme système.

fanch55

XLDnaute Barbatruc
Bonjour,
Je n'ai pas trop compris votre demande,
mais au vu de la macro, vous essayez de mettre plus de valeurs que le tableau ne peut en contenir .
Un code plus court:
VB:
Sub Macro_essay()
Dim A, Capteur  ' Variant par défaut
    Capteur = "K"
   ' Attention, le transpose retourne toujours un tableau de base 1
    A = Application.Transpose(Columns("C").Rows(IIf(Capteur = "K", 6, 29)).Resize(10))
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jimmy, et bienvenu sur XLD, bonjour Fanch,
Je n'ai pas tout compris. Si le problème est de récupérer les coef a dans un array en fonction du capteur, essayez :
Code:
Sub Essai2()
Capteur = "K"
Select Case Capteur
    Case "K": T = [C6:C16]
    Case "T": T = [B29:C39]
End Select
Dim a(0 To 10)
For i = 1 To UBound(T)
    a(i - 1) = "a" & i - 1 & "=" & T(i, 1)
Next i
End Sub
Ainsi vous récupérez :
1705072855462.png
 

Nairolf

XLDnaute Accro

jimmy76002

XLDnaute Nouveau
Salut jimmy76002 (ou Utilisateur222.222), salut fanch55, salut sylvanu,

En continuant sur ta structure, il y a une erreur de déclaration :
Code:
Dim a As Variant

a = Array(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
doit être :
Code:
Dim a(10) as variant

PS : Dommage que tu n'ai pas poursuivi la discussion suivante sous ton ancien pseudo : https://excel-downloads.com/threads/incrementation-de-variable-dans-une-boucle-for-next.20080686/
Merci fanch55 et sylvanu, merci Nairof

Merci pour la remarque, merci pour l'erreur de déclaration.
Le problème reste que à chaque passage dans ma boucle, la valeur ne se "stocke" pas sous le nom "a0" "a1", hors c'est ce que je souhaite car je les utilise ensuite dans un calcul.
il faut donc à chaque passage dans ma boucle que la valeur se "mémorise" sous a0, a1 ect

Auriez-vous une idée?


PS : et oui, merci pour la remarque, je ne pouvait cependant pas répondre aux différentes réponses qui m'avaient été faites car mes réponses ne se faisaient pas, donc obligé de créer un autre compte
 

jimmy76002

XLDnaute Nouveau
Re,
Dites nous exactement ce que vous attendez.
J'avais compris qu'en a(0) vous attendiez : a0=-17.6004
C'est bien ça, à gauche de mon équation j'aimerais avoir a0, et à droite -17.6004, avec votre première proposition j'obtiens la chaine de caractère complète, je m'explique :
au premier tour il me faudrait :
a0 = -17.6004
mais lorsque j'essaie ce que vous m'avez proposé j'ai
a(i-1) = a0 = -17.6004
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dans ce cas, le plus simple est peut être :
VB:
Public a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10
Sub macro_essay()
capteur = "K"
Select Case capteur
        Case "K": Lire 6
        Case "T": Lire 29
End Select
End Sub
Sub Lire(Ldep) ' Affecte les valeurs aux variables a0 a10
    a0 = Cells(Ldep + 0, "C")
    a1 = Cells(Ldep + 1, "C")
    a2 = Cells(Ldep + 2, "C")
    a3 = Cells(Ldep + 3, "C")
    a4 = Cells(Ldep + 4, "C")
    a5 = Cells(Ldep + 5, "C")
    a6 = Cells(Ldep + 6, "C")
    a7 = Cells(Ldep + 7, "C")
    a8 = Cells(Ldep + 8, "C")
    a9 = Cells(Ldep + 9, "C")
    a10 = Cells(Ldep + 10, "C")
End Sub
Vous pouvez ensuite utiliser les variables a0 a10 dans la suite des macros.
NB: Il existe peut être mieux comme système.
 

Pièces jointes

  • essay (1).xlsm
    13.9 KB · Affichages: 4

fanch55

XLDnaute Barbatruc
Comme le montre @sylvanu , c'est le plus simple et rapide pour votre cas, à moins que vous n'ayez besoin des variables dans une formule de feuille et en ce cas, il vous faudra vous tourner vers d'autres noms car A0 à A10 sont interdits en tant que noms Excel ( A1 à A10 sont des adresses de cellules .... )
 
Dernière édition:

jimmy76002

XLDnaute Nouveau
Dans ce cas, le plus simple est peut être :
VB:
Public a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10
Sub macro_essay()
capteur = "K"
Select Case capteur
        Case "K": Lire 6
        Case "T": Lire 29
End Select
End Sub
Sub Lire(Ldep) ' Affecte les valeurs aux variables a0 a10
    a0 = Cells(Ldep + 0, "C")
    a1 = Cells(Ldep + 1, "C")
    a2 = Cells(Ldep + 2, "C")
    a3 = Cells(Ldep + 3, "C")
    a4 = Cells(Ldep + 4, "C")
    a5 = Cells(Ldep + 5, "C")
    a6 = Cells(Ldep + 6, "C")
    a7 = Cells(Ldep + 7, "C")
    a8 = Cells(Ldep + 8, "C")
    a9 = Cells(Ldep + 9, "C")
    a10 = Cells(Ldep + 10, "C")
End Sub
Vous pouvez ensuite utiliser les variables a0 a10 dans la suite des macros.
NB: Il existe peut être mieux comme système.
Cette méthode fonctionne bien, merci beaucoup pour l'aide !
 

jimmy76002

XLDnaute Nouveau
Comme le montre @sylvanu , c'est le plus simple et rapide pour votre cas, à moins que vous n'ayez besoin des variables dans une formule de feuille et en ce cas, il vous faudra vous tourner vers d'autres noms car A0 à A10 sont interdits en tant que noms Excel ( A0 à A10 sont des adresses de cellules .... )
Cela fonctionne pour mon cas et me paraît assez comprehensible, donc merci beacoup aussi :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Pour moi, ce serait plus simple de mettre les coef dans un array.
Ensuite au lieu d'avoir par ex :
Y=a0 x² +a1 x + a2
Vous auriez :
Y=a(0) x² +a(1) x + a(2)
et ça vous éviterez d'avoir plein de variables déclarées. Et les modifs éventuelles seraient plus simples si le nombre de coef changeait.
 

Discussions similaires

Réponses
7
Affichages
389
Réponses
20
Affichages
852
Réponses
4
Affichages
387

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki