Bordures selon .find

  • Initiateur de la discussion Initiateur de la discussion Raka
  • Date de début Date de début

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 !

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

Dernière édition:
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

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

Dernière édition:
- 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
6
Affichages
364
Réponses
2
Affichages
300
Réponses
1
Affichages
212
Retour