Utilisation variable "Tablo"

Bonjour à tous,

Jusqu'à présent, pour transférer des données, j'avais testé ces 2 solutions:

  • la boucle for next
  • le filtre avancé+ copié/coller des données filtrées

En parcourant le forum, j'observe que les membres les plus expérimentés, utilisent régulièrement des tableaux, aussi je souhaiterai en comprendre le fonctionnement.

Voici un exemple en feuille 1 ("test"):

  • Données de A1 à J30
  • Critère en L1
  • Export des données et écriture à partir de L2
Sub transfert()  

    Dim tablo(), tabloR()

    With Sheets("test")
      .Range("L2:U300").ClearContents

     tablo = Range("A1:J30")
     k = 0
      For i = 1 To UBound(tablo, 1)
        If tablo(i, 1) = Range("L1") Then
         ReDim Preserve tabloR(1 To 10, 1 To k + 1)
            tabloR(1, k + 1) = tablo(i, 1)
            tabloR(2, k + 1) = tablo(i, 2)
            tabloR(3, k + 1) = tablo(i, 3)
            tabloR(4, k + 1) = tablo(i, 4)
            tabloR(5, k + 1) = tablo(i, 5)
            tabloR(6, k + 1) = tablo(i, 6)
            tabloR(7, k + 1) = tablo(i, 7)
            tabloR(8, k + 1) = tablo(i, 8)
            tabloR(9, k + 1) = tablo(i, 9)
            tabloR(10, k + 1) = tablo(i, 10)
            k = k + 1
        End If
      Next i
       On Error Resume Next
        Range("L2").Resize(UBound(tabloR, 2), 10) = Application.Transpose(tabloR)
       Erase tabloR
    End With
   End Sub

Sur la feuille 2 ("TB"), même principe mais avec données sous forme de tableaux structurés.

Sur la feuille 3 (" Date et TB"), tableaux structurés et critère date.

Je peine à comprendre:

ReDim Preserve tabloR(1 To 10, 1 To k + 1)
.Resize(UBound(tabloR, 2), 10) = Application.Transpose(tabloR)

Merci à tous ceux qui prendront la peine de m'éclairer voir d'optimiser (où corriger) mes codes,

Cordialement,

Bonjour,

En fait dans un tableau à 2 dimensions, le Vba permet de modifier dynamiquement uniquement la 2ème dimension, d’où le K+1 en 2ème dimension

Ensuite pour "redresser" le tableau on le transpose le "k+1" devient alors UBound(tabloR, 2) à écrire en 1ère dimension puisqu'on le transpose (ç-à-d lignes en colonnes et colonnes en lignes)

Pierre

Bonjour pierre56,

Merci pour ta réponse ,

Je commence à y voir un peu plus clair, mais ce n'est pas simple,

Sinon, mon code est cohérent ? Pas d'erreurs ?

Amitiés,

Pour le reste du code, tout est ok.

Si on veut un peu raccourcir on peut éventuellement écrire :

For j = 1 To 10
    tabloR(j, k + 1) = tablo(i, j)
Next j

pour remplacer les 10 lignes similaires, mais ici c'est pas déterminant.

Sinon, si on veut être strict, on ajoute Option Explicit au début de chaque module. Ce qui nous oblige à bien déclarer toutes les variables, par exemple :

Dim tablo() As Variant, tabloR() As Variant
Dim i As Integer, j As Integer, k As Integer

Ça reste plutôt une "bonne pratique" même si ce n'est pas obligatoire. Le vba est assez tolérant de ce côté, mais si on migre vers un autre langage, ou si on bosse sur un projet conséquent, un peu de rigueur n'est jamais inutile.

Pierre

Re,

For j = 1 To 10
    tabloR(j, k + 1) = tablo(i, j)
Next j[

Un grand merci pierre56, avec un peu de pratique, je devrai m'en sortir,

Amitiès,

Bonjour,

ReDim : dimensionne ton tableau (ou le redimensionne).

Preserve : en conserve le contenu.

ReDim Preserve : redimensionne en conservant le contenu.

Autre chose de TRES important, les propriétés des Range, à utiliser systématiquement.

Pas top :

tablo = Range("A1:J30")

TOP :

tablo = Range("A1:J30").Value

Merci pijaku pour ce complément,

Rechercher des sujets similaires à "utilisation variable tablo"