Fonction détection de bordures

Bonjour, Je débute en VBA et j'aimerais créer une fonction qui prend en argument une case et qui retourne 0 ou 1 selon si la case possède ou non une bordure. L'objectif final de cette fonction est de détecter la ligne ou se termine un tableau afin d'automatiser la récupération des valeurs de ce tableau. Existe-t-il une fonction prédéfinie ou un objet que je pourrais intégrer dans une nouvelle fonction qui me permettrait d'obtenir le résultat escompté ? Merci pour votre aide, Cdlt,

Bonjour

C'est un approche tarabiscotée

Soit tu utilises un tableau structuré et on peux aisément le gérer, Excel en connaissant la taille à tout moment

Soit tu utilises une plage et il y aussi d'autres moyens d'en connaître la dernière ligne remplie

Bonjour,

Merci de votre réponse mais le cœur de mon problème est justement que je ne connais pas la taille des tableaux dont je veux extraire les données étant donné qu'ils sont tous différents. Seul les colonnes restent les mêmes, les lignes, elles, varient selon le nombre de données...

Bonjour à tous,

ex de fonction perso :

Function ligEncadreBas(c As Range) As Long
    Const ligMax As Long = 5000
    Dim fini As Boolean
    Do
        fini = c.Borders(xlEdgeBottom).LineStyle <> xlNone Or c.Row >= ligMax
        Set c = c.Offset(1)
    Loop Until fini
    ligEncadreBas = c.Row - 1
End Function

Adapte la constante ligMax, que la fonction ne parcoure pas 1 million de lignes inutilement.
Tu dois lui passer en paramètre la cellule de début de recherche, qui se fera verticalement depuis cette cellule.
=ligEncadreBas(A3) => 5000 (pas d"encadrement bas trouvé)
=ligEncadreBas(B3) => 6 (un encadré bas trouvé en B6)

5classeur3.xlsm (15.65 Ko)

eric

de rien...

Bonjour eric,

Merci pour la réponse, j'ai moi aussi trouvé une fonction qui remplit bien ce rôle :

Function bordures(plage As Range) As Integer
   If plage.Borders(xlEdgeBottom).LineStyle = xlLineStyleNone Then bordures = 1
End Function

Seulement après je n'arrive pas à la compiler pour obtenir ce que je veux...

J'ai créé une seconde fonction qui me permet de rajouter une ligne à une plage existante :

Sub nvlplage(plage As Range)
    plage = plage.Resize(plage.Rows.count + 1, plage.Columns.count)
End Sub

Mon objectif est de programmer une fonction combinant les deux pour arriver à mon objectif mais je n'y arrive pas je dois faire des erreurs de langage car je ne comprends pas toujours quel type d'élément je manipule.
Cette fonction doit prendre en argument une plage de départ en renvoyer la plage correspondant au tableau.

Ainsi, je pourrai sommer les colonnes correspondant au tableau.

Function finale(plage as Range)
    While bordures(plage)=0:
        plage=nvlplage(plage)
    Wend
    finale=plage 
End function

Merci de votre aide,

Rechercher des sujets similaires à "fonction detection bordures"