conversion d'un string en nom de variable

  • Initiateur de la discussion Initiateur de la discussion arnoetsoph
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 😛

Merci d'avance de votre aide!
 
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
@+
 
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:
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

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 😛)

Merci!
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
800
Réponses
1
Affichages
418
Réponses
3
Affichages
773
Retour