Fonction VBA qui compte les cellules avec bordures

Bonjour,

pour mes besoins personnels j'ai souhaité créer une fonction qui compte dans une plage définie le nombre de cellules comportant des bordures. Ces bordures ont été créées sur certaines cellules uniquement en fonction de conditions spécifiques (dont je vous épargnerai le détail) via l'exécution d'une autre macro qui fonctionne quant à elle correctement.

N'étant pas une star de VBA, j'ai construit le code de ma fonction en m'inspirant de forums divers et variés à ce sujet. Lorsque j'utilise cette fonction, aucune erreur ne m'est envoyée par Excel mais le résultat obtenu est faux.

Détail du code de ma fonction:

Function COUNTCELL_BORDERS(Plage As Range)

Dim i, lineCount, nb, colRef As Integer

'Définition du nombre de ligne de ma plage et du numéro de colonne
lineCount = Plage.Rows.Count
colRef = Plage.Column

'Initialisation de mes compteurs, ma plage commencera toujours à la 4eme ligne
nb = 0
i = 4

'Boucle qui passe en revue chaque cellule de ma plage pour tester si des bordures sont détectées
While i <= lineCount + 3
    If Cells(i, colRef).Borders.LineStyle = True Then
        nb = nb + 1
    End If
    i = i + 1
Wend

End Function

Quelle que soit ma plage, la fonction me renvoie toujours 0 alors que certaines cellules sont bien encadrées.

Apparemment ma condition n'est pas comprise par Excel et donc la variable nb ne s'incrémente jamais.

Je dois certainement faire une erreur dans la manipulation des différents objets et/ou dans la syntaxe.

J'avais également essayé les syntaxes suivantes mais rien n'y fait:

If Cells(i, colRef).BorderAround = True Then

ou

If Cells(i, colRef).Borders.LineStyle = xlDash Then (car il s'agit de bordures en pointillés)

Pourriez-vous svp m'aider à résoudre ce problème qui est vraiment bloquant ?

Par avance, merci.

Bonjour,

Juste une petite question :

Ces bordures ont été créées sur certaines cellules uniquement en fonction de conditions spécifiques (dont je vous épargnerai le détail) via l'exécution d'une autre macro qui fonctionne quant à elle correctement.

Pourquoi dès lors, ne pas effectuer ce comptage, pendant le déroulement de cette macro?

Sinon, essaie ainsi :

Function COUNTCELL_BORDERS(Plage As Range)
Dim Cel As Range
For Each Cel In Plage
    If Not IsNull(Cel.Borders.TintAndShade) Then COUNTCELL_BORDERS = COUNTCELL_BORDERS + 1
Next Cel
End Function

Mais sans fichier exemple, pas trop facile de savoir ce que tu veux exactement.

Bon courage

Merci, ça marche !

Par contre peux-tu m'expliquer la logique puisque dans le code tu utilises le nom de la fonction comme une variable que tu incrémentes : COUNTCELL_BORDERS = COUNTCELL_BORDERS + 1

Je ne savais pas que c'était possible ?! Comment se fait-il que ça ne marche pas avec un compteur indépendant comme je l'ai défini (variable nb dans mon code)?

Re-,

Je n'avais pas fait attention à la fin de ton code...

Comme tu cherches à obtenir une valeur via une fonction, il faut donc référencer cette fonction dans ton code...

Si tu avais mis en fin de ton code :

COUNTCELL_BORDERS = nb

cela aurait peut-être également fonctionné...(je n'ai pas testé)

Bon courage

Rechercher des sujets similaires à "fonction vba qui compte bordures"