OVH Cloud OVH Cloud

Format bordures VBA

5 réponses
Avatar
JacquesH
Bonjour à toutes et tous,

Un petit problème difficile à résoudre pour moi !!!

J'ai un tableau EXCEL de A1 à J(x), mis en forme avec des bordures
(xlThin) et classé sur la colonne I : il y a donc par exemple de I2 à I
10 la valeur 1, de I11 à I15 la valeur 2...

Je souhaite mettre un autre type de bordure (xlmedium par exemple) à
chaque fois que la valeur de la colonne I change. Cependant, il faut que
la mise en forme s'effectue sur l'ensemble de la ligne (bordure entre
A10-J10 et A11-J11 dans l'exemple ci-dessus.

Je sais le faire avec la mise en forme conditionnelle (si I11 <> I10
alors changement de style de bordure) mais cela me paraît bien compliqué
car je dois la mettre sur toutes les cellules. De plus, il n'y a pas un
choix très important de type de bordures dans les MFC.

Merci par avance de votre aide toujours précieuse.

Jacques

5 réponses

Avatar
Yvan
Bonjour Jacques

mais cela me paraît bien compliqué car je dois la mettre sur toutes les
cellules


Pourquoi compliqué? Il te suffit de sélectionner ta plage complète avant de
définir la MFEC.
Attention simplement à l'adressage! Il faut mettre $J1 et non pas J1 ou $J$1
ou J$1. Tu écris la condition qui convient pour la cellule active dans la
sélection, et Excel se débrouillera.

De plus, il n'y a pas un choix très important de type de bordures dans les
MFC.


C'est vrai. Un autre moyen de t'en sortir est de passer par VBA:

Essaies ceci (à copier dans le code de la feuille concernée:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, j As Integer, Trait As Integer
For i = 1 To 15
Trait = xlMedium
If Cells(i, 9) = Cells(i + 1, 9) Then Trait = xlThin
For j = 1 To 9
Cells(i, j).Borders(xlEdgeBottom).Weight = Trait
Next j
Next i
End Sub

Cà te convient?

@+

Yvan

"JacquesH" a écrit dans le message de
news:
Bonjour à toutes et tous,

Un petit problème difficile à résoudre pour moi !!!

J'ai un tableau EXCEL de A1 à J(x), mis en forme avec des bordures
(xlThin) et classé sur la colonne I : il y a donc par exemple de I2 à I 10
la valeur 1, de I11 à I15 la valeur 2...

Je souhaite mettre un autre type de bordure (xlmedium par exemple) à
chaque fois que la valeur de la colonne I change. Cependant, il faut que
la mise en forme s'effectue sur l'ensemble de la ligne (bordure entre
A10-J10 et A11-J11 dans l'exemple ci-dessus.

Je sais le faire avec la mise en forme conditionnelle (si I11 <> I10
alors changement de style de bordure) mais cela me paraît bien compliqué
car je dois la mettre sur toutes les cellules. De plus, il n'y a pas un
choix très important de type de bordures dans les MFC.

Merci par avance de votre aide toujours précieuse.

Jacques


Avatar
isabelle
bonjour Jacques,

For i = 2 To Range("J65536").End(xlUp).Row
If Range("J" & i) <> Range("J" & i + 1) Then
With Range("A" & i & ":J" & i).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
End If
Next

isabelle

Bonjour à toutes et tous,

Un petit problème difficile à résoudre pour moi !!!

J'ai un tableau EXCEL de A1 à J(x), mis en forme avec des bordures
(xlThin) et classé sur la colonne I : il y a donc par exemple de I2 à I
10 la valeur 1, de I11 à I15 la valeur 2...

Je souhaite mettre un autre type de bordure (xlmedium par exemple) à
chaque fois que la valeur de la colonne I change. Cependant, il faut que
la mise en forme s'effectue sur l'ensemble de la ligne (bordure entre
A10-J10 et A11-J11 dans l'exemple ci-dessus.

Je sais le faire avec la mise en forme conditionnelle (si I11 <> I10
alors changement de style de bordure) mais cela me paraît bien compliqué
car je dois la mettre sur toutes les cellules. De plus, il n'y a pas un
choix très important de type de bordures dans les MFC.

Merci par avance de votre aide toujours précieuse.

Jacques


Avatar
Yvan
Sorry, Jacques.

J'ai commis une erreur dans la procédure que je t'ai proposé. (J'ai pris la
colonne i en référence au lieu de la colonne J.

Il faut donc remplacer les "9" par des "10" pour avoir le résultat escompté.

Par ailleurs, j'ai fixé d'autorité à 15 le nombre de lignes traitées. A
adapter selon tes besoins évidemment.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, j As Integer, Trait As Integer
For i = 1 To 150 ' 150 par exemple
Trait = xlMedium
If Cells(i, 10) = Cells(i + 1, 10) Then Trait = xlThin
For j = 1 To 10 ' 10 ou autre chose
Cells(i, j).Borders(xlEdgeBottom).Weight = Trait
Next j
Next i
End Sub

@+

Yvan
Avatar
JacquesH
Bonjour Yvan,

Je viens de tester la macro, je l'ai un peu adapté à mes besoins
réels, c'est parfait.

Merci de ton aide.

Jacques

Bonjour Jacques


mais cela me paraît bien compliqué car je dois la mettre sur toutes les
cellules



Pourquoi compliqué? Il te suffit de sélectionner ta plage complète avant de
définir la MFEC.
Attention simplement à l'adressage! Il faut mettre $J1 et non pas J1 ou $J$1
ou J$1. Tu écris la condition qui convient pour la cellule active dans la
sélection, et Excel se débrouillera.


De plus, il n'y a pas un choix très important de type de bordures dans les
MFC.



C'est vrai. Un autre moyen de t'en sortir est de passer par VBA:

Essaies ceci (à copier dans le code de la feuille concernée:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, j As Integer, Trait As Integer
For i = 1 To 15
Trait = xlMedium
If Cells(i, 9) = Cells(i + 1, 9) Then Trait = xlThin
For j = 1 To 9
Cells(i, j).Borders(xlEdgeBottom).Weight = Trait
Next j
Next i
End Sub

Cà te convient?

@+

Yvan

"JacquesH" a écrit dans le message de
news:

Bonjour à toutes et tous,

Un petit problème difficile à résoudre pour moi !!!

J'ai un tableau EXCEL de A1 à J(x), mis en forme avec des bordures
(xlThin) et classé sur la colonne I : il y a donc par exemple de I2 à I 10
la valeur 1, de I11 à I15 la valeur 2...

Je souhaite mettre un autre type de bordure (xlmedium par exemple) à
chaque fois que la valeur de la colonne I change. Cependant, il faut que
la mise en forme s'effectue sur l'ensemble de la ligne (bordure entre
A10-J10 et A11-J11 dans l'exemple ci-dessus.

Je sais le faire avec la mise en forme conditionnelle (si I11 <> I10
alors changement de style de bordure) mais cela me paraît bien compliqué
car je dois la mettre sur toutes les cellules. De plus, il n'y a pas un
choix très important de type de bordures dans les MFC.

Merci par avance de votre aide toujours précieuse.

Jacques







Avatar
JacquesH
Bonjour Isabelle et merci à tous les deux.

Jacques

bonjour Jacques,

For i = 2 To Range("J65536").End(xlUp).Row
If Range("J" & i) <> Range("J" & i + 1) Then
With Range("A" & i & ":J" & i).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
End If
Next

isabelle


Bonjour à toutes et tous,

Un petit problème difficile à résoudre pour moi !!!

J'ai un tableau EXCEL de A1 à J(x), mis en forme avec des bordures
(xlThin) et classé sur la colonne I : il y a donc par exemple de I2 à
I 10 la valeur 1, de I11 à I15 la valeur 2...

Je souhaite mettre un autre type de bordure (xlmedium par exemple)
à chaque fois que la valeur de la colonne I change. Cependant, il faut
que la mise en forme s'effectue sur l'ensemble de la ligne (bordure
entre A10-J10 et A11-J11 dans l'exemple ci-dessus.

Je sais le faire avec la mise en forme conditionnelle (si I11 <>
I10 alors changement de style de bordure) mais cela me paraît bien
compliqué car je dois la mettre sur toutes les cellules. De plus, il
n'y a pas un choix très important de type de bordures dans les MFC.

Merci par avance de votre aide toujours précieuse.

Jacques