Une fonction qui beugue

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 !

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'utilise souvent une fonction que m'avait concocté job75.
Cette fonction permet tout simplement de connaître le nombre de lignes d'un tableau dont toutes les cellules sont encadrées, que ces lignes soient vides ou pas.
La fonction marche très bien, jusqu'à ce que j'encadre l'en-tête du tableau avec un trait plus épais que celui des cellules qui se trouvent immédiatement au-dessous.
Peut-on contourner ce problème ?

J'ai tenté de retrouver le fil d'origine mais sans succès...

VB:
Function HTABLO(plage As Range, i As Byte) As Long
'Renvoie le nombre de lignes d'une plage dont les cellules (contiguës) sont encadrées,
'que ces cellules soient vides ou pas
'- plage : 1ère cellule d'un tablau (ex. le titre d'un tableau), tout un tableau ou un segment
'- i : si i = 1 ---> plage = titre du tableau
'      si i = 0 ---> plage = tout le tableau ou un segment
'job75 / Magic_Doctor

Dim cel As Range

Application.Volatile

Set cel = plage.Offset(i)

While cel.Offset(HTABLO).Cells(1, 1).Borders.Value = 1
  HTABLO = HTABLO + 1
Wend
End Function

Ci-joint un classeur avec des exemples.
 

Pièces jointes

Re : Une fonction qui beugue

Bonjour Doctor,

Ce n'est sûrement pas moi qui ai écrit cette fonction.

Il est facile de voir que .Borders.Value renvoie Null quand les 4 bordures ne sont pas identiques.

Il faut tester les 4 bordures (n° 7 8 9 10) tu devrais t'en souvenir, je t'avais expliqué.

La fonction corrigée :

Code:
Function HTABLO(plage As Range, i As Long) As Long
'---
'---
Dim cel As Range, j As Byte
Application.Volatile
1 Set cel = plage(1).Offset(i)
For j = 7 To 10 'teste les 4 bordures
  If cel.Borders(j).LineStyle = xlNone Then Exit Function
Next
HTABLO = HTABLO + 1: i = i + 1: GoTo 1
End Function
Edit : j'ai mis plage(1) au cas où plage contient plusieurs cellules.

A+
 
Dernière édition:
Re : Une fonction qui beugue

Bonsoir job,

Ce n'est pas grave, je pensais que c'était toi. Tu m'as tellement aidé à rédiger des fonctions !
Enfin ça marche très bien, parce que tout se bloquait.
Un gran muchas gracias.

Buenas noches.

PS : mais que signifie exactement ce "GoTo 1" ?
 
Re : Une fonction qui beugue

Re,

GoTo 1 fait continuer la macro à l'étiquette 1 => 1 Set cel = plage(1).Offset(i)

Certains sur XLD on horreur de ça, alors pour leur faire plaisir :

Code:
Function HTABLO(plage As Range, i As Long) As Long
 '---
 '---
Dim cel As Range, j As Byte
Application.Volatile
Do
  Set cel = plage(1).Offset(i)
  For j = 7 To 10 'teste les 4 bordures
   If cel.Borders(j).LineStyle = xlNone Then Exit Function
  Next
  HTABLO = HTABLO + 1: i = i + 1
Loop
End Function
C'est peut-être plus propre.

A+
 
Re : Une fonction qui beugue

C'est ce que j'ai cru comprendre, mais, en profane discipliné, je pensais que quand on mettais, par exemple, un GoTo lafindesharicots, il fallait écrire quelque part lafindesharicots:
Je cherchais donc les ":"
Mais, personnellement, cette écriture ne me dérange pas.
 
- 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
634
Réponses
0
Affichages
527
Retour