coller tableau en memoire sur la feuille

G.David

XLDnaute Impliqué
Bonjour
Est il possible de coller un tableau calculer en VBA sur une feuille de calcul. sans passer par un boucle du type
for to next
mais plutot dans le style copier coller
la raison : le tableau se calcule en 1 seconde mais l'ecrire sur la feuille prends un trentaine de secondes sur un PC à 3.06Ghz et 2giga de ram
Merci
G.David
 

ChTi160

XLDnaute Barbatruc
Salut G.David
Bonjour le Forum
il serait bon que tu donnes un peu plus d'info sur la configuration de ton tableau ,comment il est chargé, à Transposé ???? pas transposé ??? lol
on peut utiliser cette procèdure si ton tableau est chargé sans transposition des colonnes en lignes
Code:
WorkSheets('Feuil1').Range('A2').Resize(Ubound(Tablo,1),Ubound(Tablo,2))=Tablo
sinon l'on doit transposer
Code:
WorkSheets('Feuil1').Range('A2').Resize(Ubound(Tablo,2),Ubound(Tablo,1))=Application.Transpose(Tablo)
a voir
Bonne journée
un petit exemple ,un extrait de quelles lignes ,sans données confidentielles,juste pour voir et comprendre lol , c'est mieux
 

G.David

XLDnaute Impliqué
Salut jean -marie
le tableau est un calcul fait sur un feuille de donnée
Code:
Dim donnee(200)
'
    ChDir 'C:\\david excel\\Jean-pierre'
    Workbooks.OpenText Filename:='C:\\david excel\\Jean-pierre\\hELLA GM Emp 53.PRF' _
        , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
        :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
        False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1)
        If Range('a65536').Value = '' Then
        fin = Range('a65536').End(xlUp).Row - 3
        ElseIf Range('a65536').Value = 'EOF' Then
        fin = 65534
        ElseIf Range('a65536').Value = 'EOR' Then
        fin = 65535
        Else
        fin = 65536
        End If
        pas = Int((fin - 10) / 200)
        plage = Int(pas / 2)
        For t = 11 + plage To fin Step pas
        a = Range('a' & t - plage & ':a' & t + plage)
        For Each cell In a
        u = u + 1
        p = p + cell
        Next
        o = o + 1
        donnee(o) = p / u
        p = 0
        u = 0
        Next
voici son generateur
c'est pour le poser sur la feuille de calcul que ça coince
G.David
 

ChTi160

