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

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    3. 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
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      algorithme de gauss seidel inclus dans excel et schéma numérique explicite de l'équation de la chaleur

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

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

    Cordialement.
    0
    1. 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