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

Résolu
ClaudeDordogne Messages postés 47 Statut Membre -  
 claudedordogne -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Déjà... lorsque tu postes du code sur le forum, merci de penser à utiliser la coloration syntaxique.
    Explications ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

    Quelque chose de ce genre devrait pouvoir fonctionner

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


    0
  4. ClaudeDordogne Messages postés 47 Statut Membre
     
    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
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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+
      0
      1. ClaudeDordogne Messages postés 47 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Salut,
        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
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ClaudeDordogne Messages postés 47 Statut Membre
     
    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
    0
  7. ClaudeDordogne Messages postés 47 Statut Membre
     
    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
    0
  8. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

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

    With activesheet 
       .Range("C3").Resize(UBound(Tab)) = Tab
    End With
    0
    1. ClaudeDordogne Messages postés 47 Statut Membre
       
      bonjour,
      Merci,
      mais cela ne fonctionne pas,
      en effet, rien n'est afficher.
      cordialement
      Claude
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re

      autant pour moi (copier/coller sans modifie le Tab

      With activesheet 
         .Range("C3").Resize(UBound(tabl)) = tabl
      End With
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

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

      With ActiveSheet
              .Range("C3").Resize(UBound(tabl)) = Application.Transpose(tabl)
          End With
      0
    4. ClaudeDordogne Messages postés 47 Statut Membre > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      bonsoir
      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
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > ClaudeDordogne Messages postés 47 Statut Membre
       
      Bonjour,
      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
      0
  9. claudedordogne
     
    MERCI
    Vous êtes SUPER!
    en plus j'ai appris que on pouvait mettre
    next y,x

    à la place de
    next y
    next x
    
    0