XLDnaute Barbatruc
re
bon avec la mise en forme du texte en code sur le forum je ne comprends rien au texte rtien d tel qu'un fichier exemple lol
enfin si j'ai compris tu remplies un tableau Donnée(200)qui n'a qu'une colonne sur 200 lignes dans l'exemple
donc si tu veux coller ton tableau dans la feuille 4 par exemple tu mets en fin de procèdure après le next
Worksheets(Feuil4').range('A2').resize(Ubound(Donnée,1),ubound(Donnée,2))=Donnéevoir fichier exemple [file name=essaiTranspose.zip size=6262]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essaiTranspose.zip[/file]
 

Pièces jointes

  • essaiTranspose.zip
    6.1 KB · Affichages: 96

G.David

XLDnaute Impliqué
Bon je crois que si je vois bien ce que je demande je ne dois pas etre clair dans mes explications

le tableau : n'est pas sur un feuillle
je converti un fichier PRF (donnée de profil d'une machine a mesurer) en un fichier XL de ses donnees je retir 200 points qui sont des moyennes par zone du fichier mesures (decoupé en 200 secteurs)
ces moyenne contitue le tableau en memoire
dim donnee(200)
c'est ce tableau que je voudrait coller dans une feuille (pour finir de le triturer)
mais actuellement le collage des donnée(x) je le fait par une boucle
for t= 0 to 200
cells(t+1,10).value=donnee(t)
next
hors si le calcule du tableau prends moins d'une seconde XL mets une secondes pour ecrire 3 cellules
c'est pourquoi je recherche le moyen de coller le tableau en memoire d'un seul bloc sur la feuille comme un copier / coller ( mais sans copier) et je ne sais pas copmment transformer ce tableau memoire en variable
j'espère avoir était plus clair
Merci
G.David
 

G.David

XLDnaute Impliqué
Jean marie
j'avais posée la meme question jeudi sur veriti aujourdh'hui() j'ai eu une reponse de The Magic Ti la réponse est excellente (j'aime donner dans le pléonasme quand je suis content)
Ce lien n'existe plus
ici l'adresse du fil
encore merci du temps que tu m'a consacré
Cordialement
G.David
 

Fabinio

XLDnaute Nouveau
Bonjour CHti160,

J'ai utilisé ton code pour coller mon tableau dans une plage de même dimension.
à l'issue de la commande il semble que chaque ligne soit remplie de la première ligne de mon tableau.
Code:
Worksheets(8).Activate
count = ActiveSheet.Range(Selection, Selection.End(xlDown)).Rows.count ' compte le nombre de jeu il y a.
Dim A as Integer
Dim tableau_Jeu()
Dim tableau_conso()
ReDim tableau_Jeu(count - 1)
ReDim tableau_conso(count - 1)

For A = 0 To count - 1
tableau_Jeu(A) = Cells(A + 4, 2).Value
tableau_conso(A) = "=Max('" & tableau_Jeu(A) & "'!$K$79:$K$300)" 'défini la bonne "adresse" de la valeur qu'on veut récupérer
'Cells(A + 4, 9).Value = tableau_conso(A) 'exemple de quelque chose qui fonctionne mais prend du temps on colle la valeur incrémentation après incrémentation
Next A
' Range(Cells(4, 9), Cells(4 + UBound(tableau_conso, 1), 9)).Select
' Selection = tableau_conso
Cells(4, 9).Resize(1 + UBound(tableau_conso, 1)) = tableau_conso

Lorsque je fais ça, il me colle ma valeur tableau_conso(0) dans toutes les cases de ma plage excel.
Photo.PNG

Je vous remercie par avance de votre aide.
En l'occurrence je n'ai pas créé les feuilles portant le nom encore donc ça m'affiche REF mais la formule dans toutes les cases est donc =MAX(Element1!$K$79:$K$300)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Il faut deux dimensions pour un tableau valeur de plage : (1 To LMax, 1 To 1)
Mais il peut être récupéré ainsi en une seule instruction. Il y a même tout intérêt à faire ça, plutôt qu'une boucle. C'est bien plus rapide.
 

Fabinio

XLDnaute Nouveau
Bonjour.
Il faut deux dimensions pour un tableau valeur de plage : (1 To LMax, 1 To 1)
Mais il peut être récupéré ainsi en une seule instruction. Il y a même tout intérêt à faire ça, plutôt qu'une boucle. C'est bien plus rapide.
Merci Beaucoup ! effectivement c'était bien le soucis je retiens l'astuce ! Pourquoi est-ce que ce n'est pas possible de faire cela avec un tableau à 1 dimension?
 

Hahiwa

XLDnaute Nouveau
Bonjour, Oui il est possible de le faire tout comme il est possible d'enregistrer une table d'après un objet tableau dans Excel, c'est en effet 1000 fois plus rapide mais attention à bien définir les limites du tableau réceptacle.
tboImport = Range("nomdutableau[[colonne de début]:[colonne de fin]]")
Puis quelque chose du genre :
Range(Cells(ligneentete + 1, 1), Cells(UBound(tboImport , 1) + 1, UBound(tboImport , 2))) = tboImport

Ou pour une colonne en particulier
Cells(LigneDébutTableau, ColonneouColler).Resize(UBound(tboImport, 1)) = Application.Index(tboImport, , 1) 'ou le second 1 = le numéro de la colonne que l'on souhaite coller
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 232
Messages
2 086 462
Membres
103 222
dernier inscrit
2BS