Discussion:
toujours mes tableaux!!!
(trop ancien pour répondre)
R M
2004-10-27 09:48:33 UTC
Permalink
Bjr
Je suis coince avec la declaration de mes tableaux...

je declare un tableau comme suit et je travaille ainsi

dim tableau
dim i, j as integer

tableau = range("a1:e5").value
for i = 1 to 5
for j = 1 to 5
tableau (i,j)= ce que je veux, un entier quelconque par exemple ou
une date...
next
next

mais je suis obligé de bloquer des cellules de a1 à e5, en clair je dois d
abord connaitre la taille de mon tableau pour lui assigner des cellules...

comment puis je faire pour travailler sur un tableau "virtuel" et ensuite
copier les veleurs de mon tableau dans une cellule?

dim tableau avec 2 dimensions (dois je les nommer ici?) dont je ne connais
pas encore les limites!!!
Shewy80
2004-10-27 10:00:04 UTC
Permalink
voilà la copie de l'aide VBA concernant la déclaration de tableaux
En VBA c "Array"
N'oubli pas dans le général déclaration de mettre :
Option explicit (oblige la déclaration des variables)
et
Option base 1 (si tu veux que ton tableau commence par 1)

ça t'évitera bien des soucis par la suite...
---------------------------------------------------------------------
Les tableaux se déclarent de la même façon que d'autres variables avec des
instructions Dim, Static, Private ou Public. Contrairement aux variables
scalaires (celles qui ne sont pas de tableaux), les variables tableau
imposent généralement la spécification de leurs dimensions. Un tableau dont
la taille est spécifiée est un tableau à taille fixe. Un tableau dont la
taille peut être modifiée pendant l'exécution d'un programme est un tableau
dynamique.

L'index d'un tableau peut commencer de 0 ou de 1 en fonction de la
définition de l'instruction Option Base. Si Option Base 1 n'est pas
spécifiée, tous les index de tableau commencent à zéro.

Déclaration d'un tableau fixe
Dans la ligne de code suivante, un tableau à taille fixe est déclaré comme
un tableau de type Integer comportant 11 lignes et 11 colonnes :

Dim MyArray(10, 10) As Integer
Le premier argument représente les lignes, le second les colonnes.

[......]

Déclaration d'un tableau dynamique
En déclarant un tableau dynamique vous pouvez dimensionner le tableau
pendant l'exécution du code. Utilisez une instruction Static, Dim, Private
ou Public pour déclarer un tableau, en laissant les parenthèses vides, comme
le montre l'exemple suivant.

Dim sngArray() As Single
Note Vous pouvez utiliser l'instruction ReDim pour déclarer un tableau
implicitement avec une procédure. Veillez à ne pas faire de faute de frappe
dans le nom du tableau lors de l'utilisation de l'instruction ReDim. Même si
l'instruction Option Explicit est incluse dans le module, une faute de
frappe créerait un deuxième tableau.

Dans une procédure incluse dans la portée du tableau, utilisez l'instruction
ReDim pour changer le nombre de dimensions, pour définir le nombre
d'éléments et pour établir les limites supérieures et inférieures de chaque
dimension. Vous pouvez utiliser l'instruction ReDim pour modifier le tableau
dynamique aussi souvent que nécessaire. Cependant, chaque fois que vous le
faites, les valeurs existantes du tableau sont perdues. Utilisez ReDim
Preserve pour étendre un tableau tout en conservant ses valeurs existantes.
Par exemple, l'instruction suivante agrandit le tableau varArray de 10
éléments sans perdre les valeurs en cours des éléments d'origine.

ReDim Preserve varArray(UBound(varArray) + 10)
Note Lorsque vous utilisez le mot clé Preserve avec un tableau dynamique,
vous pouvez uniquement modifier la limite supérieure de la dernière
dimension, et non le nombre de dimensions.



Bon courage à toi !
Post by R M
Bjr
Je suis coince avec la declaration de mes tableaux...
je declare un tableau comme suit et je travaille ainsi
dim tableau
dim i, j as integer
tableau = range("a1:e5").value
for i = 1 to 5
for j = 1 to 5
tableau (i,j)= ce que je veux, un entier quelconque par exemple ou
une date...
next
next
mais je suis obligé de bloquer des cellules de a1 à e5, en clair je dois d
abord connaitre la taille de mon tableau pour lui assigner des cellules...
comment puis je faire pour travailler sur un tableau "virtuel" et ensuite
copier les veleurs de mon tableau dans une cellule?
dim tableau avec 2 dimensions (dois je les nommer ici?) dont je ne connais
pas encore les limites!!!
Christian.L
2004-10-27 10:22:49 UTC
Permalink
Bonjour

Pour utiliser un tableau, il faut le déclarer d'abord (voir la réponse
précédente)
Pour utiliser un tableau dynamique, il faut le déclarer sans dimensions

Dim MonTableau()

et ensuite le redimensionner au fur et a mesure de tes besoins suivant
l'aide VBA reproduite ci dessous

Bon courage

C.L.



ReDim, instruction


Instruction utilisée au niveau procédure pour réattribuer de l'espace de
stockage aux variables de tableaux dynamiques.

Syntaxe

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As
type]] . . .

La syntaxe de l'instruction ReDim comprend les éléments suivants :

Élément Description
Preserve Facultatif. Mot clé utilisé pour conserver les données d'un
tableau préexistant dont vous modifiez la taille de la dernière dimension.
varname Nom de la variable. Respecte les conventions standard
d'affectation de noms aux variables.
subscripts Dimensions d'une variable tableau. Vous pouvez déclarer
jusqu'à 60 dimensions. La syntaxe de l'argument subscripts est la suivante :
[lower To] upper [,[lower To] upper] . . .

La limite inférieure d'un tableau qui n'est pas explicitement fixée
dans l'argument lower est déterminée par l'instruction Option Base. Cette
limite a la valeur zéro en l'absence d'instruction Option Base.

type Facultatif. Type de données de la variable. Elle peut être de
type Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non
pris en charge actuellement), Date, String (pour les chaînes de longueur
variable), String * length (pour les chaînes de longueur fixe), Object,
Variant, un type défini par l'utilisateur ou un type objet. Utilisez une
clause As type distincte pour chaque variable à définir. Pour une variable
de type Variant contenant un tableau, l'argument type décrit le type des
éléments du tableau, mais ne permet pas de passer du type Variant à un
autre.



Remarques

L'instruction ReDim permet de dimensionner et de redimensionner un tableau d
ynamique ayant déjà été déclaré de manière formelle par le biais d'une
instruction Private, Public ou Dim suivie de parenthèses vides (sans indices
de dimension).
Post by R M
Bjr
Je suis coince avec la declaration de mes tableaux...
je declare un tableau comme suit et je travaille ainsi
dim tableau
dim i, j as integer
tableau = range("a1:e5").value
for i = 1 to 5
for j = 1 to 5
tableau (i,j)= ce que je veux, un entier quelconque par exemple ou
une date...
next
next
mais je suis obligé de bloquer des cellules de a1 à e5, en clair je dois d
abord connaitre la taille de mon tableau pour lui assigner des cellules...
comment puis je faire pour travailler sur un tableau "virtuel" et ensuite
copier les veleurs de mon tableau dans une cellule?
dim tableau avec 2 dimensions (dois je les nommer ici?) dont je ne connais
pas encore les limites!!!
R M
2004-10-27 11:38:21 UTC
Permalink
Merci à vous,
me voilà bordé en lecture..
Je n'hésiterai pas à vous solliciter si ma compréhension du texte est aussi
bonne que ma connaissance d excel! :)
Post by Christian.L
Bonjour
Pour utiliser un tableau, il faut le déclarer d'abord (voir la réponse
précédente)
Pour utiliser un tableau dynamique, il faut le déclarer sans dimensions
Dim MonTableau()
et ensuite le redimensionner au fur et a mesure de tes besoins suivant
l'aide VBA reproduite ci dessous
Bon courage
C.L.
ReDim, instruction
Instruction utilisée au niveau procédure pour réattribuer de l'espace de
stockage aux variables de tableaux dynamiques.
Syntaxe
ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As
type]] . . .
Élément Description
Preserve Facultatif. Mot clé utilisé pour conserver les données d'un
tableau préexistant dont vous modifiez la taille de la dernière dimension.
varname Nom de la variable. Respecte les conventions standard
d'affectation de noms aux variables.
subscripts Dimensions d'une variable tableau. Vous pouvez déclarer
[lower To] upper [,[lower To] upper] . . .
La limite inférieure d'un tableau qui n'est pas explicitement fixée
dans l'argument lower est déterminée par l'instruction Option Base. Cette
limite a la valeur zéro en l'absence d'instruction Option Base.
type Facultatif. Type de données de la variable. Elle peut être de
type Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non
pris en charge actuellement), Date, String (pour les chaînes de longueur
variable), String * length (pour les chaînes de longueur fixe), Object,
Variant, un type défini par l'utilisateur ou un type objet. Utilisez une
clause As type distincte pour chaque variable à définir. Pour une variable
de type Variant contenant un tableau, l'argument type décrit le type des
éléments du tableau, mais ne permet pas de passer du type Variant à un
autre.
Remarques
L'instruction ReDim permet de dimensionner et de redimensionner un tableau d
ynamique ayant déjà été déclaré de manière formelle par le biais d'une
instruction Private, Public ou Dim suivie de parenthèses vides (sans indices
de dimension).
Post by R M
Bjr
Je suis coince avec la declaration de mes tableaux...
je declare un tableau comme suit et je travaille ainsi
dim tableau
dim i, j as integer
tableau = range("a1:e5").value
for i = 1 to 5
for j = 1 to 5
tableau (i,j)= ce que je veux, un entier quelconque par exemple ou
une date...
next
next
mais je suis obligé de bloquer des cellules de a1 à e5, en clair je dois d
abord connaitre la taille de mon tableau pour lui assigner des cellules...
comment puis je faire pour travailler sur un tableau "virtuel" et ensuite
copier les veleurs de mon tableau dans une cellule?
dim tableau avec 2 dimensions (dois je les nommer ici?) dont je ne connais
pas encore les limites!!!
PMO
2004-10-27 13:31:06 UTC
Permalink
Bonjour,

