Bordures via VBA complexes

Bonjour au forum,

Je cherche à automatiser la mise en forme des bordures de mon tableau lors de la mise à zéro de mon fichier.

J'ai testé de multiples codes mais je n'arrive définitivement pas à mes fins...

Ci-joint le fichier exemple avec la base de mon code dans le module1, la mise en forme affichée sur mes 3 feuilles est celle que je souhaite re-créer par vba.

Merci pour votre aide.

30bordures.xlsm (29.33 Ko)

Bonjour,

Ouf ! Tu ne prends pas le plus court chemin !

  • Les bordures diagonales ! Si tu n'en as pas : inutile de les supprimer !!
  • La couleur (xlAutomatic), tu ne changes rien, donc inutile de le mentionner ! Ce sera celle-là !

La majorité de tes bordures sont en xlThin, donc d'un seul coup :

- B15:T33 => .Borders : tu mets tout en xlThin

Il ne reste plus qu'à rectifier ce qui ne l'est pas :

  • les plages à entourer : une est à traiter séparément : B15:T16 => .BorderAround xlContinuous, xlThick
  • les autres sont semblables donc tu cadres sur la première et tu traites en boucle :
With [B18:T21]

For i = 0 To 12 Step 4

.Offset(i) => BorderAround.... xlThick

Next i

End With

(code un peu simplifié, mais tu peux rétablir...)

Et il ne reste enfin que tes lignes xlDashDotDot en xlThin, que je n'ai pas vues du tout dans ton code... !

- que tu peux tenter de traiter dans une boucle comme précédemment, en partant d'une plage C19:T20, mêmes décalages que la boucle précédente : le bord à définir est .Borders(InsideHorizontal)

Je ne sais si ça marchera ou si la fusion bloquera cette manoeuvre, mais ça se tente. En cas d'erreur, on dédouble le traitement : une boucle pour la partie fusionnées et une pour la partie non fusionnée.

En fait ton code afférent n'est pas si long mais tu t'arrêtes ligne 25 ? (s'il s'agit d'une tableau extensible selon besoins, ce serait 21, sinon le tout) et tu ne fais pas tout !

Bon... Cordialement.

Bonjour le forum,

MFerrand,

Merci pour ta réponse

J'ai encore quelques difficultés avec les boucles, j'imagine que cette écriture n'est pas correcte ?

With ws.Range("B18:T123").Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With

            With ws.Range("B18:T21")
                For i = 0 To 12 Step 4
                .Offset(i).BorderAround.Weight = xlThick
                Next i
            End With

            With ws.Range("C19:T20")
                For i = 0 To 12 Step 4
                .Offset(i).BordersInsideHorizontal
                    .LineStyle = xlDashDotDot
                    .Weight = xlThin
                Next i
            End With

Bonjour,

Ton 123 m'étonne un peu, mais je ne rectifie que la syntaxe des .Borders...

            With ws.Range("B18:T123").Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
            With ws.Range("B18:T21")
                For i = 0 To 12 Step 4
                    .Offset(i).BorderAround xlContinuous, xlThick
                Next i
            End With
            With ws.Range("C19:T20")
                For i = 0 To 12 Step 4
                    With .Offset(i).Borders(InsideHorizontal)
                        .LineStyle = xlDashDotDot
                        .Weight = xlThin
                    End With
                Next i
            End With

Cordialement.

Bonjour MFerrand,

Merci pour ta réponse.

J'ai une erreur sur cette ligne (Erreur d'execution 1004 : Erreur définie par l'application ou par l'objet) :

With .Offset(i).Borders(InsideHorizontal)

Le T123 concerne en fait mon fichier original dont le tableau comporte 123 lignes

Si tu as le temps, pourrais-tu m'expliquer le code des boucles que tu utilises ?

En regardant les cours sur le site, je comprends que :

For i = 0 To 12 Step 4

signifie que pour la ligne 0 à la ligne 12 de la plage i, on applique le style de bordure, en incrémentant de 4 à chaque fois ?

La constante est xlInsideHorizontal.

Rectifie pour voir si l'erreur 1004 ne provient que de là.

J'ai écrit et testé le code résultant du contenu de mon premier post :

Sub Bordures()
    Dim i%
    With ActiveSheet
        With .Range("B15:T33").Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
        End With
        .Range("B15:T16").BorderAround xlContinuous, xlThick
        With .Range("B18:T21")
            For i = 0 To 12 Step 4
                .Offset(i).BorderAround xlContinuous, xlThick
            Next i
        End With
        With .Range("C19:P20")
            For i = 0 To 12 Step 4
                With .Offset(i).Borders(xlInsideHorizontal)
                    .LineStyle = xlDashDotDot
                    .Weight = xlThin
                End With
            Next i
        End With
    End With
End Sub

Il fonctionne, donc tu ne devrais pas avoir d'autre erreur.

Dans une boucle de 0 à 12 de pas 4, i va prendre les valeurs 0, 4, 8, 12

Ici ces valeurs successives définissent un décalage d'une plage de cellules en l'appliquant à .Offset(i) : le décalage 0 est la plage initiale elle-même, les valeurs suivantes définissent une plage décalée de 4 lignes de plus à chaque tour.

Cordialement.

Bonjour MFerrand,

Merci beaucoup pour la réctif, ça fonctionne à merveille

Merci également pour tes explications, c'est plus clair pour moi maintenant

Bonne soirée !

Rechercher des sujets similaires à "bordures via vba complexes"