XL 2016 Filtrer des tableaux en fonction de leur dimension

Spacepak

XLDnaute Junior
Bonjour,

J'aimerai créer une condition qui permet de filtrer une liste de tableaux d'entiers en fonction de leur dimensions.

Imaginons que je peux récupérer dans une variable soit un tableau de dimension 2 soit un tableau de dimension 1. J'aimerai alors afficher dans l'onglet 1 les tableaux de dim 1 et dans l'onglet 2 les tableaux de dim 2.

Du genre :

If IsNumeric(variable_tablo(1,1)) = true then 'ou un truc du genre
sheet1.range("A1") = variable_tablo...


Malheureusement Evidemment cela ne fonctionne pas. J'ai essayé de faire un On Error Goto mais j'ai tout de même une erreur du style 'Susbscript out of range'.

Pourriez-vous m'aider à trouver une combine svp?

Merci à vous
 

jmfmarques

XLDnaute Accro
Bonjour
Commençons si tu le veux bien, par ceci :
Imaginons que je peux récupérer dans une variable soit un tableau de dimension 2 soit un tableau de dimension 1. J'aimerai alors afficher dans l'onglet 1 les tableaux de dim 1 et dans l'onglet 2 les tableaux de dim 2.
- dans quelles circonstances exactes as-tu ce besoin ?
- qu'appelles-tu exactement "tableau" (est-ce une plage, un tableau structuré, une matrice ?, etc ...) ?
- si matrice : si construite sur la base d'une plage, tu en connais le nombre de colonnes (plage.columns.count)
 

Spacepak

XLDnaute Junior
Bonjour

Oui désolé avec un exemple ce sera plus simple :)

Malheureusement je ne peux pas vous envoyer un fichier directement... (pas l'autorisation)

Voici alors une capture :

1586853662447.png




Et voici le code (juste crée pour un exemple)


Sub filtre_tablo()

Dim tablo1 As Variant
Dim tablo2 As Variant
Dim Tablo_Global As Variant

tablo1 = Range("B2").CurrentRegion
tablo2 = Range("H2").CurrentRegion


If tablo2(1, 2) <> "" Then
Range("H14").Resize(UBound(tablo2, 1), UBound(tablo2, 2)) = tablo2
Else
Range("A14").Resize(UBound(tablo2, 1)) = tablo2
End If



If tablo1(1, 2) <> "" Then
Range("H22").Resize(UBound(tablo2, 1), UBound(tablo2, 2)) = tablo2
Else
Range("A22").Resize(UBound(tablo2, 1)) = tablo2
End If

End Sub




Pour résumer : je récupère en fait les deux tableaux dans des variants.

Ensuite en fonction de leur dimension, soit je les affiche à gauche soit à droite.

Malheureusement cela va planter au niveau du tableau à 1 dim car j'essaye de faire une condition sur la 2eme dim qui n'existe pas.
 
Dernière édition:

Spacepak

XLDnaute Junior
J'ai oublié de préciser que je récupère une liste de tableaux (avec une boucle) qui sont soit de 1 dimension soit de 2 dimensions et je les stocks dans un variant.
Puis j'applique la même condition pour chacun de ces tableaux, 1 par 1.
 

jmfmarques

XLDnaute Accro
Re
Ma manière de te répondre :
regarde ce que ferait ceci :
VB:
MsgBox Range("B2").CurrentRegion.Rows.Count & vbCrLf & Range("B2").CurrentRegion.Columns.Count
Ne serait-ce-pas les indications qui correspondent à ton tablo1 ? :)
Je te laisse faire, maintenant.
 

Staple1600

XLDnaute Barbatruc
Re, Bonjour jmfmarques

Je suis pas sur d'avoir tout compris
(trop de confinement altère les synapses ;))
VB:
Sub filtre_tablo()

Dim tablo1 As Variant
Dim tablo2 As Variant
Dim Tablo_Global As Variant

tablo1 = Range("B2").CurrentRegion
tablo2 = Range("H2").CurrentRegion

If UBound(tablo1, 2) > 1 Then
Range("A22").Resize(UBound(tablo1, 1), UBound(tablo1, 2)) = tablo2
Else
Range("A22").Resize(, UBound(tablo1, 1)) = Application.Transpose(tablo1)
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin