Vba : tableau vers Range sans boucle "For ... next"

Résolu
Bonjour,
je désire transférer un tableau numérique vers un plage de cellules excel
exemple
Tab(1)=5
Tab(2)=18
Tab(3)=12
Tab(4)=42

comment obtenir
with activesheet
cells(3,5)=tab(1)
cells(3,6)=tab(2)
cells(3,7)=tab(3)
cells(3,8)=tab(4)
end with

sans utiliser de boucle "for next" ni de liste de commandes itératives(comme ds mon exemple)
ceci car j'ai des dizaines de milliers de données ... et que les boucles "for next" sont très longue...
j'ai essayé
.range("C3:F3")=tab

j'obtient le même nombre dans chaque cellule (ce qui fonctionne si tab serait un "range"...)
ps je suis sous excel 2007
merci d'avance
Claude

EDIT : Ajout des balises de code (jordane)

8 réponses

  1. MERCI
    Vous êtes SUPER!
    en plus j'ai appris que on pouvait mettre
    next y,x

    à la place de
    next y
    next x
    
    1. Re,

      pour le resize, il faut tenir compte aussi des dimensions du tableau: tableau simple ex
      tabl(4)

      tableau deux dimensions ex
      ReDim tabl(NbLignes, NbColonnes)


      Sub tableau_LC()
          Dim tabl() As Double
          
          NbLignes = 24 'exemple, en fait varie à chaque appel de cette Sub
          NbColonnes = 10 'exemple, en fait varie à chaque appel de cette Sub
          ReDim tabl(NbLignes, NbColonnes)
          ' ici on rempli le tableau Tabl
          For x = 0 To 23
              For y = 0 To 9
                  tabl(x, y) = x + 1
          Next y, x
          With ActiveSheet
              .Cells(1, 1).Resize(UBound(tabl, 1), UBound(tabl, 2)).Value = tabl
          End With
      End Sub
      1. Re,

        ceci doit le faire, si meme colonne pas de nombre pour les colonnes

        With activesheet 
           .Range("C3").Resize(UBound(Tab)) = Tab
        End With
        1. bonjour,
          Merci,
          mais cela ne fonctionne pas,
          en effet, rien n'est afficher.
          cordialement
          Claude
        2. Re

          autant pour moi (copier/coller sans modifie le Tab

          With activesheet 
             .Range("C3").Resize(UBound(tabl)) = tabl
          End With
        3. Re,

          aurait ete mieux si j'avais pris le temps de tester

          With ActiveSheet
                  .Range("C3").Resize(UBound(tabl)) = Application.Transpose(tabl)
              End With
        4. @f894009bonsoir
          Super , cela fonctionne
          juste un petit truc:

          Resize(UBound(tabl) ) 

          ne permet d'afficher que 5,18,12 (c'est à dire qu'il manque le dernier élément du tableau)

          en mettant :
          Resize(UBound(tabl) + 1)

          on affiche 5,18,12,42 (c'est à dire tout le tableau, y compris le dernier élément)

          je ne sais pas pourquoi ....

          Dim tabl(4)
          tabl(1) = 5
          tabl(2) = 18
          tabl(3) = 12
          tabl(4) = 42
          With ActiveSheet
          .Range("C3").Resize(UBound(tabl) + 1) = Application.Transpose(tabl)
          End With


          En tout cas Mille Merci
          Très Cordialement
          Claude
        5. @ClaudeDordogneBonjour,
          ce que j'ai ecrit le 13/01/2015 a 11:37, avec petite rectification ensuite sur l'ecriture des cellules

          Dim tabl(4) cela va de tabl(0) a tabl(3) donc 4 elements

          Sub test()
              Dim tabl(4)
          
              tabl(0) = 5
              tabl(1) = 18
              tabl(2) = 12
              tabl(3) = 42
              With ActiveSheet
                  .Range("C3").Resize(, UBound(tabl)) = tabl
              End With
          End Sub


          With ActiveSheet
          .Range("C3").Resize(UBound(tabl)) = Application.Transpose(tabl)
          End With
      2. rebonjour,
        je viens de m'apercevoir que les données sont mises en ligne
        ici en c3, d3, e3...
        en fait, je voudrais les mettre en colonne
        c3 ,c4,c5....

        Merci de votre aide ... si précieuse :))
        Claude
        1. Bonjour Jordane45 et f894009

          Génial, cela fonctionne :)

          juste un point

          Dim tabl(4)
          tabl(4) = 42

          42 (soit tabl(4)) n'apparait pas, on a que les 3 premiers (5,18,12)
          si on met tabl(5) meme si on ne défini pas tabl(5) : on a tout
          le dernier element de tab n'est il pas pris en compte?

          en ce qui concerne la coloration syntaxique, étant donné que c'est ma premiere question sur le forum je ne savais pas que cela existait, maintenant je l'utiliserai.
          on se sent VRAIMENT moins seul... :))
          TRES CORDIALEMENT
          Claude
          1. Bonjour Jordane45

            pour la coloration syntaxique, il n'y a pas le choix VBA lorsque l'on clique la flèche du 4eme bouton, et je n'arrive pas à mettre la coloration syntaxique ici dans :
            Dim tabl(4)
            tabl(4) = 42

            il ne fait que rajouter
            Dim tabl(4)
            tabl(4) = 42


            merci pour ton aide

            de plus, je suis particulièrement agréablement surpris de l'EFFICACITE et de la promptitude des réponses sur ce forum

            encore MERCI
            Claude
            1. Modérateur
              Salut,

              La bonne couleur, pour le VBA, comme pour tous les VB est le choix : basic dans la liste déroulante de coloration syntaxique.

              A+
            2. @pijakuSalut,
              j' essaie à nouveau:
              j'ai fait
              Dim tabl(4)
              tabl(4) = 42
              je choisi "basic" et...
              cela a donné
              Dim tabl(4) 
              tabl(4) = 42 

              et Cela MARCHE!
              l'erreur que j'ai faite était de mettre des espaces avant tabl(4)=42 pour essayer de "tabuler"!
              donc ici je n'ai pas mis d'espace ... et cela fonctionne!
              merci encore, et cela me confirme dans l'efficacité de ce forum!!! :))
              Claude de Dordogne
          2. Bonjour Jordane45 et ClaudeDordogne

            tab ne peut pas etre utililise en variable, mot reserve VBA, VB et autre

            declarer un tableau et pour le resize si meme ligne, pas de nombre a mettre pour ligne

            Sub test()
                Dim tabl(4)
            
                tabl(0) = 5
                tabl(1) = 18
                tabl(2) = 12
                tabl(3) = 42
                With ActiveSheet
                    .Range("C3").Resize(, UBound(tabl)) = tabl
                End With
            End Sub