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

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.

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Pourquoi déclarer 10 variables alors qu'avec un tableau de variable, c'est bien plus simple et clair.
Et si on avait 100 variables, on devrait déclarer a0 à a99 !

Essayer :
VB:
Option Explicit

Sub macro_essay()
Dim capteur As String, t, i As Long, msg As String
   capteur = UCase(InputBox("De quel capteur souhaitez vous connaître une température? :"))
   Select Case capteur     'transfert des facteurs de la feuille dans un  tableau t
      Case "K"
         t = Range("c6:c15").Value     ' t est un tableau à 2 dimensions de base 1
      Case "T"
         t = Range("c30:c39").Value    ' t est un tableau à 2 dimensions de base 1
      Case Else
         MsgBox capteur & " : capteur incorrect => FIN de l'exécution!", vbCritical: Exit Sub
   End Select
   ' à ce stade les coefficients sont dans le tableau : t(1,1), t(1,2), t(1,3) jusqu'à t(1,10)
   ' ON DEVRAIT S'ARRÊTER et utiliser par la suite le tableau t des coeff.
   ' juste pour vérif du tableau t
   msg = "Pour le type " & capteur
   For i = 1 To UBound(t): msg = msg & vbLf & "t(" & i & ",1) = " & t(i, 1): Next i
   MsgBox msg, vbInformation
  
   ' si maintenant (mais c'est inutile) vous voulez les mêmes coeef.
   ' dans un tableau à une seule dimension de base 0 alors :
   ReDim a(0 To UBound(t) - 1)      ' déclaration de a (une seule dimension de base 0)
   For i = 1 To UBound(t): a(i - 1) = t(i, 1): Next   ' remplissage de a
   ' juste pour vérif du tableau a
   msg = "Pour le type " & capteur
   For i = 0 To UBound(a): msg = msg & vbLf & "a(" & i & ") = " & a(i): Next i
   MsgBox msg, vbInformation
End Sub
 

Pièces jointes

  • essay.xlsm- lecture data vers array à 1 dimension- v1.xlsm
    20 KB · Affichages: 5
Dernière édition:

Discussions similaires

Réponses
7
Affichages
390
Réponses
20
Affichages
854
Réponses
4
Affichages
388
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…