Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise en forme de plages nommées par VBA

3 réponses
Avatar
luck82
Bonjour;

Voila j'ai une "Base de Bonnée" excel 97 qui contient 300 a 400 lignes de
données sur 14 colonnes (de A a O). Le nombre de lignes évolues au fil du
temps.
Dans la colonne A j'ai des plages nommées (du style: ref_1=$A$1:$A$10); le
nombre de plage nommées et leur largeur évolué au fil du temps.
Pour des raisons de rendu visuel, j'ai fais une mise en forme bordure par
plage de données.
En reprenant l'exemple:
pour les lignes: bordure supérieur" = "A1
à O1 et bordure inférieur "="A10 à O10
Pour les colonnes: une bordure par
colonne.

Mon problème c'est que lors d'un trie ou autre, les bordures ne
correspondent plus au plages nommées (bordure de la ref_1 qui empièté sur la
ref_2....).

Ce que je voudrai faire par VBA c'est virer l'ensemble des bordures et en
refaire des neufs qui correspondes aux plages nommées en colonne A.

Si quelqu'un à une idée de comment faire?
J'ai beau chercher sur le net et j'ai même acheté un bouquin (formation à
VBA de microsoft press: que je ne conseil pas) mais je n'y arrive pas.

Merci par avance.

3 réponses

Avatar
luck82
Bonjour;

Après pas mal de temps j'ai réussi à pondre ca (voire en bas du post).
Ca marche tres bien mais ce ne s'applique qu'a la colonne A (et c'est normal
puisque les plages nommées sont en A).
Mais je voudrai que ma macro fasse cette mise en forme jusqu'a la colonne O
et là je cale.
Je suppose qu'il faut faire un truc du style Nom= Nom + NumRows: mais bon
ca ne marche pas.
Voila si quelqu'un pouvait m'aider.
Merci par avance

Sub bordure()

'
Dim Nom As Name
For Each Nom In ActiveWorkbook.Names
Range(Nom).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Range(Nom).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Next Nom
End Sub
Avatar
luck82
Bon j'ai trouvé une solution mais c'est pas très élégant (le code tout en
bas):
Je recopie le morceau de code suivant en faisant varié à chaque fois le
nombre de colonnes de la fonction Offset de 0 à 14; soit 15 fois ce petit
morceau de code.
Si quelqu'un à une idée pour faire un truc du style: for Offset(0,0) to
offset(0,14) merci par avance.

With Range(Nom).Offset(0, 1).Borders
.LineStyle = xlContinuous
.Item(xlEdgeLeft).LineStyle = xlContinuous
.Item(xlEdgeTop).LineStyle = xlContinuous
.Item(xlEdgeBottom).LineStyle = xlContinuous
.Item(xlEdgeRight).LineStyle = xlContinuous
.Item(xlInsideVertical).LineStyle = xContinuous
.Item(xlInsideHorizontal).LineStyle = xContinuous
End With

Voici mon code de ma macro:

Sub bordure()
'
Dim Nom As Name

With Range("A5:T1000").Borders
.LineStyle = xlNone
.Item(xlEdgeLeft).LineStyle = xlNone
.Item(xlEdgeTop).LineStyle = xlNone
.Item(xlEdgeBottom).LineStyle = xlNone
.Item(xlEdgeRight).LineStyle = xlNone
.Item(xlInsideVertical).LineStyle = xlNone
.Item(xlInsideHorizontal).LineStyle = xlNone

End With

For Each Nom In ActiveWorkbook.Names

With Range(Nom).Offset(0, 0).Borders
.LineStyle = xlContinuous
.Item(xlEdgeLeft).LineStyle = xlContinuous
.Item(xlEdgeTop).LineStyle = xlContinuous
.Item(xlEdgeBottom).LineStyle = xlContinuous
.Item(xlEdgeRight).LineStyle = xlContinuous
.Item(xlInsideVertical).LineStyle = xContinuous
.Item(xlInsideHorizontal).LineStyle = xContinuous
End With
With Range(Nom).Offset(0, 1).Borders
.LineStyle = xlContinuous
.Item(xlEdgeLeft).LineStyle = xlContinuous
.Item(xlEdgeTop).LineStyle = xlContinuous
.Item(xlEdgeBottom).LineStyle = xlContinuous
.Item(xlEdgeRight).LineStyle = xlContinuous
.Item(xlInsideVertical).LineStyle = xContinuous
.Item(xlInsideHorizontal).LineStyle = xContinuous
End With
'.................................

Next Nom
Range("A5").Select
End Sub

Cordialement
Avatar
luck82
J'ai trouvé la solution.
Voici le code:

Sub bordure()
Dim Nom As Name
Dim i As Byte

Range("A5:AI1000").Select

Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

For Each Nom In ActiveWorkbook.Names
For i = 0 To 14
With Range(Nom).Offset(0, i).Borders

.LineStyle = xlContinuous
.Item(xlEdgeTop).LineStyle = xlContinuous
.Item(xlEdgeRight).LineStyle = xlContinuous
.Item(xlInsideHorizontal).LineStyle = xContinuous

End With
Next i
Next Nom
Range("A5").Select

End Sub