Copier tableau vba dans plage excel

Balot57

XLDnaute Nouveau
Bonjour à tous,
Dans une macro un peu complexe, j'aimerais utiliser la copie directe d'un tableau dans une plage de cellules afin d'éviter le bouclage sur les cellules et les lignes/colonnes du tableau. Pour me faire la main, j'ai fait une macro basique mais qui ne donne pas les résultats voulus. Je remplis un tableau avec les chiffres de 1 à 10. En sortie, j'aimerais avoir en colonne 5 toutes les valeurs du tableau, mais ma macro ne renvoie que la 1ère valeur (3) à chaque ligne. Savez-vous me dire où est l'erreur ?

Code:
Sub titi()

    Dim TabTiti(1 To 10) As Variant
    Dim PlagePourColler As Range

    TabTiti(1) = 3
    TabTiti(2) = 5
    TabTiti(3) = 2
    TabTiti(4) = 9
    TabTiti(5) = 1
    TabTiti(6) = 4
    TabTiti(7) = 8
    TabTiti(8) = 6
    TabTiti(9) = 7
    TabTiti(10) = 10
    
    Set PlagePourColler = Range(Cells(1, 5), Cells(10, 5))
    PlagePourColler.Value = TabTiti

End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copier tableau vba dans plage excel

Bonjour balot, bonjour le forum,

Essaie comme ça :
Code:
Sub titi()
    Dim TabTiti(1 To 10) As Variant
    Dim PlagePourColler As Range
    TabTiti(1) = 3
    TabTiti(2) = 5
    TabTiti(3) = 2
    TabTiti(4) = 9
    TabTiti(5) = 1
    TabTiti(6) = 4
    TabTiti(7) = 8
    TabTiti(8) = 6
    TabTiti(9) = 7
    TabTiti(10) = 10
 
Cells(1, 5).Resize(UBound(TabTiti)) = Application.Transpose(TabTiti)
End Sub
 

Balot57

XLDnaute Nouveau
Re : Copier tableau vba dans plage excel

Merci pour vos réponses. Cette méthode fonctionne bien si le tableau a une seule dimension. J'ai fait des essais avec 2 dimensions dans le but d'avoir en colonne 5 la valeur quand la 2è dim vaut 1, et en colonne 6 la valeur quand la 2è dim vaut 2. Mais les lignes 3 à 10 se retrouvent avec une erreur et les lignes 1 et 2 comportent les valeurs des dim 1 et 2.

Code:
Sub TableauDansPlage_2colonnes_methode2()

    Dim TabTiti(1 To 10, 1 To 2) As Byte

    TabTiti(1, 1) = 3
    TabTiti(1, 2) = 10
    TabTiti(2, 1) = 5
    TabTiti(2, 2) = 9
    TabTiti(3, 1) = 2
    TabTiti(3, 2) = 8
    TabTiti(4, 1) = 9
    TabTiti(4, 2) = 7
    TabTiti(5, 1) = 1
    TabTiti(5, 2) = 6
    TabTiti(6, 1) = 4
    TabTiti(6, 2) = 5
    TabTiti(7, 1) = 8
    TabTiti(7, 2) = 4
    TabTiti(8, 1) = 6
    TabTiti(8, 2) = 3
    TabTiti(9, 1) = 7
    TabTiti(9, 2) = 2
    TabTiti(10, 1) = 10
    TabTiti(10, 2) = 1
    
    Range("E1").Resize(10, 2).Value = Application.Transpose(TabTiti)

End Sub
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Copier tableau vba dans plage excel

Bonjour,

Code:
Sub TableauDansPlage_2colonnes_methode2()

    Dim TabTiti(1 To 10, 1 To 2)

    TabTiti(1, 1) = 3
    TabTiti(1, 2) = 10
    TabTiti(2, 1) = 5
    TabTiti(2, 2) = 9
    TabTiti(3, 1) = 2
    TabTiti(3, 2) = 8
    TabTiti(4, 1) = 9
    TabTiti(4, 2) = 7
    TabTiti(5, 1) = 1
    TabTiti(5, 2) = 6
    TabTiti(6, 1) = 4
    TabTiti(6, 2) = 5
    TabTiti(7, 1) = 8
    TabTiti(7, 2) = 4
    TabTiti(8, 1) = 6
    TabTiti(8, 2) = 3
    TabTiti(9, 1) = 7
    TabTiti(9, 2) = 2
    TabTiti(10, 1) = 10
    TabTiti(10, 2) = 1
   
    Range("E1").Resize(UBound(TabTiti, 1), UBound(TabTiti, 2)) = TabTiti

End Sub

Transfert tableau dans un champ

JB
 

Pièces jointes

  • Classeur1.xls
    22.5 KB · Affichages: 193
  • Classeur1.xls
    22.5 KB · Affichages: 209
  • Classeur1.xls
    22.5 KB · Affichages: 234
Dernière édition:

Balot57

XLDnaute Nouveau
Re : Copier tableau vba dans plage excel

Avec cette méthode, j'obtiens "erreur définie par l'application ou par l'objet".

[edit]
Pardon, je corrige ma réponse, ça marche, il suffisait de faire un peu plus attention, l'heure de la sieste sans doute.....
Merci pour le lien, il contient plein d'informations intéressantes.
 
Dernière édition:

Balot57

XLDnaute Nouveau
Re : Copier tableau vba dans plage excel

Au cas où ça intéresse quelqu'un, j'ai fait une macro permettant de comparer les temps de traitement pour différentes actions :
- remplir un tableau à partir d'une plage de cellules (65535 lignes et 5 colonnes) : 0.12s
- remplir un tableau à partir d'une boucle sur des cellules : 3.29s
- remplir une plage de cellules avec un tableau : 1.25s
- remplir des cellules avec une boucle sur un tableau : 18.79s
- remplir des cellules avec une boucle sur un tableau en désactivant la mise à jour de l'écran : 14.83s

Bien sûr, si ces actions doivent être réalisées une seule fois, peu importe. Mais si elles doivent être répétées, cela peut devenir important.
 

Pièces jointes

  • Macro_test2_PlageVersTab_TabVersPlage.zip
    813.8 KB · Affichages: 394

Statistiques des forums

Discussions
312 495
Messages
2 088 964
Membres
103 992
dernier inscrit
Christine 974