VBA écriture variable tableau

Résolu
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour le forum,


Une petite question à laquelle je n'ai pas encore trouvé la réponse, même si mon code fonctionne désormais :

Pourquoi dois-je utiliser la fonction WorksheetFunction.Transpose pour écrire convenablement ma variable tableau dans une feuille ?

Je m'explique. Avec le code suivant, j'obtiens seulement la première valeur du tableau collée dans toutes les cellules de la plage :
Sheets(1).Range("A1:A10") = Tableau

Avec celui-ci c'est le tableau complet (résultat souhaité) :
Sheets(1).Range("A1:A10") = Application.WorksheetFunction.Transpose(Tableau)


Quelqu'un aurait-il une idée ?
Merci d'avance !
ed



A voir également:

2 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour



Tout dépend comment tu as rentré les valeurs dans ton tableau
par ex=
Tablo=range(A1"A10").value
te renvoie une variable tableau à 2 dimensions (10,1)
nota: par cette instruction, on a toujours des tableaux base 1

si tu emploie=
Tablo=application.transpose(range(A1"A10").value)
tablo est alors de dimension 10 + pratique à manipuler dans la plupart des cas cas
en mémoire les lignes du tablo alors - à cause du transpose- "sont rangées " horizontalement"

donc pour retrouver ta disposition verticale, il faut réécrire par ex
range("D10").resize(ubound(tablo),1)=application.transpose(tablo)

maintenant si tu as un tablo à 2 dimensions par ex
Tablo=range(A1"A10").value
tu as pas besoin de transpose
Range("D10").Resize(UBound(tablo), 1) = tablo

transpose serait utilisé si on voulait "tourner" le tableau à 90°
Range("D10").Resize(1,UBound(tablo)1) = application.transpose(tablo )


PS: la déclaration n'a rien à voir dans ce cas :-)
Michel
1
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour michel_m,

Merci pour ta réponse, si j'ai bien compris VBA range par défaut les valeurs du tableau dans une ligne et plusieurs colonnes ? (cas de la dimension 1)

Pour alimenter les valeurs de mon tableau de 10 valeurs (dans l'exemple - plus de 8500 en réalité) j'ai utilisé une boucle avec lecture dans feuille excel :

For i = 1 to n
Application.Calculate ' itérations pour faire converger mon système
Tableau(i) = Sheets(1).Range("A1").Value ' je récupère la valeur qui m'intéresse
Next

Mon fichier calcule en ce moment, j'essaierai ton code dès que ce sera fini :-)

Merci encore !
ed
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour
VBA range par défaut les valeurs du tableau dans une ligne et plusieurs colonnes ? (cas de la dimension 1)

Non, c'est le "transpose" qui fait tourner de 90°, par défaut le rangement est vertical: 10 lignes 1 colonne

Pour alimenter ton tableau tu n'as pas besoin de boucler; je t'ai passer la syntaxe:
rappel
Tablo=application.transpose(range(A1"A8500").value) 

conseil: fais des essais sur une maquette pour te pénétrer du pourquoi du comment :o)

application.calculate ne me parait pas indispensable

tuto sur les variables tableaux
https://silkyroad.developpez.com/vba/tableaux/
0
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Michel,

En fait si : j'ai effectivement besoin de boucler pour alimenter mon tableau car il s'agit d'une simulation en conduction instationnaire (algorithme de gauss seidel inclus dans excel et schéma numérique explicite de l'équation de la chaleur). à intervalles de temps donnés je récupère des données, et comme l'intervalle est défini par mon pas de temps qui est constitué par le nombre d'itérations, c'est absolument indispensable.

mais bref, en alimentant le tableau ainsi, je me retrouve avec un vecteur ligne, et non pas avec un vecteur colonne, ce que m'ont confirmé les essais réalisés.

cordialement,
ed
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
algorithme de gauss seidel inclus dans excel et schéma numérique explicite de l'équation de la chaleur

hé bé!
0
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
bah, ce ne sont que des références circulaires :-)
0
chossette9 Messages postés 4239 Date d'inscription   Statut Contributeur Dernière intervention   1 311
 
Bonjour,

comment as-tu déclaré ta variable tableau dans ton code ?

Cordialement.
0
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour chossette9,

Merci pour ta réponse. J'ai tenté différentes déclaration, notamment:

dim Tableau() as Variant
dim Tableau(1 To 10) as Integer

Cdt
0