UDF - restituer firstrow, lastrow, firstcol, lastcol sur un RANGE seléctionné

zebanx

XLDnaute Accro
Bonjour à tous,

Pour l'utilisation d'un code, j'aurais besoin d'utiliser le numéro de première ligne et de dernière ligne d'un range sélectionné (pour une boucle for... next).

Un site m'a permis d'extraire ces informations par formule et de les renseigner sur la feuille.

Mais je souhaiterais SVP utiliser un UDF qui me permette directement d'avoir ces informations restituées dans le code sans les afficher dans le fichier.

En gros, on sélectionne le range dans une fonction et celle-ci restitue le numéro correspondant (i e: UDF firstrow correspondant à la formule MIN(ligne(range))

Or benoitement, l'utilisation de la formule m'envoie systématiquement un message d'erreur (avec ou sans evaluate...).

Je vous remercie par avance pour votre aide.

Bonne journée
zebanx
 

Pièces jointes

  • UDF_firstrow, lastrow range.xlsm
    17.5 KB · Affichages: 5

Staple1600

XLDnaute Barbatruc
Bonsoir zebanx, pierrejean

J'arrive un peu tard (mais comme j'ai pondu, je livre) ;)
VB:
Private Sub TestPlage(Rng As Range)
With Rng
  t = Array(.Cells(1).Address(0, 0), .Cells(.Rows.Count, .Columns.Count).Address(0, 0))
  tt = Array(.Cells(1).Row, .Cells(.Rows.Count, .Columns.Count).Row)
End With
MsgBox Join(t, Chr(10))
MsgBox Join(tt, Chr(10))
End Sub
Sub test()
TestPlage Range("A3:C8")
End Sub
 

zebanx

XLDnaute Accro
Bonjour Staple1600

Merci pour ton code et t'être intéressé au sujet.

L'utilisation d'une adresse est une bonne idée. Concomitamment à la (super) réponse de Pierre-Jean sur 4 fonctions simples et très pratiques à utiliser, je continuais à chercher sur cette piste mais sans penser du tout au "JOIN" donc merci de cette trouvaille !.

Et il semble, pour revenir à l'utilisation d'un UDF directement (mon besoin), qu'avec une ligne du type x = Split(plage.Address, "$")(4) et suivant les différents besoins on arrive à obtenir le même type de résultats.

Très content pour vos propositions, merci pour vous y être intéressé.

bonne journée.
zebanx
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, zebanx, pierrejean

zebanx
Un truc du genre ;)
(mais ça marche pas à tout les coups tel quel ;))
VB:
Function InfoRange(rng As Range, refs As XlReferenceStyle) As String
Zz = Split(rng.Address(4, 4, refs), ":")
t = "Première cellule: " & Chr(13) & Replace(Replace(Zz(0), "R", "Ligne: "), "C", ", Colonne: ")
tt = "Dernière cellule: " & Chr(13) & Replace(Replace(Zz(1), "R", "Ligne: "), "C", ", Colonne: ")
ttt = "Nombre de zone(s): " & rng.Areas.Count
tttt = "Nombre de cellules: " & rng.Count
InfoRange = t & Chr(13) & tt & Chr(13) & ttt & Chr(13) & tttt
End Function
Sub test()
MsgBox InfoRange(Range("F3:H5"), xlR1C1), vbInformation, "Infos Plage: " & Range("F3:H5").Address(0, 0)
End Sub
 

Statistiques des forums

Discussions
312 345
Messages
2 087 475
Membres
103 553
dernier inscrit
jhnm