J'ai toujours ce même problème de syntaxe...J'ai une liste de CM de 1 à 50...Je voudrais remplir ma feuille avec cette boucle, et j'ai ce problème de syntaxe
ici CM(lig - 57).Value. Comment collè-je CM avec mon compteur lig-57 ?
VB:
For lig = 58 To 107
Cells(lig, 2) = CM(lig - 57).Value
Next lig
Oui, CM1 à CM50 sont des variables, et je veux mettre leur valeur dans les lignes 58 à 108
Cells(lig, 2).Value = "CM" & (lig - 57) met met CM1, CM2....CM58 dans les lignes 58 à 108....
Oups! Là je sèche. Il serait plus simple de passer par un array :
VB:
Sub Essai()
Dim CM()
CM = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9.....) ' Mettre les 50 valeurs de CM1 à CM50.
For lig = 58 To 107
Cells(lig, "B") = CM(lig - 57)
Next lig
End Sub
attention l'array commence à l'indice 0, donc mettre un nombre bidon en premier pour commencer à 1.
Je pense que je me suis mal exprimé car je pense que c'est simple...
J'ai une macro qui calcule 50 variables, de la variable CM1 à la variable CM50.
Ces 50 variables, je veux les mettre dans un tableau à partir de la ligne 58, et la colonne 2 (mais peu importe où).
Je peux faire 50 lignes de code comme ceci :
cells(58,2).value=CM1.value
cells(59,2).value=CM2.value
.....
cells(107,2).value=CM50.value
mais c'est long, c'est pour ça que j'ai pensé à la boucle
For lig = 58 To 107
Cells(lig, 2) = xxxx.Value
Next lig
Mon xxx devant être les lettre CM concanténées avec lig-57 pour que je récupéère CM1 sur ma ligne 58, et ainsi de suite
Je cherche donc à concaténer CM et un numéro de ligne, et que cela soit reconnu comme une de mes variables CM1 à CM50....C'est à dire que CM&lig-57=la variable CM1, et ce que je ne sais pas faire c'est concaténer CM et lig-57 !
Sinon, je me le tape ligne par ligne, mais c'est dommage...
Merci encore !
Si j'ai bien compris. Sous XL ce serait un Indirect mais en VBA je ne connais pas.
Mais si, au lieu de mettre CM1, vous mettez CM(1) alors cela devient un tableau et la formule :
Cells(lig, "B") = CM(lig - 57) marche.
Désolé, même mon ami Google n'a pas trouvé de solution à vous proposer.
Peut être un plus malin que moi vous viendra en aide.
Ou envoyez votre code si c'est possible, on pourra essayer de le modifier.
Voici le code. J'ai mis toto au lieu de CM et j'ai changé les lignes...
VB:
Sub CONCA()
toto1 = 8
toto2 = 14
toto3 = 78
toto4 = 90
For lig = 2 To 6
'
'ne marche pas
Cells(lig, 2).Value = toto(lig - 1).Value
'je veux cell(lig,2).value = toto (2-1) etc....
Next lig
End Sub
J'ai bien compris, mais si je dois me saisir un array avec 50 valeurs, autant me taper 50 lignes de code pour remplir mon tableau sans boucle. Je pensais que c'était simple, j'ai du me tromper...
Au lieu de faire CM1=ax²+bx+c vous écrivez CM(1)=ax²+bx+c
Donc pour vos CM de votre macro vous rajoutez deux parenthèses pour entourer le nombre, donc CM1 devient CM(1).
Pour votre exemple essayez :
VB:
Sub CONCA()
Dim toto(5)
toto(1) = 8
toto(2) = 14
toto(3) = 78
toto(4) = 90
toto(5) = 110
For lig = 2 To 6
Cells(lig, 2) = toto(lig - 1)
Next lig
End Sub
Oui, ça marche...Mais mes variables s'appelle toto1, toto2 et pas toto(1), toto(2), et je les calcule un peu partout dans la macro avant cela...Et j'en ai 50....
accepte qu'on ne peut pas reconstruire un nom de variable en vba ;-)
Un tableau tel qu'indiqué par sylvanu est la solution.
Pour renommer tes variables tu as Ctrl+h (remplacer), à mettre au niveau projet si besoin.
Avec en plus l'avantage de le coller en une fois sur ta feuille au lieu de 57 cells(58,2).value=CM1.value
eric