IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Changer couleur des bordures des cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut Changer couleur des bordures des cellules
    Bonjour à tous,

    Voilà mon soucis j'ai des bordures de différentes épaisseurs et des des tableaux de différente taille. Je souhaiterai changer la couleur de mes bordures qui est actuellement noir par une autre couleur.

    Je n'ai aucune idées de comment faire. Parce que chaque bordure est indépendante il y a donc 4 bordures par cellule. Je pense qu'il faut tester l’existence de bordure mais je ne sais pas comment faire.

    Quelqu'un aurai des pistes?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour,

    déjà en activant le Générateur de macros puis en modifiant manuellement une bordure,
    une base de code est livrée sur un plateau !
    Ensuite il n'est pas difficile de tester la valeur d'une propriété Borders, et en consultant l'aide VBA intégrée …



    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Sans parler de la détection mais juste ma modification des couleurs avec l’enregistreur j'ai pu faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub Macro2()
    '
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
        End With
        With Selection.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
        End With
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
        End With
    End Sub
    Le soucis c'est que à l'intérieur du tableau ça met la même épaisseur partout

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Ça marche bien en faisant le faisant cellule par cellule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub Macro()
     
    For i = 2 To 11
        For j = 2 To 4
            Cells(i, j).Select
            Selection.Borders(xlDiagonalDown).LineStyle = xlNone
            Selection.Borders(xlDiagonalUp).LineStyle = xlNone
            With Selection.Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .Color = -16776961
                .TintAndShade = 0
            End With
            With Selection.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Color = -16776961
                .TintAndShade = 0
            End With
            With Selection.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Color = -16776961
                .TintAndShade = 0
            End With
            With Selection.Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Color = -16776961
                .TintAndShade = 0
            End With
            With Selection.Borders(xlInsideVertical)
                .LineStyle = xlContinuous
                .Color = -16776961
                .TintAndShade = 0
            End With
            With Selection.Borders(xlInsideHorizontal)
                .LineStyle = xlContinuous
                .Color = -16776961
                .TintAndShade = 0
            End With
        Next
    Next
    End Sub
    Mais c'est vraiment moche il n'y a pas moyen de raccourcir un peu ce code?
    Est ce que quelqu'un peu me dire à quoi sert le TinAndShade?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution à adapter avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Sub TesterFormaterLesBordures()
     
    Dim AireATraiter As Range
    Dim CouleurBordure As Variant
     
        Set AireATraiter = Sheets("Feuil3").Range(Range("C5"), Range("H10"))
        CouleurBordure = Array(247, 150, 70)
     
        FormaterLesBordures AireATraiter, xlMedium, xlHairline, CouleurBordure, True
     
        Set AireATraiter = Nothing
     
    '     TypeDeTrait : très fin : xlHairline 1, fin : xlThin 2, moyen : xlMedium -4138, épais : xlThick 4
     
    End Sub
     
     
    Sub FormaterLesBordures(ByVal AireABorder As Range, ByVal TypeDeTraitExterieur As Variant, ByVal TypeDeTraitInterieur As Variant, ByVal CouleurTrait As Variant, ByVal AvecLigneTitre As Boolean)
     
            With AireABorder
     
                 With .Borders(xlEdgeTop)
                      .Weight = TypeDeTraitExterieur
                      .Color = RGB(CouleurTrait(0), CouleurTrait(1), CouleurTrait(2))
                 End With
     
                 With .Borders(xlEdgeBottom)
                      .Weight = TypeDeTraitExterieur
                      .Color = RGB(CouleurTrait(0), CouleurTrait(1), CouleurTrait(2))
                 End With
     
                 With .Borders(xlEdgeLeft)
                      .Weight = TypeDeTraitExterieur
                      .Color = RGB(CouleurTrait(0), CouleurTrait(1), CouleurTrait(2))
                 End With
     
                 With .Borders(xlEdgeRight)
                      .Weight = TypeDeTraitExterieur
                      .Color = RGB(CouleurTrait(0), CouleurTrait(1), CouleurTrait(2))
                 End With
     
                 If AireABorder.Rows.Count > 1 Then
                    With .Borders(xlInsideHorizontal)
                         .Weight = TypeDeTraitInterieur
                         .Color = RGB(CouleurTrait(0), CouleurTrait(1), CouleurTrait(2))
                    End With
                 End If
     
                 If AireABorder.Columns.Count > 1 Then
                    With .Borders(xlInsideVertical)
                         .Weight = TypeDeTraitInterieur
                         .Color = RGB(CouleurTrait(0), CouleurTrait(1), CouleurTrait(2))
                    End With
                 End If
     
                 If AvecLigneTitre = True Then
                    With AireABorder.Rows(1).Borders(xlEdgeBottom)
                         .Weight = TypeDeTraitExterieur
                         .Color = RGB(CouleurTrait(0), CouleurTrait(1), CouleurTrait(2))
                    End With
                 End If
     
          End With
     
    End Sub
    Cordialement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Monsieur Mrfreeze117,

    Vous avez posté un nouveau message hier après midi. Ayez au moins la correction de répondre aux réponses bonnes ou mauvaises qu'on vous a faites le matin même.

    Eric KERGRESSE.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Désolé de ne pas avoir répondu plus vite mais j'ai pas eu le temps hier d'adapter ton code je me suis servi d'une autre solution. (et oui j'ai posté un autre message, on peut faire plusieurs chose à la fois ce n'est pas interdit que je sache) Ce n'est pas la peine d'être agressif je suis toujours resté très courtois.

    Je viens de regarder ton code et de ce que je comprends tu ne testes pas l’existence de bordure.

    Pour ceux que cela intéresse j'ai fait un code qui change la couleur des bordures sans changer épaississeur. Par contre s'il n'y a pas de bordures ça en créé des normales. Pour ce que j'avais à faire c'était suffisant. (La couleur ici est du bleu foncé).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub Macro()
     
    imax = Cells.Find("*", , , , , xlPrevious).Row
     
    For i = 1 To 19
     
     
        End If
        For j = 1 To 5
            Cells(i, j).Select
            Selection.Borders(xlDiagonalDown).LineStyle = xlNone
            Selection.Borders(xlDiagonalUp).LineStyle = xlNone
            With Selection.Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .Color = -10737366
                .TintAndShade = 0
            End With
            With Selection.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Color = -10737366
                .TintAndShade = 0
            End With
            With Selection.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Color = -10737366
                .TintAndShade = 0
            End With
            With Selection.Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Color = -10737366
                .TintAndShade = 0
            End With
            With Selection.Borders(xlInsideVertical)
                .LineStyle = xlContinuous
                .Color = -10737366
                .TintAndShade = 0
            End With
            With Selection.Borders(xlInsideHorizontal)
                .LineStyle = xlContinuous
                .Color = -10737366
                .TintAndShade = 0
            End With
        Next
    Next
    End Sub

    Par contre pour ma culture personnel je suis intéressé si quelqu'un trouve comment tester l’existence des bordures.



    Je ne sais pas trop si je dois clôturer ce post parce que seulement une partie a été résolu.

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Avec le Générateur de macros, encore lui, le meilleur ami du débutant, sélectionner une cellule avec bordure
    puis la configurer de nouveau sans bordure.

    Avec le code ainsi obtenu, il est donc aisé de lire la couleur d'une bordure et vérifier si elle correspond à celle sans …




    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'accuse réception de votre message.

    Eric KERGRESSE.

Discussions similaires

  1. Couleur de Bordure des cellules d'un dataGridView
    Par marocdivers dans le forum C#
    Réponses: 1
    Dernier message: 22/11/2011, 18h17
  2. Réponses: 2
    Dernier message: 23/12/2010, 15h43
  3. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  4. [MySQL] Utilisation des fonctions des récupérations des données
    Par Konrad Florczak dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2006, 15h17
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo