IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

vba: Copier un tableau 1 dimension dans une feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut vba: Copier un tableau 1 dimension dans une feuille
    Bonjour,

    j'ai un petit soucis pour copier un tableau d'une seule dimension dans une feuille Excel.
    Après plusieurs recheches sur le net, j'ai des formules comme

    Application.Range("A1:B9").Formula = tableau

    Mais cela fonctionne que avec un tableau à deux dimensions, si je l'adapte à une dimension comme par exemple:
    Application.Range("A1:A9").Formula = tableau

    cela ne fonctionne pas.


    Enfin j'aimerai faire un tableau à 2 (ou plus) dimensions mais à partir de deux dimensions j'ai le message erreur suivant "Memoire insuffisante", en effet c'est des tableaux à 14400 valeurs donc si je fais Dim tableau (14400,14400) as single j'ai un message d'erreur.

    Merci pour vos réponses

  2. #2
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Bonjour,

    Pourrais tu préciser un petit peu ton probléme car ce n'est pas clair.
    Est ce que tu a un tableau sur feuille et tu veut le copier (tout ou partie) sur une autre?
    Est ce que tu veux créer un Array pour ensuite pouvoir faire:
    ??

    Essai de mettre un exemple peut etre

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut
    Je suis désolé, je vais mettre un exemple

    on va faire un petit tableau mais en vrai il est beaucoups plus grands

    Dim tableau (4) as single

    For i = 0 to 3
    tableau(i)="Nombre"+i
    Next i

    Application.Range("A1:A4").Formula=Tableau


    Voila un peu près, bon c'est un exemple bidon mais en vrai je fais une boucle de 1 a 14400 et donc a chaque boucle j'ajoute une valeur au tableau. A la fin de ma boucle, je veux copier toutes ces valeurs sur la feuille Excel pour pouvoir faire des graphiques.

    Je veux utiliser les tableaux car actuellement ce que je faisais c'est
    For i = 0 to 3
    cells(i,2).value=Nombre"+i
    Next i

    Or celà prend un temps monstre (14400 valeurs) donc je veux utiliser un tableau qui va 20 fois plus vite

    merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut
    En fait j'ai remarqué que si je fais:

    Application.Range("A11").formula=Tableau

    j'obtiens bien toutes les valeurs de mon tableau mais en ligne or j'aimerai qu'ils soient en colone , c'est a dire que je copie mon tableau sur A1 jusqu'a A14400 et si possible sans faire de boucle

    Et pour mon problème du tableau "tableau(14400,14400)" qui m'affiche le message d'erreur "Memoire insuffisante"?

  5. #5
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Le fait d'ecrire les valeurs dans une feuille ne devrait pas prendre de temps, je viens de faire le test comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ta()
     
    Application.ScreenUpdating = False
    For i = 1 To 14400
    Cells(i, 2).Value = i + (i / 2)
    Next i
    Application.ScreenUpdating = True
     
    End Sub
    Le temps d'execution de cette macro est inférieur à 2s.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut
    Merci pour la réponse, j'ai voulu verifier cela et j'ai fais 4 tests


    le premier:

    Private Sub CommandButton1_Click()
    Dim i As Single
    Dim temps As Single

    temps = Timer
    Application.ScreenUpdating = False
    For i = 1 To 14400
    Cells(i, 2).Value = i + (i / 2)
    Next i
    Application.ScreenUpdating = True
    temps = Timer - temps
    Range("E2") = temps
    End Sub

    me donne 6s (ma machine est moins puissante) mais c'est vrai que je n'avais pas pensé à arreter la mise a jour.

    Le deuxième test est le même que le premier sans Application.ScreenUpdating = False et je mets deux fois plus de temps

    Mon troisième test utilise les tableaux
    Private Sub CommandButton3_Click()
    Dim i As Single
    Dim temps As Single
    Dim monTableau(14400) As Single
    temps = Timer

    For i = 1 To 14400
    monTableau(i - 1) = i + (i / 2)
    Next i
    For i = 1 To 14400
    Cells(i, 3).Value = monTableau(i - 1)
    Next i
    temps = Timer - temps
    Range("E6") = temps
    End Sub

    et je mets 13secondes

    enfin mon dernier test est le même que le troisième sauf que j'ai un tableau à 2dimensions (toujours 0 pour la 2eme colonne) et je ne fais plus de boucle
    Private Sub CommandButton4_Click()
    Dim i As Single
    Dim temps As Single
    Dim monTableau(14400, 1) As Single
    temps = Timer

    For i = 1 To 14400
    monTableau(i - 1, 0) = i + (i / 2)
    Next i

    Range("F1:G14400") = monTableau

    temps = Timer - temps
    Range("E8") = temps
    End Sub

    et je mets 0.14s donc je vais utiliser cela mais l'inconveniant c'est que j'utilise une colonne de ma feuille en plus pour rien

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/08/2010, 08h27
  2. Comment passer un tableau à deux dimensions dans une fonction
    Par Niko_de_bordo dans le forum Débuter
    Réponses: 2
    Dernier message: 02/07/2009, 15h15
  3. Réponses: 1
    Dernier message: 19/02/2007, 19h18
  4. Passage de tableau à deux dimensions dans une session
    Par keumlebarbare dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 28/11/2006, 18h42
  5. afficher un tableau 2 dimensions dans une fenetre
    Par igor24 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 29/04/2006, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo