Créer des bordures dans les cellules non vides d'une plage.

P

Pias

Guest
Bonsoir le forum,

Est-ce que quelqu’un peut me dire, SVP, s’il est possible de modifier la macro ci-dessus de manière à que les bordures puissent être crées uniquement dans les cellules, non vides ?

Merci d’avance.

Sub voir_commandes()

Sheets("Commandes").Select

Range("A8:C10008").Select
Selection.Borders(xlInsideVertical).LineStyle = xlContinuous
Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous
Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous
Selection.Borders(xlEdgeRight).LineStyle = xlContinuous
Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous
Selection.Borders(xlEdgeTop).LineStyle = xlContinuous
End Sub

Amicalement

...On se lasse de tout sauf d’apprendre !..
 
H

Hervé

Guest
Bonjour

essaye ceci :

Public Sub vev()
dim c as range


For Each c In Sheets("Commandes").Range("A8:C10008")

If c.Value <> "" And c.Value <> 0 Then
c.Borders(xlEdgeLeft).LineStyle = xlContinuous
c.Borders(xlEdgeRight).LineStyle = xlContinuous
c.Borders(xlEdgeBottom).LineStyle = xlContinuous
c.Borders(xlEdgeTop).LineStyle = xlContinuous
End If
Next c
End Sub

Cette macro met une bordure au cellule non vide, mais les cellules comportant une formule à zéro sont épargnées.

Salut
Hervé
 
O

omicron

Guest
Bonsoir Pias,

Tu peux essayer :

=====================================================
Sub voir_commandes()

' Paramétrage de la plage de cellules à traiter
Set Rng=Sheets("Commandes").Range("A8:C10008")

' Effacement de toutes les bordures des cellules de la plage
Rng.Borders(xlDiagonalDown).LineStyle = xlNone
Rng.Borders(xlDiagonalUp).LineStyle = xlNone
Rng.Borders(xlEdgeLeft).LineStyle = xlNone
Rng.Borders(xlEdgeTop).LineStyle = xlNone
Rng.Borders(xlEdgeBottom).LineStyle = xlNone
Rng.Borders(xlEdgeRight).LineStyle = xlNone
Rng.Borders(xlInsideVertical).LineStyle = xlNone
Rng.Borders(xlInsideHorizontal).LineStyle = xlNone

' Encadrement de toutes les cellules non vides de la plage
For Each Cel in Rng.Cells
If Cel <> "" then
Cel.Borders(xlEdgeLeft).LineStyle = xlContinuous
Cel.Borders(xlEdgeRight).LineStyle = xlContinuous
Cel.Borders(xlEdgeBottom).LineStyle = xlContinuous
Cel.Borders(xlEdgeTop).LineStyle = xlContinuous
Endif
Next Cel

End Sub
=====================================================

Attention !!!
S'il y a un nombre important de cellules à traiter, ce qui paraît être le cas, l'opération peut durer assez longtemps. Si celle-ci doit être fréquemment exécuté, il serait préférable d'intercepter l'évènement Change de la feuille, et de tester si la cellule changée fait partie de la plage. Ensuite selon qu'elle est vide ou non, on affiche ou l'on masque immédiatement la bordure.

Je n'ai pas testé, si cela ne fonctionne pas, rn'hésite pas à me recontacter si tu as un problème quelconque.

Cordialement.

Omicron.
 
P

Pias

Guest
Bonsoir le forum, Hervé et Omicron

J’ai testé les 2 macros et elles fonctionnent parfaitement.
Un tout grand merci pour votre serviabilité.
et bonne nuit.

Amicalement

...On se lasse de tout sauf d’apprendre !..
 
S

STéphane

Guest
bonsoir

un autre exemple
la sélection des cellules dans cet exemple inclue la sélecton des cellules contenant des formules, une erreur se produit s´il ný a pas de formules

Application.ScreenUpdating = False
Union(Selection.SpecialCells(xlCellTypeFormulas), Selection.SpecialCells(xlCellTypeConstants, 23)).Select
'Selection.BorderAround ColorIndex:=3, Weight:=xlThick
For Each cl In Selection
For i = 1 To 4
With cl.Borders(i)
.LineStyle = xlContinuous
.Weight = xlThin
End With
Next i
Next cl


stephane
 
A

andré

Guest
Salut à vous,

Je ne m'y connais pas en macro, mais par formule c'est très aisé !

Sélectionner la plage (ici A8:C10008), puis menu Format / Mise en forme conditionnelle / la formule est : =A8<>"" / Format / Bordure / OK / OK

Faire attention qu'Xl n'ajoute pas automatiquement des "", le cas échéant les effacer.

Ândré.
 

Discussions similaires

Réponses
5
Affichages
1 K

Statistiques des forums

Discussions
312 231
Messages
2 086 430
Membres
103 207
dernier inscrit
Michel67