conversion d'un string en nom de variable

arnoetsoph

XLDnaute Nouveau
Bonjour à tous,

Tout d'abord je voudrais remercier les administrateurs et modo de ce site qui est une mine d'information et qui me permet de doucement m'initier à Excel un peu plus en profondeur que =B2+1...

Voici donc ma question, j'espère que cela n'a pas été abordé précédemment:

J'ai dans une feuille excel un tableau que je parcours dans mon code vba. Le but de ma macro est de remplir une colonne de la feuille. Voici un peu le détail:

Code:
var1 = "bonjour"
var2 = "hello"
var3 = "salut"

quand je parcours mon tableau, je recois en entrée les chiffres 1, 2 ou 3
Code:
for inc = 1 To 10
   value = cell(inc,1)  %c'est ici que je recois 1, 2 ou 3
   name = "var" & value
   ???=> cell(inc,2) = name ???
Next inc

et c'està hauteur des ??? que ça se complique (j'ai volontairement simplifié mon code, mais le concept y est)
La valeur dans ma 2ème colonne est alors soit "var1", soit "var2", soit "var3", mais jamais ce que je veux soit "bonjour", "hello" ou "salut".

Donc, comment faut-il faire (si c'est possible) pour convertir un string (name) en un nom de variable pour aller rechercher la valeur de la dite variable.

j'ai essayé beaucoup d'annerie comme variable(name) ou getVariable(name) mais rien n'existe évidemment et à ce rythme j'ai pas fini :p

Merci d'avance de votre aide!
 

Pierrot93

XLDnaute Barbatruc
Re : conversion d'un string en nom de variable

Bonjour arnoetsoph, et bienvenue parmi nous

avec ce que j'ai compris du problème, je coderais peut être ainsi :

Code:
Sub test()
Dim inc As Byte
For inc = 1 To 10
    Cells(inc, 2) = Switch(Cells(inc, 1) = 1, "bonjour", Cells(inc, 1) = 2, _
        "hello", Cells(inc, 1) = 3, "salut")
Next inc
End Sub

bonne fin d'après midi
@+
 

ROGER2327

XLDnaute Barbatruc
Re : conversion d'un string en nom de variable

Bonsoir
Faute d'un classeur support, on improvise :
  1. Une fonction personnalisée :
    Code:
    Function fMessage(n) As String
    Dim oMess()
       oMess = Array("", "bonjour", "hello", "salut")
       fMessage = oMess(n * (n > 0) * (n < 4))
    End Function
  2. Une procédure :
    Code:
    Sub pMessage()
    Dim oMess(), rDat As Range, oCel As Range
       oMess = Array("", "bonjour", "hello", "salut")
       If Cells(Rows.Count, 1).End(xlUp).Row > 1 Then
       Set rDat = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1, 1).Offset(1, 0)
          For Each oCel In rDat.Cells
             oCel.Offset(0, 1).Value = oMess(oCel.Value * (oCel.Value > 0) * (oCel.Value < 4))
          Next oCel
       End If
    End Sub
    qui prend le paramètre dans la colonne A (à partir de A2 pour laisser la ligne 1 aux titres) et renvoie la réponse dans la colonne B. Pour renvoyer la réponse dans la Nième colonne, modifier le paramètre oCel.Offset(0, 1) en remplaçant 1 par N - 1.
Bonne nuit !
ROGER2327
 
Dernière édition:

arnoetsoph

XLDnaute Nouveau
Re : conversion d'un string en nom de variable

Merci beaucoup de vos réponses!

Et comme souvent, je pense qu'un petit exemple vaut mieux qu'un long discours. En fait, j'ai peut-être un peu trop simplifié le problème et y mettant des chiffres; donc voici un exemple, toujours simplifié, mais plus concret de ce que je veux faire à l'aide de ma macro.

Dans la 1ere colonne, j'ai des zones du corps ayant subi une douleur et dans la 2ème colonne j'ai la date de l'accident par exemple. ma macro doit reclasser les dates dans les colonnes H,I,J et K en fonction de la zone.

Dans ma macro (classement), je parcours donc la colonne 1, récupère la valeur et j'aimerai bien que le remplissage se fasse :) et il faut évidemment que ce soit dynamique car je ne connais pas à l'avance les éléments de la colonne 1!

Encore une fois, merci d'avance de votre aide!
 

Pièces jointes

  • Classeur1.xls
    32 KB · Affichages: 94
  • Classeur1.xls
    32 KB · Affichages: 95
  • Classeur1.xls
    32 KB · Affichages: 91

arnoetsoph

XLDnaute Nouveau
Re : conversion d'un string en nom de variable

Et tant qu'on y est, on peut imaginer faire l'inverse:

si un élément de la colonne 1 n'est pas encore défini en tant que "..._col" (disons par exemple qu'il y a "hand" en plus) est-il possible de créer la variable hand_col? quelque chose comme createVariable("hand_col")=13 ? (faut pas rire meme si c'est farfelus comme proposition :p)

Merci!
 

eriiic

XLDnaute Barbatruc
Re : conversion d'un string en nom de variable

Bonjour,

et qcq chose comme ça ?

Code:
' a mettre 1 fois et à mettre à jour en cas d'évolution de la liste
Dim liste1()
dercol = [IV1].End(xlToLeft).Column
liste1 = [H1].Resize(1, dercol - 8 + 1).Value

' dans la boucle de parcours de A
For i = 1 To UBound(liste1)
    If pos_pain = liste1(1, i) Then Exit For
Next i
' i+7 est le n° de ta colonne
' si i> ubound(liste1) => erreur de saisie ou nouvel élément

eric
 

Discussions similaires

Statistiques des forums

Discussions
313 090
Messages
2 095 176
Membres
106 200
dernier inscrit
OCNAM