Besoin d'aide VBA optimiser un code svp !!!

Bonjour,
Je suis étudiant débutant en VBA sous excel et je cherche a :
'Modifiez et optimisez au maximum le code suivant de telle sorte qu'il puisse s'adapter à des situations diverses

Sub Exercice2()
    Dim Zone As Range   'Zone à mettre en forme
    Set Zone = Worksheets("Exercice 2").[a1:d4]
    Zone.Interior.ColorIndex = 5
    Zone.Borders(xlInsideHorizontal).LineStyle = xlDash
    Zone.Borders(xlInsideVertical).LineStyle = xlDash
    Zone.Borders(xlInsideHorizontal).Weight = xlMedium
    Zone.Borders(xlInsideVertical).Weight = xlMedium
    Zone.Borders(xlEdgeBottom).LineStyle = xlContinuous
    Zone.Borders(xlEdgeTop).LineStyle = xlContinuous
    Zone.Borders(xlEdgeRight).LineStyle = xlContinuous
    Zone.Borders(xlEdgeLeft).LineStyle = xlContinuous
    [a1:a4].Font.Bold = True
    [a1:a4].Font.Italic = True
    [a1:a4].Font.Name = "comic sans ms"
End Sub


J'ai réalisé ca mais je pense qu'on peut mieux faire. C'est pourquoi je vous sollicite :
ma réponse (a améliorer):
Sub Exercice2()
    Dim Zone As Range   'Zone à mettre en forme
    Set Zone = Range("a1").CurrentRegion
    With Zone
        .Interior.ColorIndex = 5
        With .Borders(xlInsideHorizontal)
                .LineStyle = xlDash
                .Weight = xlMedium
        End With
        With .Borders(xlInsideVertical)
                .LineStyle = xlDash
                .Weight = xlMedium
        End With
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
    End With
    With [a1:a4].Font
        .Bold = True
        .Italic = True
        .Name = "comic sans ms"
    End With
End Sub


Merci a toute personne pouvant m'aider à améliorer le code
Merci d'avance internaute !!!
Mat
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. Contributeur
    Bonsoir,

    C'est bon
    juste à améliorer

    .Borders.LineStyle = xlContinuous

    au lieu de:
    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Borders(xlEdgeTop).LineStyle = xlContinuous
    .Borders(xlEdgeRight).LineStyle = xlContinuous
    .Borders(xlEdgeLeft).LineStyle = xlContinuous

    pour le principe:
    l'écriture [A1;A4] devrait ^être range("A1:A4")
    les crochets étant l'abrégé de la fonction EVALUATE pour utiliser des formules matricielles en VBA
    et surtout utilisée par "poil dans la main " (je l'utilise donc souvent)

    Si ton prof est pas d'accord la source: de cette info est de Laurent Longre ( il doit connaitre vu la valeur de LL)

    3/
    Vérifie si currentregion admet des cellules vides au milieu de la zone; Pour ma part, j'aurais laissé range("A1:D43) mais ca se discute...

    Bonne soirée
    1. Contributeur
      Bonsoir,

      Pourquoi considérer que les crochets étant l'abrégé de la fonction EVALUATE...
      Ce n'est pas seulement ça et l'aide excel nous dit :
      Référence à des cellules à l'aide d'un raccourci
      Vous pouvez utiliser soit le style de référence A1 soit une plage nommée entre crochets comme raccourci de la propriété Range.

      Y'a-t-il une raison de se priver de cette facilité pour désigner des cellules ? (et facilité de lecture aussi)
      Jusqu'à maintenant je n'ai rencontré aucun problème...

      eric
      1. Contributeur
        Salut Eric,
        Excuses moi, ceci est est dit sans aucune méchanceté:

        Laurent Longre, tu connais!

        Et d'autre part, je précise que je les emploie souvent, moi aussi, sans aucun problème.... Effectivement, des grands manitous comme Boisgontier et Vallon les emploie tout le temps,

        Mais en formation, il est nécessaire à mon avis de bien montrer les objets comme "range" pour que le stagiaire puisse bien piger ce qu'il fait (quitte après à mettre des crochets)

        Pour Mat:

        Ma simplification des 4 lignes est fausse, excuses moi...

        Par contre, je n'utiliserais pas "currentregion" car la zone déterminé est peut-être au milieu d'autres données donc, tu peux avoir une zone beaucoup + grande que prévue
        1. Contributeur
          Bonsoir michel,

          Ne t'inquiète pas, je n'y ai vu aucune méchanceté... :-)
          Mais plutôt une information potentielle des fois qu'excel ait une de ses bizarreries dont il a le secret dans certains cas d'utilisation. Maintenant si c'est plus dans un soucis de rigueur (que j'ai parfois dans d'autres domaines) c'est tout bon.
          On a toujours à apprendre.... ;-)
          Merci
          eric
      2. je vous remercie pour tout !
        j'ai trouvé une autre méthode si ca peut interesse quelqu'un je la laisse la :
        Sub Exercice2()
            Dim Zone1 As Range   'Zone 1 à mettre en forme
            Dim Zone2 As Range  'Zone 2 à mettre en forme
            
            Set Zone1 = Worksheets("Exercice 2").[a1:d4]
            Set Zone2 = Worksheets("Exercice 2").[a1:a4]
            
               
            With Zone1
                .Interior.ColorIndex = 5
                .Borders(xlInsideHorizontal).LineStyle = xlDash
                .Borders(xlInsideVertical).LineStyle = xlDash
                .Borders(xlInsideHorizontal).Weight = xlMedium
                .Borders(xlInsideVertical).Weight = xlMedium
                .BorderAround LineStyle:=xlContinuous
                
            End With
            
            With Zone2.Font
                .Bold = True
                .Italic = True
                .Name = "comic sans ms"
            End With
                
        End Sub


        Encore merci a tout ceux (les callés en vba) qui m'on répondu.
        thanks
        bye