Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…