Récupérer le nom d'une variable dans un tableau type Array

Michael_B

XLDnaute Nouveau
Bonjour à tous (et bonne année)

Ça y est ! Je colle à un point sur la création d'un scripte que je me suis finalement créé un compte ... je vous explique:

J'ai défini un tableau Array dans lequel on trouve pas moins de 200 arguments qui sont des Variables (qui récupèrent des valeurs numériques dans un txt). aujourd'hui j'aimerais bouclé sur ce tableau et faire une mise en forme conditionnelle en fonction du nom de la variable. Ci dessous un exemple (simplifié).

...For ...
Variables = Array(P1_bas, P1_bas_Nominal + P1_bas_ITsup, P1_bas_Nominal, P1_bas_Nominal + P1_bas_ITinf, Circularite_P1_bas, Circularite_P1_bas_IT, y_P1_bas, y_P1_bas_Nominal + y_P1_bas_ITsup, y_P1_bas_Nominal, y_P1_bas_Nominal + y_P1_bas_ITinf, z_P1_bas, z_P1_bas_Nominal + z_P1_bas_ITsup, z_P1_bas_Nominal, z_P1_bas_Nominal + z_P1_bas_ITinf)

For ligne = Ligne_debut To Ligne_fin
Cells(ligne, Incrementation_de_colonne).Value = Variables(ligne - Ligne_debut)
If Variables(ligne - Ligne_debut).Name = "*" & "IT" & "*" Then
Cells(ligne, Incrementation_de_colonne).Select
Selection.Font.Italic = True
End If
Next​

Next...

Mais Variable(x).name bah ca marche pas...

Merci de votre aide
 

job75

XLDnaute Barbatruc
Re : Récupérer le nom d'une variable dans un tableau type Array

Bonjour Michael_B, bienvenue sur XLD,

Sauf si vous êtes analphabète, il suffit de lire les 14 arguments de Array :cool:

Et vous voyez alors que les "IT" sont dans les arguments d'index 1-3-5-7-9-11-13 (le 1er argument a l'index 0).

Ce sont donc les index impairs => index Mod 2 = 1.

Donc dans le code écrivez pour le test If :

Code:
If (ligne - Ligne_debut) Mod 2 Then
A+
 

Michael_B

XLDnaute Nouveau
Re : Récupérer le nom d'une variable dans un tableau type Array

