Vba : tableau vers Range sans boucle "For ... next"
Résolu
ClaudeDordogne
Messages postés
47
Statut
Membre
-
claudedordogne -
claudedordogne -
Bonjour,
je désire transférer un tableau numérique vers un plage de cellules excel
exemple
comment obtenir
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é
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)
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
-
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 -
Re,
pour le resize, il faut tenir compte aussi des dimensions du tableau: tableau simple extabl(4)
tableau deux dimensions exReDim 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 -
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
-
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 rajouterDim 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-
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+- 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
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
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 -
Re,
ceci doit le faire, si meme colonne pas de nombre pour les colonnes
With activesheet .Range("C3").Resize(UBound(Tab)) = Tab End With-
-
-
-
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 -
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
-
-
MERCI
Vous êtes SUPER!
en plus j'ai appris que on pouvait mettrenext y,x
à la place denext y next x