Utilisation de variable tableau [Résolu]

Signaler
Messages postés
8
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
6 février 2008
-
Messages postés
8
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
6 février 2008
-
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"

Merci par avance de votre aide

Pierre

9 réponses

Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
144
Bonjour

Je pense qu'avec
Application.ScreenUpdating={True|False}
Tu gagnreas pas mal de temps (pas de rafraichissement de l'écran).

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
declare ta variable ainsi
Dim Tabl()
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
de meme
Tabl = Range("A1:A10").Value
doit être écrit
Tabl() = Range("A1:A10").Value
Messages postés
8
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
6 février 2008

merci pile_poil pour ta réponse. Cependant ça ne fonctionne toujours pas bizzarement...

Je te redonne le code complet avec les modifications que tu m'a demandé d'apporter :

Sub Bouttoncalculconso()


Dim Tabl()
Dim i As Integer
Tabl() = Range("A1:A10").Value
For i = 3 To 10
    Tabl(i) = Tabl(i) * 2
Next i
Range("A1:A10").Value = Tabl()
End Sub

L'erreur est identique sur la ligne  Tabl(i) = Tabl(i) * 2
"l'indice n'appartient pas à la sélection"

une idée?
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
Salut,
Oula oula.

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

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
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

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
8
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
6 février 2008

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é.

merci pour votre aide

pierre
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
8
Date d'inscription
lundi 2 juillet 2007
Statut
Membre
Dernière intervention
6 février 2008

je vais privilégier l'emploi de variable simple, style integer ou long plutôt que des variables tableaux un peu trop compliqué à mon goût!

Nhenry-> merci pour ton conseil, je ne connaissais pas et effectivement ça accélère significativement la vitesse d'exécution!
A+

Pierre