Merci ...mais :(
c'est en fait plus compliqué (je n'ai mis qu'un exemple)
Si je mets l'Array complet (200 arguments):
1-on va avoir un décalage dès l'argument après ""(pas de suite logique, à première vue)
2-Je souhaite également bouclé sur tous ceux qui sont *&"_Nominal" (seuls sans la somme avec IT):​

-->Peut-être la solution est de ne pas utiliser Array mais autre chose (mais en fait Array est la seule façon de créer un tableau que je connaise)


(Pour info, voici le tableau complet : :confused:

Variables = Array(P1_bas, P1_bas_Nominal + P1_bas_ITsup, P1_bas_Nominal, P1_bas_Nominal + P1_bas_ITinf, Circularite_P1_bas, Circularite_P1_bas_IT, y_P1_bas, y_P1_bas_Nominal + y_P1_bas_ITsup, y_P1_bas_Nominal, y_P1_bas_Nominal + y_P1_bas_ITinf, z_P1_bas, z_P1_bas_Nominal + z_P1_bas_ITsup, z_P1_bas_Nominal, z_P1_bas_Nominal + z_P1_bas_ITinf, "", P1_milieu, P1_milieu_Nominal + P1_milieu_ITsup, P1_milieu_Nominal, P1_milieu_Nominal + P1_milieu_ITinf, Circularite_P1_milieu, Circularite_P1_milieu_IT, y_P1_milieu, y_P1_milieu_Nominal + y_P1_milieu_ITsup, y_P1_milieu_Nominal, y_P1_milieu_Nominal + y_P1_milieu_ITinf, z_P1_milieu, z_P1_milieu_Nominal + z_P1_milieu_ITsup, z_P1_milieu_Nominal, z_P1_milieu_Nominal + z_P1_milieu_ITinf, "", P1_haut, P1_haut_Nominal + P1_haut_ITsup, P1_haut_Nominal, P1_haut_Nominal + P1_haut_ITinf, Circularite_P1_haut, Circularite_P1_haut_IT, y_P1_haut, y_P1_haut_Nominal + y_P1_haut_ITsup, y_P1_haut_Nominal, y_P1_haut_Nominal + y_P1_haut_ITinf, z_P1_haut, z_P1_haut_Nominal + z_P1_haut_ITsup, z_P1_haut_Nominal, z_P1_haut_Nominal + z_P1_haut_ITinf, "", P2_jambe_haute_voile, P2_jambe_haute_voile_Nominal + P2_jambe_haute_voile_ITsup, P2_jambe_haute_voile_Nominal, P2_jambe_haute_voile_Nominal + P2_jambe_haute_voile_ITinf, Circularite_P2_jambe_haute_voile, Circularite_P2_jambe_haute_voile_IT, y_P2_jambe_haute_voile, y_P2_jambe_haute_voile_Nominal + y_P2_jambe_haute_voile_ITsup, y_P2_jambe_haute_voile_Nominal, y_P2_jambe_haute_voile_Nominal + y_P2_jambe_haute_voile_ITinf, z_P2_jambe_haute_voile, z_P2_jambe_haute_voile_Nominal + z_P2_jambe_haute_voile_ITsup, z_P2_jambe_haute_voile_Nominal, z_P2_jambe_haute_voile_Nominal + z_P2_jambe_haute_voile_ITinf, "", P2_jambe_haute_haut, P2_jambe_haute_haut_Nominal + P2_jambe_haute_haut_ITsup, P2_jambe_haute_haut_Nominal, P2_jambe_haute_haut_Nominal + P2_jambe_haute_haut_ITinf, Circularite_P2_jambe_haute_haut, Circularite_P2_jambe_haute_haut_IT, y_P2_jambe_haute_haut, y_P2_jambe_haute_haut_Nominal + y_P2_jambe_haute_haut_ITsup, y_P2_jambe_haute_haut_Nominal, y_P2_jambe_haute_haut_Nominal + y_P2_jambe_haute_haut_ITinf, z_P2_jambe_haute_haut, z_P2_jambe_haute_haut_Nominal + z_P2_jambe_haute_haut_ITsup, z_P2_jambe_haute_haut_Nominal, z_P2_jambe_haute_haut_Nominal + z_P2_jambe_haute_haut_ITinf, "", P3_jambe_basse_haut, P3_jambe_basse_haut_Nominal + P3_jambe_basse_haut_ITsup, P3_jambe_basse_haut_Nominal, P3_jambe_basse_haut_Nominal + P3_jambe_basse_haut_ITinf, Circularite_P3_jambe_basse_haut, Circularite_P3_jambe_basse_haut_IT, y_P3_jambe_basse_haut, y_P3_jambe_basse_haut_Nominal + y_P3_jambe_basse_haut_ITsup, y_P3_jambe_basse_haut_Nominal, y_P3_jambe_basse_haut_Nominal + y_P3_jambe_basse_haut_ITinf, z_P3_jambe_basse_haut, z_P3_jambe_basse_haut_Nominal + z_P3_jambe_basse_haut_ITsup, z_P3_jambe_basse_haut_Nominal, z_P3_jambe_basse_haut_Nominal + z_P3_jambe_basse_haut_ITinf, "", P3_jambe_basse_bas, P3_jambe_basse_bas_Nominal + P3_jambe_basse_bas_ITsup, P3_jambe_basse_bas_Nominal, P3_jambe_basse_bas_Nominal + P3_jambe_basse_bas_ITinf, Circularite_P3_jambe_basse_bas, Circularite_P3_jambe_basse_bas_IT, y_P3_jambe_basse_bas, y_P3_jambe_basse_bas_Nominal + y_P3_jambe_basse_bas_ITsup, y_P3_jambe_basse_bas_Nominal, y_P3_jambe_basse_bas_Nominal + y_P3_jambe_basse_bas_ITinf, z_P3_jambe_basse_bas, z_P3_jambe_basse_bas_Nominal + z_P3_jambe_basse_bas_ITsup, z_P3_jambe_basse_bas_Nominal, z_P3_jambe_basse_bas_Nominal + z_P3_jambe_basse_bas_ITinf, "", P4_voile, P4_voile_Nominal + P4_voile_ITsup, P4_voile_Nominal, P4_voile_Nominal + P4_voile_ITinf, Circularite_P4_voile, Circularite_P4_voile_IT, y_P4_voile, y_P4_voile_Nominal + y_P4_voile_ITsup, y_P4_voile_Nominal, y_P4_voile_Nominal + y_P4_voile_ITinf, z_P4_voile, z_P4_voile_Nominal + z_P4_voile_ITsup, z_P4_voile_Nominal, z_P4_voile_Nominal + z_P4_voile_ITinf, "", P4_milieu, P4_milieu_Nominal + P4_milieu_ITsup, P4_milieu_Nominal, P4_milieu_Nominal + P4_milieu_ITinf, Circularite_P4_milieu, Circularite_P4_milieu_IT, y_P4_milieu, y_P4_milieu_Nominal + y_P4_milieu_ITsup, y_P4_milieu_Nominal, y_P4_milieu_Nominal + y_P4_milieu_ITinf, z_P4_milieu, z_P4_milieu_Nominal + z_P4_milieu_ITsup, z_P4_milieu_Nominal, z_P4_milieu_Nominal + z_P4_milieu_ITinf, "", P4_bas, P4_bas_Nominal + P4_bas_ITsup, P4_bas_Nominal, P4_bas_Nominal + P4_bas_ITinf, Circularite_P4_bas, Circularite_P4_bas_IT, P5, P5_Nominal + P5_ITsup, P5_Nominal, P5_Nominal + P5_ITinf, P6, P6_Nominal + P6_ITsup, P6_Nominal, P6_Nominal + P6_ITinf, P7, P7_Nominal + P7_ITsup, P7_Nominal, P7_Nominal + P7_ITinf, P8, P8_Nominal + P8_ITsup, P8_Nominal, P8_Nominal + P8_ITinf, P9_haut, P9_haut_Nominal + P9_haut_ITsup, P9_haut_Nominal, P9_haut_Nominal + P9_haut_ITinf, Circularite_P9_haut, Circularite_P9_haut_IT, y_P9_haut, y_P9_haut_Nominal + y_P9_haut_ITsup, y_P9_haut_Nominal, y_P9_haut_Nominal + y_P9_haut_ITinf, z_P9_haut, z_P9_haut_Nominal + z_P9_haut_ITsup, z_P9_haut_Nominal, z_P9_haut_Nominal + z_P9_haut_ITinf, "", P9_bas, P9_bas_Nominal + P9_bas_ITsup, P9_bas_Nominal, P9_bas_Nominal + P9_bas_ITinf, Circularite_P9_bas, Circularite_P9_bas_IT, y_P9_bas, y_P9_bas_Nominal + y_P9_bas_ITsup, y_P9_bas_Nominal, y_P9_bas_Nominal + y_P9_bas_ITinf, z_P9_bas, z_P9_bas_Nominal + z_P9_bas_ITsup, z_P9_bas_Nominal, z_P9_bas_Nominal + z_P9_bas_ITinf, "", P38, P38_IT, P41, P41_IT, P49_parallelisme_voile_bas, P49_parallelisme_voile_bas_IT, P49_planeite_voile_bas, P49_planeite_voile_bas_IT, P50_parallelisme_voile_haut, P50_parallelisme_voile_haut_IT, P50_planeite_voile_haut, P50_planeite_voile_haut_IT, Planeite_voile_haut, Planeite_voile_haut_IT)
 

job75

XLDnaute Barbatruc
Re : Récupérer le nom d'une variable dans un tableau type Array

Re,

Toutes mes félicitations, je vois que vous êtes un adepte de l'usine à gaz :(

Il y a forcément des solutions bien plus simples, revoyez votre copie.

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupérer le nom d'une variable dans un tableau type Array

Bonjour Michael_B,

Ne prenons pas la mouche! Il faut bien avouer qu'un tableau de 200 éléments et qui de plus représentent des noms de variables est peu commun.
Je ne vois pas comment récupérer le contenu de la variable uniquement à partir de son nom présent dans l'array.
Le forum permet de joindre des fichiers. Vous pouvez utiliser cette possibilité pour joindre un fichier exemple avec les explications qui vont bien et les macros (même si elles ne donnent pas le résultat attendu). Vous multiplierez vos chances de réponse. Et comme le propose Job75 (que je salue) il faudra peut-être envisager une autre manière de faire que l'array de variables.
On voit des noms de variables avec le signe +; ceci semble indiquer que ce n'est pas un nom de variable (VBA n'accepte pas de signe + dans les noms de variables)
Ce sont peut-être des paramètres ou caractéristiques de quelque chose. De plus amples explications seraient utiles.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Récupérer le nom d'une variable dans un tableau type Array

Re, salut mapomme :)

