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

Fermé
mat - 18 nov. 2008 à 16:09
 mat - 21 nov. 2008 à 18:56
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
A voir également:

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 nov. 2008 à 18:44
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
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
18 nov. 2008 à 23:33
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 nov. 2008 à 09:07
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
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
19 nov. 2008 à 19:34
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 nov. 2008 à 19:47
Bonsoir Eric

Merci
bonnne soirée à toi aussi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0