VBA Bordures sur ligne si cellule non vide

Fredox

XLDnaute Occasionnel
Bonjour,

Je souhaiterais avoir des bordures de cellules tans que la cellule CX n'est pas vide, sinon la macro s'arrête.

Ma plage de colonnes lignes est A8:Q1008, la valeur de référence est contenu en celulle C8 (puis C9, C10 et ainsi de suite tant que le contenu n'est pas différent de rien)

Pour le format des bordures sur la ligne tant qu'en C il y a du contenu:
Code:
     .borders(xlInsideVertical).LineStyle = 1
     .borders(xlInsideVertical).Color = RGB(128, 128, 128)
     .borders(xlEdgeLeft).Weight = 3
     .borders(xlEdgeLeft).Color = RGB(128, 128, 128)
     .borders(xlEdgeRight).Weight = 3
     .borders(xlEdgeRight).Color = RGB(128, 128, 128)

Possible d'avoir un coup de main pour la macro ?

Merci
 

Staple1600

XLDnaute Barbatruc
Re

Rien.
j'ai juste pris soin d'informer le demandeur d'un éventuel souci.
C'est que j'appelle de la prévenance.
Tant mieux si sur le fichier réel, il n’apparaît pas.
Mais au moins, j'aurai prévenu.

PS: Ça nous regarde, vu qu'on en parle depuis 10 minutes ;)
 

Staple1600

XLDnaute Barbatruc
Re

Sur la zone A8:A1008, pour chaque ligne, la seule référence c'est en C, si C est différent de rien alors toute la ligne se voit appliquer les bordures, et ainsi de suite pour les lignes suivantes.
Donc de C8 à C1008, non ?
C8:C22 ne sont pas vide
Or par inadvertance, C23 ,C24 et C25 ont été effacées.
Par contre C26:C1008 ne sont pas vides.
Quelles plages auront des bordures ? ;)
 

TooFatBoy

XLDnaute Barbatruc
La question est peut-être effectivement mal posée.

D'habitude tu es si scrupuleux pour répondre strictement à la question, que c'est étonnant que tu extrapoles de la sorte ici.
Mais c'est bien. Je dirais même que c'est mieux. ;)
 

Staple1600

XLDnaute Barbatruc
Re

Donc au cas où
(en attendant plus limpide)
VB:
Sub Bordures_III()
Dim p As Range, t
With Cells(8, Columns.Count).Resize(1001)
  .Formula = "=REPT(1600,C8<>"""")*1"
  Set p = .SpecialCells(xlCellTypeFormulas, 1)
  t = Split(p.EntireRow.Address, ",")
    For i = 0 To UBound(t)
      With Rows(t(i)).Resize(, 17).Borders
      .Weight = 3: .Color = RGB(128, 128, 128)
      End With
    Next
.ClearContents
End With
End Sub
 

jmfmarques

XLDnaute Accro
Bonjour
Je vais quant à moi essayer de faire face à toutes les hypothèses, selon la méthode suivante :
1) déterminer la plage de la colonne C contenant des valeurs
VB:
Set plage = Range("C:C").SpecialCells(xlConstants)
et après ? ___>>
-soit il s'agit de formater jusqu'à un vide (et pas plus loin) et alors :
on formate uniquement plage.areas(1).entirerow
- soit il s'agit au contraire de formater l'ensemble des areas et alors :
on formate plage.entirerow
Je pars maintenant du principe selon lequel Fredox sait ce qu'il veut (quelle est la bonne hypothèse à appliquer) et comprend ce que je viens d'exposer (facile).
J'ajoute que l'adoption de cette méthode (et ce : quelle que soit l'hypothèse) facilite grandement le basculement rendu éventuellement nécessaire en cas d'effacement d'une cellule de la colonne C ou de remplacement, dans la colonne C, d'une cellule vide par une cellule contenant une valeur ;)
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
-soit il s'agit de formater jusqu'à un vide (et pas plus loin) et alors :
on formate uniquement plage.areas(1).entirerow
- soit il s'agit au contraire de formater l'ensemble des areas et alors :
on formate plage.entirerow
J'adore cette solution !

Je ne connaissais pas ".areas(x)".
Je suppose que s'il y a plusieurs plages de cellules dans la variable "plage", cela permet de ne travailler que sur la plage de cellules désirée.
C'est super pratique.
 

patricktoulon

XLDnaute Barbatruc
re
bonjour j'abonde dans le sens de jmfmarques
on filtre on bordure les areas point barre

dans ce genre là (si j'ai bien compris la demande
VB:
Sub test()
    With ActiveSheet.Range("A2:Q" & Cells(Rows.Count, "c").End(xlUp).Row)
        .AutoFilter Field:=3, Criteria1:="<>"
        Set plage = .SpecialCells(xlVisible)
        .AutoFilter
        With plage
            .BorderAround 1, 2, , vbRed
            With .Borders(xlInsideVertical): .LineStyle = xlContinuous: .ColorIndex = 0: End With
            With .Borders(xlInsideHorizontal): .LineStyle = xlContinuous: .ColorIndex = 0: End With
        End With
    End With
End Sub
résultat
demo3.gif
 

Discussions similaires

Réponses
8
Affichages
640

Statistiques des forums

Discussions
312 071
Messages
2 085 049
Membres
102 766
dernier inscrit
Awiix