VBA écriture variable tableau

Résolu/Fermé
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018 - 16 nov. 2011 à 15:07
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018 - 17 nov. 2011 à 10:54
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



2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 16/11/2011 à 17:59
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 vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018
17 nov. 2011 à 00:48
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 17/11/2011 à 07:31
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 vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018
17 nov. 2011 à 07:45
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
17 nov. 2011 à 07:51
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 vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018
17 nov. 2011 à 10:54
bah, ce ne sont que des références circulaires :-)
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
16 nov. 2011 à 15:08
Bonjour,

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

Cordialement.
0
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018
17 nov. 2011 à 00:41
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