Variable Tableau : récupérer une plage multiple

clf

XLDnaute Nouveau
Bonjour,

J'essaye de charger une variable tableau à partir d'une plage multiple mais cela ne me prend que la 1ère plage.
Le code :

der = Range("a1000000").End(xlUp).Row - 3
Application.Union(Range("a4:b" & der + 3), Range("f4:f" & der + 3)).Copy
plage = Application.Union(Range("a4:a" & der + 3), Range("e4:e" & der + 3)).Address
ReDim tablox(der, 3)
tablox = Range(plage).Value

La copie avec Union fonctionne, mais le chargement du tableau ne prend que la colonne A.

Que manque t-il ? Est-ce possible de charger dans une variable tableau une plage multiple en une opération ?

Merci
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Variable Tableau : récupérer une plage multiple

Bonjour,

Exemple pour transferer un champ multizones dans un array:

Code:
Sub TriMC()
  Dim temp()
  ReDim temp(Range("Nom1").Count)
  lig = 0
  For i = 1 To Range("Nom1").Areas.Count
    For j = 1 To Range("Nom1").Areas(i).Count
      lig = lig + 1
      temp(lig) = Range("Nom1").Areas(i)(j)
    Next j
  Next i
  Call Tri(temp, 1, lig)
  lig = 0
  For i = 1 To Range("Nom1").Areas.Count
    For j = 1 To Range("Nom1").Areas(i).Count
      lig = lig + 1
      Range("Nom1").Areas(i)(j) = temp(lig)
    Next j
  Next i
End Sub

http://boisgontierjacques.free.fr/fichiers/fonctionsperso/jb-trichampmultizones.xls

JB
 

clf

XLDnaute Nouveau
Re : Variable Tableau : récupérer une plage multiple

Bonjour Jacques,

Merci pour cette réponse d'expert.
Ce que je recherche c'est à créer une variable tableau identique à la plage Excel.
Donc récupérer les données de A3:Bx et F3:Fx dans une variable tableau de 3 colonnes pour pouvoir manipuler ces données dans le tableau.

Merci

Camille
 

job75

XLDnaute Barbatruc
Re : Variable Tableau : récupérer une plage multiple

Bonjour clf, Iznogood1, JB,

Si l'on tient à utiliser Union il faut restituer la copie dans une plage :

Code:
der = Range("A1000000").End(xlUp).Row - 3
With [XFB1].Resize(der, 3) 'pour le fun...
  Union([A4].Resize(der, 2), [F4].Resize(der)).Copy .Cells
  ReDim tablox(1 To der, 1 To 3)
  tablox = .Value
  .Delete
End With
With ActiveSheet.UsedRange: End With 'actualise la barre de défilement
A+
 

job75

XLDnaute Barbatruc
Re : Variable Tableau : récupérer une plage multiple

Re,

Autre solution sans copier-coller, sans doute moins rapide :

Code:
Dim der&, zone As Range, i&, j%, c As Range
der = [A1000000].End(xlUp).Row - 3
Set zone = Union([A4].Resize(der, 2), [F4].Resize(der))
ReDim tablox(1 To der, 1 To 3)
For i = 1 To UBound(tablox)
  j = 0
  For Each c In Intersect(Rows(i + 3), zone)
    j = j + 1
    tablox(i, j) = c
  Next
Next
A+
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Variable Tableau : récupérer une plage multiple

Bonsoir,

On obtient un tableau b(,) avec x lignes et 3 colonnes

Code:
Sub FiltreColonnes()
  a = [A4:F10].Value
  b = FiltreArrayCol(a, Array(1, 2, 6)) ' on prend les colonnes 1, 2,6
End Sub

Filtrer les colonnes de tableaux, les lignes de tableaux

JB
 

Pièces jointes

  • EssaiFiltreCol.xls
    34.5 KB · Affichages: 39
  • EssaiFiltreCol.xls
    34.5 KB · Affichages: 61
  • EssaiFiltreCol.xls
    34.5 KB · Affichages: 64
Dernière édition:

job75

XLDnaute Barbatruc
Re : Variable Tableau : récupérer une plage multiple

Bonjour le fil, le forum,

J'ai testé les macros sur 65000 lignes (avec des 1 partout) :

- post #5 => 0,25 seconde

- post #7 => 1,12 seconde

- post #9 => 0,22 seconde

Application.Transpose (utilisée par JB) ne fonctionne pas au delà de 65536 lignes.

Bonne journée.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Variable Tableau : récupérer une plage multiple

Bonjour,

Sans Application.Transpose

JB
 

Pièces jointes

  • EssaiFiltreCol.xls
    34.5 KB · Affichages: 30
  • EssaiFiltreCol.xls
    34.5 KB · Affichages: 54
  • EssaiFiltreCol.xls
    34.5 KB · Affichages: 56

job75

XLDnaute Barbatruc
Re : Variable Tableau : récupérer une plage multiple

Re,

Sur 1 000 000 de lignes :

- post #5 => 3,20 secondes

- post #7 => 16,58 secondes

- post #11 => 2,17 secondes (sans restitution dans la feuille).

Edit : attention écrire der = Range("A1000010").End(xlUp).Row - 3

A+
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Variable Tableau : récupérer une plage multiple

Bonjour à tous

une autre solution, pas très performante (1,7s pour 65536 lignes) qui présente l'avantage de 'combiner' les colonnes désirées dans l'ordre souhaité.

Code:
Application.ScreenUpdating = False
der = Range("A3").End(xlDown).Row
ReDim tablox(der - 3, 3)
With Range("a4:e" & der)
tablox = Application.Index(.Value, Evaluate("row(1:" & der & ")"), Array(1, 2, 5)) 'on prend les colonnes 1,2 et 5
 'Range("M1").Resize(der - 3, 3) = tablox
End With
Application.ScreenUpdating = True

curieusement l'emploi de Application.ScreenUpdating = False diminue le temps de traitement de 0.2s, alors qu'il n'y a pas d'affichage !

A+
 

gosselien

XLDnaute Barbatruc
Re : Variable Tableau : récupérer une plage multiple

Bonjour le forum, Paf ,

je viens de tester ton code mais il copie bien les colonnes A et B en M et N mais pas la colonne F ...:eek:

P.

J'ai changé un chouia et là, ça copie les aussi la colonne F

Application.ScreenUpdating = False
der = Range("A4").End(xlDown).Row
ReDim tablox(der - 3, 3)
With Range("a4:f" & der)
tablox = Application.Index(.Value, Evaluate("row(1:" & der & ")"), Array(1, 2, 3, 4, 5, 6)) 'on prend les colonnes 1,2 et 5
Range("M1").Resize(der - 3, 6) = tablox
End With
Application.ScreenUpdating = True
 
Dernière édition:

Discussions similaires