Ci-dessous quelques exemples de code qui devraient vous aider.

'*****************************
Option Explicit
'_____________________________________
Sub TableauDynamique()
Dim T() As Integer 'ou Variant, ou Long etc ...
'Tableau dynamique avec une seule dimension
'pas de problème
ReDim T(1 To 15)
ReDim Preserve T(1 To 500)
'Mais si vous utiliser un tableau dynamique et qu'il
'est appelé à être multi-dimensionné, seule la
'dernière dimension pourra être dimensionnée
ReDim T(1 To 3, 1 To 5)
ReDim Preserve T(1 To 3, 1 To 10)
ReDim Preserve T(1 To 15, 1 To 10) 'ça plante
End Sub
'_____________________________________
Sub ImportPlageInVariant()
'### Utiliser un variant qui simule un tableau VB ###
Dim var As Variant
Dim i&
Dim j&
If [a1] = "" Then MsgBox _
"Entrez d'abord des données en a1:e5 dans la feuille active."
'---- Récupère les données d'une plage d'un seul coup ----
var = Range("a1:e5")
'---- Enumère les données ----
For i& = 1 To UBound(var, 1) 'les lignes
For j& = 1 To UBound(var, 2) 'les colonnes
Debug.Print var(i&, j&) 'à modifier selon usage
Next j&
Next i&
End Sub
'_____________________________________
Sub ExportTableauVBInPlage()
Dim i&
Dim j&
'Nécessité d'un tableau bidimensionné pour
'tout exporter dans une plage Excel
'---- Pour une seule colonne et 10 lignes ---
Dim T1(1 To 10, 1 To 1) As Variant
For i& = 1 To 10
T1(i&, 1) = 2 ^ i&
Next i&
'---- Pour 5 lignes et 3 colonnes ----
Dim Tmulti(1 To 5, 1 To 3) As Variant
For i& = 1 To 5
For j& = 1 To 3
'---- Remplit le tableau avec n'importe quoi ---
If j& = 1 Then Tmulti(i&, j&) = Now + i&
If j& = 2 Then Tmulti(i&, j&) = j& ^ i&
If j& = 3 Then Tmulti(i&, j&) = Chr(65 + i&)
Next j&
Next i&
'---- Inscription dans une nouvelle feuille ----
Dim S As Worksheet
Set S = Sheets.Add
'---- 1er tableau en a1:a10 ----
S.Range(Cells(1, 1), _
Cells(UBound(T1, 1), UBound(T1, 2))) = T1
'---- 2ème tableau en c10:e15 ----
S.Range(Cells(10, 3), Cells(10 - 1 + UBound(Tmulti, 1), _
3 - 1 + UBound(Tmulti, 2))) = Tmulti
S.Columns.AutoFit
End Sub
'*****************************

En espérant que ça vous serve.
Cordialement

PMO
Patrick Morange
Post by R M
Bjr
Je suis coince avec la declaration de mes tableaux...
je declare un tableau comme suit et je travaille ainsi
dim tableau
dim i, j as integer
tableau = range("a1:e5").value
for i = 1 to 5
for j = 1 to 5
tableau (i,j)= ce que je veux, un entier quelconque par exemple ou
une date...
next
next
mais je suis obligé de bloquer des cellules de a1 à e5, en clair je dois d
abord connaitre la taille de mon tableau pour lui assigner des cellules...
comment puis je faire pour travailler sur un tableau "virtuel" et ensuite
copier les veleurs de mon tableau dans une cellule?
dim tableau avec 2 dimensions (dois je les nommer ici?) dont je ne connais
pas encore les limites!!!
Continuer la lecture sur narkive:
Loading...