VBA - bordures tableau
Bonjour,
Pour le travail il faut que je mette en place un fichier planning, pour des interventions.
Je dois me baser sur le fichier qui est utilisé actuellement. Les journées des techniciens sont découpées en demi-journée. Il y a donc deux lignes par techniciens.
Afin d'avoir une trame qui ne bouge pas (puisque plusieurs utilisateurs, qui utilise plus ou moins bien excel) je me demandais si à l'aide d'une macro, il serait possible de déterminer les bordures de mes cellules.
Éventuellement avoir un bouton qui rétablirait les bordures "par défaut" du tableau.
Je commence seulement avec les macros, et sur ce fichier j'ai énormément d'idées qui requiert des macros que j'ai du mal à mettre en place.
En espérant que vous pourrez m'aider.
Je vous joint un fichier avec les bordures que je souhaiterais.
Évidemment il y a beaucoup plus de ligne et de colonne, le fichier est juste un exemple de ce que je voudrais.
Salut Mad-AC,
quelque chose comme ça?
Pour remettre de l'ordre dans le bazar, à condition que la structure soit toujours identique, bien sûr, double-clique sur une des cellules-année... (2020).
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim rCel As Range
Dim iOK%, iRowC%, iRow1%, iRow2%, iCol%, sCol$, sAdr$
'
If Not Intersect(Target, Columns(3)) Is Nothing Then
If Selection.Cells(1, 1).Value > 2000 Then
Cancel = True
Application.ScreenUpdating = False
Cells.Borders.LineStyle = xlNone
On Error Resume Next
'
Set rCel = UsedRange.Find(what:=Target, lookat:=xlWhole, searchdirection:=xlNext)
iRowC = Range("B" & Rows.Count).End(xlUp).Row
If Not rCel Is Nothing Then
sAdr = rCel.Address
Do
iRow1 = rCel.Row
iCol = Cells(rCel.Row + 1, Columns.Count).End(xlToLeft).Column
sCol = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
Set rCel = UsedRange.FindNext(rCel)
If rCel.Address = sAdr Then iOK = 1
iRow2 = IIf(iOK = 0, rCel.Row - 1, iRowC)
Range("A" & iRow1 & ":" & sCol & iRow2).Borders.LineStyle = 1
Union(Range("A" & iRow1).Resize(2, 2), Range("A" & iRow1 + 2), Range("C" & iRow1)).BorderAround Weight:=xlMedium
For x = 2 To 3
For y = iRow1 + 2 To iRow2 - 1 Step 2
Cells(y, x).Resize(2, 1).BorderAround Weight:=xlMedium
Next
Next
For x = 4 To iCol - 4 Step 5
Cells(iRow1, x).Resize(1, 5).BorderAround Weight:=xlMedium
Cells(iRow1 + 1, x).Resize(1, 5).BorderAround Weight:=xlMedium
For y = iRow1 + 2 To iRow2 - 1 Step 2
Cells(y, x).Resize(2, 5).BorderAround Weight:=xlMedium
Next
Next
Loop While Not rCel Is Nothing And iOK = 0
End If
'
On Error GoTo 0
Application.ScreenUpdating = True
End If
End If
'
End SubA+
Hello Curulis57,
Merci beaucoup du retour, lorsque je copie la macro, malheureusement ça m'enlève toutes mes bordures au moment du double-click sur l'année....
Dans un sens ça fonctionne, mais pas dans le bon sens
J'ai beau chercher je ne vois pas pourquoi ça fonctionne sur ton fichier, mais pas sur le mien.
Salut Mad-AC,
oui, forcément, je nettoie avant reconstruction...
Cells.Borders.LineStyle = xlNoneSi tu veux du cousu-main, faudrait peut-être songer à donner un fichier représentatif de la réalité!
Non?
A+
D'accord,
Le fichier est représentatif, c'est la même seulement mon tableau commence une ligne en dessous (en ligne 2 et non pas en ligne 1) et il y aura plus de 5 techniciens. J'essaye de comprendre ce qu'il y a a changer pour que la macro fonctionne. J'aimerais vraiment m'améliorer et donc comprendre aussi les codes.
Merci d'avance