VBA - appeler une variable en concaténant un string et une variable

VBA - appeler une variable en concaténant un string et une variable - VB/VBA/VBS - Programmation

Marsh Posté le 21-04-2009 à 22:59:06    

Hello,
 
Je voudrais rendre le bout le code suivant plus élégant et bute sur la syntaxe à adopter.
 
 
Voici un exemple réduit à sa plus simple expression :
 
1/ L'utilisateur se voit proposé un UserForm
2/ Il remplit des TextBox dont les noms sont var1, var2, ... var50
3/ Je copie ces données dans les cellules A1, A2, ... A50
NB : je n'utilise pas un tableau ; chaque string (ex. : "var1" ) correspond à un TextBox de mon User Form
 
Ce code rudimentaire fonctionne :  

Code :
  1. Range("A1" ).Value = var1
  2. Range("A2" ).Value = var2
  3. ...
  4. Range("A50" ).Value = var50


Seulement voilà, ce n'est pas très classieux :)
Je voudrais donc utiliser une boucle.
 
J'avais pensé à cela :

Code :
  1. Do While i <= 50
  2.         Cells(1, i) = "var" & i
  3.         i = i + 1
  4. Loop


Le problème, c'est que A1 = var1 ; A2 = var 2, etc. Je voudrais, vous l'avez compris, A1 = [valeur stockée dans A1], tout simplement !
 
 
Quelqu'un peut-il m'éclairer sur la syntaxe s'il vous plaît ?
 
Question subsidiaire : la solution 2 sera-t-elle plus rapide à être exécutée ? Comment pourrais-je le déterminer par moi-même ?
(cela pourrait me servir pour d'autres pans de mon code)
 
 
Merci pour votre aide :)
Anthony

Reply

Marsh Posté le 21-04-2009 à 22:59:06   

Reply

Marsh Posté le 22-04-2009 à 10:07:48    

Un solution consisterait à avoir un tableau au lieu d'avoir cinquante variables différentes.
Par exemple :

Dim tb_var(1 to 50) as String
' Remplissage d'un tableau de variables à partir d'un fichier
i = 1
Open "FICHTEST" For Input As #1  
Do While Not EOF(1)
        Get #1, , tb_var(i)
        i = i + 1
Loop
Close #1  
 
' Utilisation du tableau
i = 1
Do While i <= 50
        Cells(1, i) = tb_var(i)
        i = i + 1
Loop

Reply

Marsh Posté le 22-04-2009 à 10:40:53    

Hello olivthill,
 
Merci pour ton aide. Ta solution impliquant de passer par un fichier alors que je récupère mes variables d'un UserForm me pose problème : je zappe l'interface de mon UserForm au profit d'un fichier txt un peu moins convivial.
 
Tu aurais une alternative qui utiliserait un UserForm s'il te plait ?
Sachant qu'un TextBox ne peut pas s'appeler var(1), var(2), mais seulement var1, var2 :/
 
 
Merci,
A.

Reply

Marsh Posté le 22-04-2009 à 12:00:22    

Désolé. Le fichier c'était juste pour un exemple. En fait, je n'avais pas compris que var1, etc. venaient d'un userform.

Reply

Marsh Posté le 23-04-2009 à 00:20:20    

Hello !
 
Un pote m'a mis sur la bonne voie en me conseillant de jeter un œil ici :
http://forum.hardware.fr/hfr/Progr [...] 1690_1.htm
 
Pour mon code, ça donne donc :
 

Code :
  1. Do While i <= 50
  2.         Cells(1, i) = Controls("var" & i).Value
  3.         i = i + 1
  4. Loop


A noter, si mes variables ne venaient pas d'un UserForm, j'aurais utilisé un tableau.
Exemple :

Code :
  1. Private Sub exemple()
  2. Dim i As Integer
  3. Dim var(1 To 3) As String
  4. var(1) = "a"
  5. var(2) = "b"
  6. var(3) = "c"
  7. For i = 1 To 3
  8.     Cells(1, i) = var(i)
  9. Next i
  10. End Sub


 
En espérant que l'un des deux exemples serve à quelqu'un :)
 
 
HTH,
Anthony

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed