XL 2016 Valeurs de Zones discontinues

fanch55

XLDnaute Barbatruc
Bonjour à tous,
Il doit surement y avoir une solution mais je n'ai pas trouvé ou mal cherché ... 🤔

Je bloque pour récupérer facilement les valeurs d'un range de cellules discontinues .

Exemple, je sélectionne un range ainsi :
Range("A1:A8,J9,C8:C9,etc...")​
ou​
Union([Table1[Colonne1]],[Table2[Colonne6]],etc..)​
Via Excel, aucun problème, je sélectionne, je copie et je colle les valeurs dans d'autres cellules correctement .👍

Par contre, via le VBA, je suis incapable de récupérer facilement les valeurs des cellules sélectionnées,
le .value ou .value2 ne me renvoie les valeurs que de la première zone.👎
Sinon, il faut décliner les .Areas obtenus .

C'est pareil en passant par le selection.
Y a-t-il une autre solution (courte) pour récupérer ces valeurs dans un tableau ?
 
Solution
Bonsoir.
Plus court non, mais beaucoup plus rapide oui ! :
VB:
Private Sub Cbx_DropButtonClick()
   Dim Target As Range, Zone As Range, TCible(), LC As Long, TSource(), LS As Long
   Set Target = Union([Tableau1[Nom]], [Tableau2[Nom]], [Tableau3[Nom]], [Tableau4[Nom]])
   For Each Zone In Target.Areas: LC = LC + Zone.Rows.Count: Next Zone
   ReDim TCible(1 To LC, 1 To 1): LC = 0
   For Each Zone In Target.Areas
      TSource = Zone.Value
      For LS = 1 To UBound(TSource, 1)
         LC = LC + 1: TCible(LC, 1) = TSource(LS, 1)
         Next LS, Zone
    Cbx.List = TCible
    End Sub

Dranreb

XLDnaute Barbatruc
Apparemment non, il a plutôt donné une solution dans une autre discussion pour un problème différent :
regrouper dans un nouveau tableau certaines colonnes d'un tableau source (donc même nombre de lignes partout). Je me demande d'ailleurs si ça marcherait en remplaçant son ArrayCol par un ParamArray. À tester.
 

Regueiro

XLDnaute Impliqué
Bonsoir le Forum
Ce Code charge tous les tableaux de la page active, Colonne 1
VB:
Private Sub ComboBox1_DropButtonClick()
Dim tableList As ListObjects
Dim Tbl()
Dim n
Dim i
Dim r
Set tableList = ActiveSheet.ListObjects

MsgBox tableList.Count
n = 0
For i = 1 To tableList.Count
    For r = 1 To tableList(i).ListColumns(1).DataBodyRange.Cells.Count
        n = n + 1
        ReDim Preserve Tbl(1 To n)
        Tbl(n) = tableList(i).ListColumns(1).DataBodyRange.Cells(r).Value
    Next r
Next i
Me.ComboBox1.List = Tbl
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 082
Messages
2 085 170
Membres
102 805
dernier inscrit
emes