XL 2013 comment Identifier le type Rows où columns

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

patricktoulon

XLDnaute Barbatruc
bonjour à tous
comment peut on identifier le type Rows ou Columns avec un argument rows ou columns
j'explique
j'ai une fonction dans la quelle j'injecte un argument rng.rows ou rng .columns
je voudrais identifier le type d'object et non "Range"

VB:
Sub test()
Dim rng As Range

Set rng = [A1:A20]
mafiontion rng, rng.Rows

Set rng = [A1:H10]
mafiontion rng, rng.Columns
End Sub

Function mafonction(r As Range, RowColumns)
MsgBox TypeName(RowColumns)
End Function
 
Solution
donc si je ne veux pas intégrer ces deux lignes dans une fonction
je me fait une fonction perso
VB:
Sub test()
    Dim rng As Range
    '-----------------------------------------
    Set rng = [A1:A10]
    MsgBox GetTypeRange(rng.Rows)

    Set rng = [A1:A10]
    MsgBox GetTypeRange(rng.Columns)
'-----------------------------------------
    Set rng = [A1:J1]
   MsgBox GetTypeRange(rng.Rows)

    Set rng = [A1:J1]
     MsgBox GetTypeRange(rng.Columns)
 '-----------------------------------------
    Set rng = [A1:J10]
    MsgBox GetTypeRange(rng.Rows)

    Set rng = [A1:J10]
     MsgBox GetTypeRange(rng.Columns)
End Sub

Function GetTypeRange(Rowcolumns As Range)
 Dim X As Boolean
 X = Rowcolumns(1).Address = Rowcolumns.Rows(1).Address...
re
bonsoir @Dranreb j'ai pensé à un truc comme ça mais c'est pas 100% valable
notement pour une plage de ligne et colonne du même nombre
j'ai essayé aussi une variable tableau temporaire et test du ubound(tbl,,2) mais là encore choux blanc casiment pour la même raison
je ne pense pas que ce soit possible je vais faire autrement
 
re
hah!! peut être que si finalement
le resultat est bizarre mais bon j'ai recommencé 10 fois et ca semble être un point de comparaison
VB:
Sub test()
Dim rng As Range

Set rng = [A1:A20]
Mafonction rng, rng.Rows

Set rng = [A1:A20]
Mafonction rng, rng.Columns
End Sub

Function Mafonction(r As Range, RowColumns As Range)
MsgBox RowColumns(1).Cells.Count


End Function
 
bon ben ça semble être bon
je pense avoir fini par trouver
VB:
Sub test()
Dim rng As Range

Set rng = [A1:a20]
Mafonction rng, rng.Rows

Set rng = [A1:a20]
Mafonction rng, rng.Columns
End Sub

Function Mafonction(r As Range, RowColumns As Range)
x = RowColumns(1).Address = RowColumns.Rows(1).Address
MsgBox Array("colonnes", "lignes")(Abs(x))
End Function
testé avec différentes plages de cellules
 
Non, je n'ai pas testé, mais même si elle est carrée, avec un For Each In on récupère des lignes si c'est un .Rows et des colonnes si c'est un .Columns, alors je pensais que c'était pareil avec son item 1, et donc qu'il pouvait avoir plusieurs lignes mais une seule colonne ou l'inverse.
 
Dernière édition:
cet exemple t'aidera mieux a comprendre
une plage de 10 lignes et 10 colonnes
VB:
Sub test()
    Dim rng As Range

    Set rng = [A1:j10]
    Mafonction rng, rng.Rows

    Set rng = [A1:j10]
    Mafonction rng, rng.Columns
End Sub

Function Mafonction(r As Range, RowColumns As Range)
    Dim texte As String

    texte = " RowColumns(1).Address = " & RowColumns(1).Address & " " & RowColumns(1).Cells.Count & " cellules" & vbCrLf & vbCrLf

    texte = texte & " RowColumns.Rows(1).Address = " & RowColumns.Rows(1).Address & " " & RowColumns.Rows(1)(1).Cells.Count & " cellules" & vbCrLf & vbCrLf

    x = RowColumns(1).Address = RowColumns.Rows(1).Address

    texte = texte & "Résultat : " & Array("colonnes", "lignes")(Abs(x))

    MsgBox texte

End Function
l'astuce réside dans
RowColumns.Rows(1) .address et RowColumns(1).address
par le cells.count je peux avoir la même chose sur une plage egale en nombre de lignes et colonnes
par les adresse là c'est différent
😉
 
ben non justement
ou je pourrais-je bien faire la difféernce avec un count que ce soit des cells ou des rows ou des columns
si j'ai 10 lignes et 10 colonnes par exemple comme on peut le voir dans le msgbox
j'ai tout le temps 10 cellules
sauf que si on teste les adresses ce ne sont pas les mêmes 😉

la seule faille dans cette méthode c'est si j'injecte un range de une seule cellule 🤣 🤣 🤣
 
Bon, je me suis décidé à tester, et, désolé mais ça marche exactement comme je le souhaitais :
VB:
Option Explicit
Sub Test()
   Dim Rng As Range
   Set Rng = [A1:J10]
   MsgBox Mafonction(Rng)
   MsgBox Mafonction(Rng.Rows)
   MsgBox Mafonction(Rng.Columns)
   End Sub
Function Mafonction(ByVal Rng As Range) As String
   Dim LMax As Long, CMax, L1 As Long, C1 As Long
   LMax = Rng.Rows.Count
   CMax = Rng.Columns.Count
   L1 = Rng(1).Rows.Count
   C1 = Rng(1).Columns.Count
   Mafonction = Choose(1 - 2 * (L1 > 1) - (C1 > 1), _
      LMax * CMax & " cells", _
      LMax & " lignes de " & CMax, _
      CMax & " colonnes de " & LMax)
   End Function
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
485
Réponses
22
Affichages
3 K
Réponses
0
Affichages
934
Réponses
0
Affichages
436
Retour