Reconnaitre une variable lors de la lecture d'une chaine

Bonjour à tous,

J'aurais besoin de votre aide pour un bout de code de la macro que je suis en train de faire.

Je cherche à ce que la macro arrive à lire une chaine de caractère dans une cellule comme étant une variable prédéfinie portant le même nom et de l'incrémenter.

Exemple si elle lit une cellule sélectionnée où est écrit var1, elle incrémente la varible var1 (préfédinie as bytes)

La seule façon que j'ai trouvée pour faire ça est un :

if selection.value = "var1" then var1 = var1 + 1

Mais sachant que la macro va faire une centaine de lectures de cellule et qu'il y a 6 variables possibles ça me parait assez lourd comme code.

N'y aurait-il pas une fonction qui me permettrait de faire un truc du genre :

fonction(selection.value) = fonction(selection.value) + 1

qui équivaudrait à (dans le cas où var1 est dans la cellule selectionnée) :

var1 = var1 + 1

et non à :

"var1" = "var1" + 1

En vous remerciant par avance pour le temps passé à résoudre mon problème.

Butters

Bonjour

Solution possible: Definir un Array contenant les valeurs des variables 1 a 6

Dim Mes_variables(1 To 6) As Integer

Puis pour chaque case on isole le numero et on incremente la valeur correspondante de l'array

num = Int(Replace(Selection.Value, "var", ""))
'extrait le numero de variable eg 2 dans var2
 Mes_variables(num) = Mes_variables(num) + 1

Salut Butters,

une piste avec Evaluate()

J'ai écris 'iFlag' dans une cellule puis ai essayé ceci avec succès!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim iFlag As Integer
iFlag = 3
If Target.Value = "iFlag" Then Target.Offset(0, 2).Value = Evaluate(iFlag + 1)
'
End Sub

A+

Merci de ta réponse Percolator, je n'ai jamais utilisé les tableaux mais ça m'a l'air de correspondre à ce que je souhaite. en revanche mes variables ne s'appellent pas var1, var2, ... mais sont des mots qui n'ont rien à voir. heureusement la plage de cellules n'est utilisée que par cette macro (elle est invisible pour l'utilisateur) et je peux donc traduire les mots par des codes 1, 2, 3 etc ce qui simplifie encore plus ton code:

Dim Mes_variables(1 to 6) as integer
'puis dans ma boucle qui selectionne les dites cellules qui sont remplies par un code de 1 à 6
 Mes_variables(selection.value) = Mes_variables(selection.value) + 1

Merci également curulis57, je ne connais pas trop target mais j'ai l'impression que ça oblige quand même à faire un "if ... then ..." pour chacune des possibilités de variables non?

Salut Butters,

le IF est presque l'essence même d'un logiciel!

Si tu as des quantités de variables cachées dans ta feuille, il faut bien que le code les compare avec celle recherchée!

Précise ta recherche avec un fichier si tu veux autre chose!

A+

Oui curulis57, je sais bien que le if est important, et crois-moi dans le reste de ma macro il y en a quantité.

La solution que j'avais trouvée était de mettre par exemple :

dim truc as byte, machin as byte, bidule as byte
if selection.value = "machin" then
  machin = machin +1
elseif selection.value = "truc" then
  truc = truc + 1
elseif selection.value = "bidule" then
  bidule = bidule + 1

Mais je trouvais ça pas très efficace de tester à chaque fois toutes les variables pour trouver la bonne. J'ai pas l'impression que ta proposition change la donne de ce point de vue (je me trompe peut être).

Mon code va faire ça environ 200 fois avec 6 variables (au lieu de 3 dans l'exemple ci dessus) avec à chaque fois quelques calculs préliminaires pour trouver la bonne cellule (avec des if notamment). Je voulais donc alléger mon code pour la partie lecture de la cellule et reconnaissance de la variable.

Et sur la base de la proposition de Percolator j'ai un truc qui fait le taf en 1 ligne (cf. mon post précédent). J'ai d'ailleurs testé le code sur une quarantaine de cellule et comparé à la fonction excel nb.si(plage;condition) et ça marche nickel !

Merci à vous deux

Rechercher des sujets similaires à "reconnaitre variable lors lecture chaine"