Excel VBA - Problème loop

Résolu/Fermé
sygmajf99 Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 6 juillet 2012 - 10 janv. 2011 à 17:12
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 11 janv. 2011 à 13:46
Bonjour,

J'ai un problème avec cette macro, qui fait une ligne grasse à partir de la ligne 6, à chaque 2e ligne. Le loop prend trop de temps, sûrement puisque je le fais une cellule à la fois. Y-a-t'il un code qui va permettre une exécution plus rapide ?

Sub Macro1()

Dim k As Integer
Dim l As Integer
Dim m As Integer

k = 28
l = 6

Do While l <= Range("a4").End(xlDown).Row
For m = 1 To k
Cells(l, m).Select
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Next m
l = l + 2
Loop

End Sub

Merci
A voir également:

3 réponses

Utilisateur anonyme
10 janv. 2011 à 18:07
Bonjour sygmajf99

Essaie cette macro qui semble t-il donne le même résultat que celle que tu as proposée, mais tu devrais gagner du temps.

Sub test()

Dim m As Integer

Application.ScreenUpdating = False

For m = 6 To 28 Step 2
Rows(m & ":" & m).Select
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Next m
Application.ScreenUpdating = True


End Sub

Tiens moi au courant.

cdlmt
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
10 janv. 2011 à 18:17
Bonjour,
Sub Macro1()

Dim col As Integer
Dim lig As Integer
dim derlig As integer
col = 28
lig = 6

derlig=Range("a4").End(xlDown).Row
Application.ScreenUpdating = False
Do While lig <= derlig
    With Range(Cells(lig, 1), Cells(lig, col)).Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
lig = lig + 2
Loop

End Sub


devrait aller +vite (on peut-^tre faire mieux mais...)
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
Modifié par eriiic le 10/01/2011 à 22:42
Bonsoir michel et tous les autres,

Michel, Application.ScreenUpdating = True est oublié, ou c'est que l'on peut s'en passer car rétabli en sortant de la macro ?
Bonne année à tous :)
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 310
11 janv. 2011 à 09:48
Bonjour Eriic et tout le monde
c'est rétabli en sortant de la macro, attention toutefois si la la macro ne rend pas la main au systeme
source:
http://xcell05.free.fr/pages/prog/accvba.htm#ScreenUpdating
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
11 janv. 2011 à 13:46
Re,

Je me doutais d'un truc comme ça.... ;-)
eric
0
sygmajf99 Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 6 juillet 2012
10 janv. 2011 à 18:59
AGI67 : Merci, mais ton code sélectionnait les lignes entières et les 28 premières lignes. Moi je voulais les 28 premières colonnes, et les lignes jusqu'à
Range("a4").End(xlDown).Row

michel_m : Tout baigne, et c'est rapide comme l'éclair.

Merci à vous 2.

Jean-François
0