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 -
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
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:
- Vba variable tableau
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
2 réponses
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
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
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
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
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/
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
hé bé!