Simplification code VBA pour Bordures

Bonjour à tous,

J'ai une nouvelle fois besoin de votre aide.

J'ai le code suivant qui marche très bien :

If Not Intersect(Plage3, Target) Is Nothing And Plage3.BorderAround = True And Plage3.Borders.Item(xlEdgeBottom).Weight = -4138 And Plage3.Borders.Item(xlEdgeLeft).Weight = -4138 And Plage3.Borders.Item(xlEdgeRight).Weight = -4138 And Plage3.Borders.Item(xlInsideVertical).Weight = -4138 And Plage3.Borders.Item(xlInsideHorizontal).Weight = 2 And Plage3.Borders.Item(xlEdgeTop).Weight = 2 Then
    Call SupprBorduresEtLignes
    ActiveCell.Select
    Call Scénarios
End If

Mais je pensais le simplifier pas ce qui suit :

If Not Intersect(Plage3, Target) Is Nothing And Plage3.BorderAround = True And Plage3.XlBordersIndex(9,7,10,11).Weight = -4138  And Plage3.XlBordersIndex(8,12).Weight = 2 Then
    Call SupprBorduresEtLignes
    ActiveCell.Select
    Call Scénarios
End If

Mais le code ci-dessus ne marche pas, j'ai une erreur 438 (propriété ou méthode non géré par cet objet).

Une idée pour solutionner ce problème ?

Merci d'avance.

A++

Wolf76

Re,

A oui, j'ai oublié de dire que je ne sais pas comment déclarer ce Enum dans ma feuille (le code donné ci avant est dans une feuille comme suit) :

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

Set Plage3 = Range(Selection.Address)

'If Not Intersect(Plage3, Target) Is Nothing And Plage3.BorderAround = True And Plage3.Borders.Item(xlEdgeBottom).Weight = -4138 And Plage3.Borders.Item(xlEdgeLeft).Weight = -4138 And Plage3.Borders.Item(xlEdgeRight).Weight = -4138 And Plage3.Borders.Item(xlInsideVertical).Weight = -4138 And Plage3.Borders.Item(xlInsideHorizontal).Weight = 2 And Plage3.Borders.Item(xlEdgeTop).Weight = 2 Then
'    Call SupprBorduresEtLignes
'    ActiveCell.Select
'    Call Scénarios
'End If

If Not Intersect(Plage3, Target) Is Nothing And Plage3.BorderAround = True And Plage3.XlBordersIndex(9, 7, 10, 11).Weight = -4138 And Plage3.XlBordersIndex(8, 12).Weight = 2 Then
    Call SupprBorduresEtLignes
    ActiveCell.Select
    Call Scénarios
End If

Application.EnableEvents = True

End Sub
     With Plage3
          b = (.BorderAround = True)
          If b Then
               For Each bord In Array(9, 7, 10, 11)
                      b = (.Borders(bord).Weight = -4138)
                    If Not b Then Exit For
               Next
          End If

          If b Then
               For Each bord In Array(8, 12)
                    b = (.Borders(bord).Weight = 2)
                    If Not b Then Exit For
               Next
          End If
     End With
     If b Then MsgBox "etc"

or

    With Plage3
          b = (.BorderAround = True)
          If b Then
               For Each bord In Array(9, 7, 10, 11, 8, 12)
                    Select Case bord
                         Case 9, 7, 10, 12: b = (.Borders(bord).Weight = -4138)
                         Case 8, 12: b = (.Borders(bord).Weight = 2)
                    End Select
                    If Not b Then Exit For
               Next
          End If
     End With
     If b Then MsgBox "etc"

Salut BsAlv,

Merci pour tes réponses et ton temps.

Néanmoins ta solution ne rend pas le code plus court.....

Si quelqu'un a une idée avec les énumérations, je suis preneur.

Je pense que mon problème vient de là.

D'avance merci à tous.

A++

Wolf76

parfois, en VBA, on pouvait faire la somme, par example pour ces borders 9+7 = 16, mais ici, ça fonctionne pas, tant pis...

Bonjour

@BsAlv

Un petit rappel de la charte du forum

  • Un minimum de politesse est de rigueur (bonjour, SVP, merci, ...), sans cela vous aurez peu de chance d'obtenir une réponse et vous risquez de voir votre message supprimé par un modérateur.

Profitez en pour la relire.

Bonne journée

Bonjour,

pour raccourcir tu peux supprimer ActiveCell.Select qui ne sert à rien

Tu dis que ton code fonctionne très bien mais comme tu es le seul à savoir ce qu'il est sensé faire, c'est relatif.
Par exemple tu contrôles que les lignes intérieures sont xlThin ou xlMedium, mais pas qu'elles sont affichées (?!?)
XlLineStyle peut très bien être No line...
.BorderAround ne concerne que le contour de la plage.
eric

PS : pour toutes les bordures c'est .Borders
Si tu veux simplifier mets toutes les bordures à la même valeur. Mettre le contour à une autre n'apporte pas grand chose, c'est purement esthétique.
Et si tu veux contrôler si c'est une sélection partielle, il y a peut-être d'autres moyens.

Merci à tous pour votre aide.

A++

Rechercher des sujets similaires à "simplification code vba bordures"