Merci pour cette réponse constructive qui va me permettre d'avancer...

Elle est en constructive.

Faire une macro avec plus de 200 variables, tout le monde sait (même les débutants) que c'est une hérésie pure et simple.

Cela dit je vais regarder (sans garantie) comment on peut faire pour utiliser le texte de cet énorme tableau.

PS pour mapomme : les signes + font je pense la somme de 2 variables...

A+
 

job75

XLDnaute Barbatruc
Re : Récupérer le nom d'une variable dans un tableau type Array

Re,

Bon, j'ai essayé le code de votre post #3 qui définit l'Array.

Pas moyen de le compiler... Mais ça c'est à vous de voir.

Alors j'ai copié le code du post #3 et l'ai collé sur la cellule A1 de la feuille active.

Ensuite j'ai exécuté ce code :

Code:
Sub ListeIndex()
Dim txt$, s, i%
txt = [A1]
s = Split(txt, ",")
For i = 0 To UBound(s)
  If InStr(s(i), "IT") Then s(i) = i Else s(i) = " "
Next
txt = Application.Trim(Join(s)) 'séparateur=espace
[A2] = Replace(txt, " ", ",") 'séparateur=virgule
End Sub
J'ai donc obtenu en A2 la liste des index des arguments contenant "IT".

Liste à utiliser dans votre macro avec ce code :

