Bordures selon .find

Raka

XLDnaute Occasionnel
Bonjour !

Je suis actuellement devant un truc que je ne comprends pas bien. Ou plutôt, je ne comprends pas tout à fait d'où vient la malfonction. (sans doute de la façon dont j'utilise find... mais qui sait ?)

Je souhaite effectuer une recherche de client par nom, et si le nom en question se retrouve dans une ou plusieurs plages, créer une bordure verte autour de toute les plages concernées. Sinon, une bordure noire.

Voici le point auquel j'en suis arrivé, avec ce code-ci, tout se colore en vert sans respecter la condition. Je ne pense pas être très loin du but, mais...
Une âme charitable pourrait-elle me montrer où j'ai fait une erreur ? Je cherche depuis plus d'une heure en vain entre docs et tutos.

EDIT : Je me rends compte que j'ai partagé une ancienne version test.
Dans la macro, j'ai corrigé O12 enO5, naturellement...

Cela dit, ça ne fonctionne toujours pas comme prévu ; la case "entière" ne se contoure pas, car les suivantes prennent le pas et font du noir.
Je vais tenter de corriger ça tout seul mais... si entre temps quelqu'un sait comment faire sans balancer des IF partout, je prends :)
 

Pièces jointes

  • Localisation + bordures.xlsm
    20.4 KB · Affichages: 7
Dernière édition:

Raka

XLDnaute Occasionnel
Bon, je me suis débrouillé à grands coups de If pas jolis et plutôt lents, mais finalement, ça donne un truc qui fonctionne à peu près :)

Cela dit, je prends toute suggestion d'amélioration.
Edit : Et un screenapplication false/true au passage pour éviter du lag. Donc finalement ça fonctionne comme je veux.

Mais s'il y a un moyen plus "simple" de coder ce que j'ai codé, je suis curieux. Parce que là, ça m'a l'air lourd.
 

Pièces jointes

  • Localisation + bordures.xlsm
    21.8 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici une méthode pour localiser vos petits :

VB:
Sub Border()
    Dim plg As Range, c As Range, Prem As Range
    Dim Colonne As Long, Ligne As Long
    Dim texte As String
    With ThisWorkbook.Sheets("Feuil1")
        Set plg = .Range(Cells(3, 2), Cells(42, 13))
        texte = plg.Parent.Range("O5").Text
    End With
    With plg.Borders
        .LineStyle = xlContinuous
        .ThemeColor = 2
        .TintAndShade = 0
        .Weight = xlThick
    End With
 
' Ne faire une recherche que si le texte n'est pas vide
    If texte <> "" Then
        '

        Set c = plg.Find(texte)
        If Not c Is Nothing Then
            Set Prem = c
        
            Do
        
                Colonne = Int((c.Column - plg.Column) / 2)
                Ligne = Int((c.Row - plg.Row) / 8)
              
                  '
                  ' Ne changer que la couleur des bordures                
                 With plg.Offset(Ligne * 8, Colonne * 2).Resize(8, 2)
                    .Borders(xlEdgeTop).ThemeColor = 10
                    .Borders(xlEdgeRight).ThemeColor = 10
                    .Borders(xlEdgeBottom).ThemeColor = 10
                    .Borders(xlEdgeLeft).ThemeColor = 10
                End With

                Set c = plg.FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Prem.Address
        End If
    End If
End Sub

P.S. pour les bordures et mises en forme, je vous laisse corriger suivant votre besoin.

Cordialement
 

Pièces jointes

  • Localisation + bordures.xlsm
    31 KB · Affichages: 2
Dernière édition:

Discussions similaires

Réponses
30
Affichages
1 K

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou