Lire un Tableau apres avoir copié un champ

Bonsoir

Je cherche à remplir un tableau () en recopiant des valeurs d'une feuille excel le plus rapidement possible car j'ai beaucoup de données ( 1,3 million ) . J'ai essayé un boucle, ça marche bien, mais je veux plus rapide.

Je me suis inspiré du code de Jacques boisgontier ce qui donne le code ci dessous:

sub TEST() dim Tb_Brut () Tb_Brut = [A1:M100000].Value i = 0 j = 0 For i = 0 To 100000 If IsDate(Tb_Brut(i, 5)) = True Then Tb_Brut(i, 13) = Month(Tb_Brut(i, 5)) Tb_Brut(i, 14) = WorksheetFunction.WeekNum(Tb_Brut(i, 5)) End If Next

end sub

Mon problème, c'est que je n’arrive pas à travailler avec les données du tableau, il plante sur "IsDate".

Pourtant les données existent, car, quant je fait la manip inverse ( [A1].Resize(UBound(Tb_Brut, 1), UBound(Tb_Brut, 2)).Value = Tb_Brut ) je les copie bien sur ma feuille.

Quelqu'un peut-il m'expliquer ce mystère, et me proposer une solution ?

Teckno

Bonsoir,

Je suis étonné. Avec ce test, c'est ok (testé avec Excel 2019)

Sub xx()
   Tbl = [A1:B6].Value
   x = Tbl(1, 1)
   y = IsDate(x)
   MsgBox x
   MsgBox y   ' renvoie VRAI
End Sub

Boisgontier

4classeur1.zip (10.92 Ko)

Bonjour,

Pas réellement spécialiste de la chose, mais :

I= 0 et lBound(tbl_brut)=1

Cdlt.

Bonjour Jacques Boisgontier et Jean-Eric

J'ai trouvé la raison pour laquelle je n'arrivais pas à lire les données .

Lorsqu’on rempli le tableau() avec le code "Tb_Brut = [A1:M100000].Value" il n'est pas créé de ligne et de colonne avec une adresse 0. Les données sont collées à partir de l'adresse Tableau (1,1) . De ce fait, lorsque fait référence à une adresse du tableau à 0, ligne ou colonne, cela renvoie un message d'erreur N°9, ce qui est mon cas.

Jacques, si mon analyse est exact, il serait peut -être intéressent pour la communauté Excel, d'avoir cette info sur ton site, une mine d'or tous tous les passionné d'Excel.

Merci à tous les 2 de m'avoir aidé dans mon raisonnement.

Teckno

Bonjour,

Actuellement, voilà ce que j'ai sur mon site dans la rubrique Transfert d'un champ dans un Array

Sub TransfertChampTableau2D()
  t = Timer
  a = [A1:C20000].Value
  MsgBox Timer - t              ' 0,015 sec 
  MsgBox LBound(a, 1) & " à " & UBound(a, 1) ' 1 à 20000
  MsgBox LBound(a, 2) & " à " & UBound(a, 2) ' 1 à 3
End Sub

Attention! Si le champ n'a qu'une colonne, le tableau est toujours à 2D (1 à n, 1 à 1)

Je n'aime pas beaucoup ces indices 0 dans les Arrays(). Mais ils sont présents dans beaucoup de situations

Boisgontier

Rechercher des sujets similaires à "lire tableau copie champ"