Code:
Dim x
'---
x = Array(1, 3, 5, 7, 9, 11, 13, 16, 18, 20, 22, 24, 26, 28, 31, 33, 35, 37, 39, 41, 43, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 67, 69, 71, 73, 76, 78, 80, 82, 84, 86, 88, 91, 93, 95, 97, 99, 101, 103, 106, 108, 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 131, 133, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 173, 175, 177, 179, 181, 183, 185, 188, 190, 192, 194, 196, 198, 200)

If IsNumeric(Application.Match(ligne - Ligne_debut, x, 0)) Then
'---
End If
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Récupérer le nom d'une variable dans un tableau type Array

Re,

Pour _Nominal seul, toujours avec le texte du code en A1, on lance :

Code:
Sub ListeIndex()
Dim txt$, s, i%
txt = [A1]
s = Split(txt, ",")
For i = 0 To UBound(s)
  If s(i) Like "*_Nominal" Then s(i) = i Else s(i) = " "
Next
txt = Application.Trim(Join(s)) 'séparateur=espace
[A2] = Replace(txt, " ", ",") 'séparateur=virgule
End Sub
Et ensuite dans votre macro :

Code:
x = Array(2, 8, 12, 17, 23, 27, 32, 38, 42, 47, 53, 57, 62, 68, 72, 77, 83, 87, 92, 98, 102, 107, 113, 117, 122, 128, 132, 137, 143, 147, 151, 155, 159, 165, 169, 174, 180, 184)

If IsNumeric(Application.Match(ligne - Ligne_debut, x, 0)) Then
'---
End If
A+
 

job75

XLDnaute Barbatruc
Re : Récupérer le nom d'une variable dans un tableau type Array

Bonjour le fil, le forum,

Bon, j'ai essayé le code de votre post #3 qui définit l'Array.

Pas moyen de le compiler... Mais ça c'est à vous de voir.

Il ne se compilait ni sur Excel 2003 ni sur Excel 2010.

Je suis parvenu à le compiler en ajoutant (par macro) un retour ligne toutes les 9 virgules.

Voir le fichier joint avec les macros dans Module1.

Cela ne change évidemment rien aux solutions des posts #8 et #9.

A+
 

Pièces jointes

  • Pour compiler Array(1).xls
    69 KB · Affichages: 52

Michael_B

XLDnaute Nouveau
Re : Récupérer le nom d'une variable dans un tableau type Array

Merci de ces réponses.

Pour info, et afin de comprendre l'ensemble de mon problème (maintenant résolu, en partie) voici ma macro en entière (qui peut certainement être simplifiée) ainsi qu'un fichier a traiter...:
 

Pièces jointes

  • Suivi Piston V4-4Emp.zip
    225.4 KB · Affichages: 32

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan