Array à partir d'une union de range

avaya

XLDnaute Nouveau
Bonjour,

J'ai une question sans doute très simple à répondre mais je ne la trouve pas par moi-même.

Code:
Sub Macro1()
Dim monTab As Variant
Dim plage1 As Range
Dim plage2 As Range

Set plage1 = Range("A1:A2")
Set plage2 = Range("C1:C2")

monTab = Application.Union(plage1, plage2).Value

MsgBox monTab(1, 1) 'Ca marche!
MsgBox monTab(1, 2) 'Ca ne marche pas... : l'indice n'appartient pas à la selection

End Sub

Pourquoi mon tableau n'a que la plage 1?
(Et comment faire pour que le tableau ait aussi la plage 2?)

Merci d'avance,

avaya
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Array à partir d'une union de range

Bonsoir,

Code:
Sub Essai()
  col = Array(1, 3, 4, 6, 7)   ' colonnes à prendre
  h = 4
  n = UBound(col) - LBound(col) + 1
  Dim montab(): ReDim montab(1 To h, 1 To n)
  a = [A1].Resize(h, 20)           ' tableau
  For cc = LBound(col) To UBound(col)
    j = j + 1
    For i = 1 To h
       montab(i, j) = a(i, col(cc))
    Next i
  Next cc
  [A10:E13] = montab
End Sub

Avec une fonction perso FiltreArrayCol()

http://boisgontierjacques.free.fr/fichiers/Cellules/FiltreArrayCol.xls

Code:
Sub FiltreColonnes()
  a = [A2].Resize(4, 20) ' tableau a()
  b = FiltreArrayCol(a, Array(1, 3, 4, 6, 7)) ' on prend les colonnes 1, 3, 4, 6, 7
  [m1].Resize(UBound(b), UBound(b, 2)) = b
End Sub

Pour se prémunir des modifs par l'utilisateur, donner un titre aux colonnes qui doivent être récupérées.

Code:
Sub Essai1()
  h = 4
  n = Application.CountIf([1:1], "titrexx")
  Dim montab(): ReDim montab(1 To h, 1 To n)
  a = [A2].Resize(h, 20)     ' tableau a()
  For col = 1 To 20
   If Cells(1, col) = "titrexx" Then  'on sélectionne les colonnes
     j = j + 1
     For i = 1 To h
        montab(i, j) = a(i, col)
      Next i
    End If
   Next col
   [A10:E13] = montab
End Sub

JB
 
Dernière édition:

avaya

XLDnaute Nouveau
Re : Array à partir d'une union de range

Bonjour,

A JB:
Merci beaucoup pour les suggestions! C'est même plus simple que de travailler avec des plages à définir donc je pense que je vais utiliser ces deux codes.

A job:
Mille pardons! J'avais testé ton code et comme ça fonctionnait bien, j'ai voulu le modifier à ma sauce!
Dans ma tête, l'écriture:
Code:
Set plage = [A1:A2,C1:C2]
Etait la même que:
Code:
Set plage = Union( Range("A1:A2"), Range("C1:C2"))
Et quand ça s'est mis à buguer... j'ai pas tilté que ça venait de mes modifications...
En revenant sur ton code sans mes bidouillages, je confirme que ça fonctionne bien (pardon, pardon!).
J'ai fait un test sur ton code. Il est un peu plus rapide que celui de JB mais dans celui de JB je n'ai pas besoin de définir des plages au préalable.
Je m'excuse encore pour mon erreur vraiment idiote.


Je me suis renseignée sur l'utilisation des crochets et j'ai trouvé des posts intéressants qui en parlent.
Je pense bien que vous devez les connaître mais si un internaute se perd sur ce topic , il pourra directement accéder aux renseignements:
https://www.excel-downloads.com/threads/vba-references-range-entre.101074/
https://www.excel-downloads.com/threads/abreviations-instructions.101025/
https://www.excel-downloads.com/threads/valeurs-par-defauts.21299/

avaya
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Array à partir d'une union de range

Bonjour avaya, JB, le forum,

S'il y a une périodicité des Areas c'est simple, il suffit d'une boucle supplémentaire :

Code:
Sub Macro1()
Dim pas%, n%, plage As Range, h&, ac%, monTab(), j%, a, i&

pas = 4
n = 3 'nombre de répétitions
Set plage = [A1:A2,B1:B2] 'la plage répétée
h = plage.Areas(1).Count
ac = plage.Areas.Count

ReDim monTab(1 To h, 1 To n * ac)

For n = 0 To n - 1
  For j = 1 To ac
    a = plage.Areas(j).Offset(, n * pas)
    For i = 1 To h
      monTab(i, j + n * ac) = a(i, 1)
    Next
  Next
Next

MsgBox "2ème ligne :   " & monTab(2, 1) & " - " & monTab(2, 2) & " - " & monTab(2, 3) _
  & " - " & monTab(2, 4) & " - " & monTab(2, 5) & " - " & monTab(2, 6)
  
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Classeur(2).xlsm
    17.7 KB · Affichages: 29
  • Classeur(2).xlsm
    17.7 KB · Affichages: 30
  • Classeur(2).xlsm
    17.7 KB · Affichages: 27
Dernière édition:

Discussions similaires

Réponses
3
Affichages
172

Statistiques des forums

Discussions
312 769
Messages
2 091 936
Membres
105 114
dernier inscrit
ldreyer