XL 2013 connaitre le type de variable tableau un ou 2 dim et le sens

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
je cherche un moyen efficace de savoir quelle est le type de variable tableau une ou deux dim et est une ligne ou une colonne sans avoir a gérer des erreurs dans un sens ou dans l'autre
@Yeahou a donné un début de piste interessant mais c'est pas full right

VB:
Sub testy7()
a = [A1:H1].Value
MsgBox oneDim(a)
End Sub

Sub testy8()
a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
MsgBox oneDim(a)
End Sub

Sub testy9()
Dim a(0 To 5, 1)
  a(5, 0) = "toto "
MsgBox oneDim(a) & " " & UBound(a, 2)
End Sub

'***********************************************************
'ERREUR!!!!
Sub testy10() ' erreur donne vrai quand base 0
Dim a(0 To 5, 0)
  a(5, 0) = "toto "
 'a(5) = "titi"    'erreur " nombre de dimensions incorect"
Msgbox  oneDim(a) & " " & UBound(a, 2)
End Sub
'***********************************************************

Sub testy11() '
Dim a(0 To 5)
MsgBox oneDim(a)
End Sub

Function oneDim(a)
  oneDim = UBound(a) + 1 - LBound(a) = Application.CountA(a)
End Function

il faudrait le moyen de compter le base 0 et ce sera bon
 
Solution
re
Bonjour @Yeahou
oui perso moi aussi je l'utilise rarement le ".iserr" de l'app
j'utilise typename par ce que je fait la même chose avec evaluate

pour le coup là il y en a pour tout les goûts

3 écriture différentes

sub de test

VB:
Dim q(1 To 1000000, 1 To 1)

Sub test0()    'tableau 1 colonne explicite base(1,1)
    MsgBox GetTypeArray(q)
    MsgBox GetTypeArray2(q)
    MsgBox GetTypeArray3(q)
End Sub

Sub testX0()    'tableau 1 colonne explicite base(1,1)
    Dim t
    t = [A1].Resize(1000000, 1).Value
    MsgBox GetTypeArray(t)
    MsgBox GetTypeArray2(t)
    MsgBox GetTypeArray3(t)
End Sub

Sub test1()    'tableau 1 colonne explicite base (1,1)
    t = [A1:A1000000].Value
    MsgBox...

mapomme

XLDnaute Barbatruc
Et ceci sera mon dernier post dans ce fil.

Je ne suis pas d'accord avec vous. Pourquoi aller chercher un programme tiers dans un langage de type visual basic? On veut la même chose en Access? On va donc chercher Access avec une syntaxe différente qu'avec la fonction pour Excel VBA. Deux visal basic, deux fonctions pour la même finalité ? Allez! à la revoyure sur un autre fil.
 

patricktoulon

XLDnaute Barbatruc
@Yeahou je voudrais porter a ton attention un truc bien intéressant qui me titille depuis toute a l'heure avec ton écriture
c'est juste un detail mais quand meme
dans mes versions précédente je variablisait des le départ le ubound
et dans les if ou case ou switch je testais x2 et toi le ubound

fait ce test qui en fait le meme
sauf que un n'est pas variabilisé
c'est carrément du simple au double
VB:
Sub testw()
    Dim t(1000000, 1)
    tim = Timer
    For i = 1 To 1000000
        x2 = UBound(t)
    Next
    MsgBox Timer - tim
End Sub

Sub testw2()
    Dim t(1000000, 1), x&
    x = UBound(t)
    tim = Timer
    For i = 1 To 1000000
        x2 = x
    Next
    MsgBox Timer - tim
End Sub
c'est quoi le résultat chez toi ?
 

Discussions similaires

Réponses
4
Affichages
455

Statistiques des forums

Discussions
315 138
Messages
2 116 684
Membres
112 835
dernier inscrit
collallapsus