Bonjour,
j'ai un petit souci que je n'arrive pas à élucider.
Je voudrais créer une variable dans laquelle j'insère une colonne d'excel composé de valeurs numériques puis faire des opérations sur cette variable.
Pour ce faire, j'ai employé le code suivant
'quand je clique sur le boutton
Sub Bouttoncalculconso()
' déclaration de la variable sans type défnit
Dim Tabl
Dim i As Integer
'j'affecte dans Tabl, les valeurs des cellule de A1 à A10
Tabl = Range("A1:A10").Value
'je voudrais multiplier chaque élément de la variable Tabl par 2
For i = 1 To 10
Tabl(i) = Tabl(i) * 2
Next i
'je remplace dans le tableau les nouvelles valeurs de Tabl
Range("A1:A10").Value = Tabl
End Sub
Souci, j'ai une erreur à la ligne Tabl(i) = Tabl(i) * 2
erreur d'execution 9
"l'indice n'appartient pas à la sélection"
ATTENTION - Dim Tabl() Dim Tabl() as Variant> evitons le variant tant que possible
- Tabl() = Range("A1:A10").Value n'a JAMAIS affecter les valeur de A1 a A10 dans un tableau. ce n'est pas aussi simple
NOTE:
- EXCEL possèdant le type d'objet RANGE (tres utile) autant s'en servir
Sub Bouttoncalculconso()
Dim i As Integer
For i = 3 To 10
Range("A" & CStr(i)).value = 2 * Range("A" & CStr(i)).value
Next i
End Sub , ----
[code.aspx?ID=41455 By Renfield]
Aucun besoin de passer par des tableaux et autre affectattions hasardeuse
Re,
Oups, je tiens a m'excuser pour cette affirmation trop rapide...
- Tabl() = Range("A1:A10").Value n'a JAMAIS affecter les valeur de A1 a A10 dans un tableau. ce n'est pas aussi simple
Je ne sais pas pourquoi mais j'étais persuadé que cela ne marcherais pas.
ENCORE DESOLE
En revanche
Tabl() = Range("A1:A10").Value
Cela donne un tableau à deux dimensions
Soit
Tabl(1,1) = Contenu de A1
Tabl(2,1) = Contenu de A2
...
Tabl(10,1) = Contenu de A10
JE reste néanmoins convancu qu'il vaut mieux utliser autant que possible le type Range
En fait si je souhaitais passer par des tableaux, c'était par souci d'accélérer l'exécution du code. Dans mon cas, je dois traiter un grand nombre de donnée par une série d'opérations.
Pourtant j'ai plutôt l'habitude d'exécuter une boucle qui va exécuter cellule par cellule un certain nombre d'opérations. Je pensais qu'en mettant dans une variable les valeurs de plusieurs cellules améloraient la rapidité.
feuille.Range(feuille.Cells(1, 1), feuille.Cells(UBound(extrtab2, 1) + 1, UBound(extrtab2, 2) + 1)) = extrtab2()
en fait j'ai fait confiance à ma mémoire mais si ça marche parfaitement dans le sens donné en exemple ci dessus je n'ai jamais testé dans l'autre
pour info grace à cette ligne à la place d'une double boucle pour remplis les cellules depuis un tableau de données extraites d'un dessin autocad je suis passé de 45 minutes à 58 secondes pour 30 000 lignes de 25 colonnes