Excel VBA - Problème loop

Résolu
sygmajf99 Messages postés 18 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

3 réponses

  1. Utilisateur anonyme
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Re,

      Je me doutais d'un truc comme ça.... ;-)
      eric
      0
  3. sygmajf99 Messages postés 18 Statut Membre
     
    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