Problème sous Excel 2003 VBA francisé (non testé avec d'autres versions)

Bonjour à tous,

J'ai un problème de réactions non homogènes de certaines fonctions VBA quand je leur passe une plage de cellules rectangulaire ou non.
Il y a donc visiblement une différence que je ne comprends pas entre ces deux types de plages.
Voici la mise en évidence de mon problème :
Dans une feuille vide, je n'ai que 4 cellulles contenant des entiers :
L1C1=11, L1C2=12, L2C1=21 et L2C2=22
Ensuite, j'ai nommé deux plages :
titi=Feuil1!L2C1:L2C2
toto=Feuil1!L2C1;Feuil1!L1C2
Enfin je fais trois appels à ma macro Test() avec :
Test(-3;"-3")
Test(titi;"titi")
Test(toto;"toto")
Ma macro est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Function Test(zon As Variant, str As String) As Long
  Dim arg As Variant, var As Variant
  Dim res As Long
 
  res = 0
                 Debug.Print ">" & str
  arg = zon
  'For Each arg In zon
    If IsNumeric(arg) Then
      var = arg
                 Debug.Print "N" & var
      res = res + var
    ElseIf IsArray(arg) Then
      For Each var In arg
                 Debug.Print "A" & var
        res = res + var
      Next
    Else
                 Debug.Print "?" & arg
    End If
  'Next
  Test = res
                 Debug.Print "<" & res
End Function 'Test
Et j'obtiens ce résultat :
>-3
N-3
<-3
>titi
A21
A22
<43
>toto
N21
<21
Les deux premières correspondent bien à ce que j'attendais mais pas la troisième. Visiblement, la plage "titi" - constituée de 2 cellules en ligne - est bien détectée comme non numérique par IsNumeric() puis comme un tableau par IsArray() alors que la plage "toto" - constituée de 2 cellulles jointes - n'est pas vue, par les mêmes fonctions, comme un tableau mais comme une valeur unique !

Y a-t-il une raison pour qu'une plage sélectionnée en maintenant la touche SHIFT enfoncée ne réagisse pas comme une plage sélectionnée en maintenant la touche CTRL enfoncée ?
Si oui (j'aimerais bien comprendre pourquoi), y a-t-il un moyen de les traiter de la même façon ou de les transformer toutes les deux dans un même type de tableau/collection qui réagisse de façon identique ?

Note: ma macro Test est simplifiée pour cet exposé. Je cherchais à faire une macro qui gère ses arguments comme le font les macros SUM() ou MAX() d'Excel... ce qui sera plus compliqué, je le sais, mais là n'est pas ma question. Pourtant, si quelqu'un peut me fournir une référence d'un code qui simule la gestion des arguments de la macro MAX() par exemple, je serai preneur.

Ce qui me turlupine plus pour l'instant, c'est de comprendre pourquoi ces deux types de plages ne réagissent pas de la même façon... j'ai peur d'avoir écrit, par le passé, un bon nombre de lignes de code à revoir !

Merci à tous ceux qui ont déjà eu la patience de me lire