Bordures automatiques

Signaler
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour;

Sur un classeur Excel dynamique (récupérant les données du base Oracle), je souhaite ajouter une fine bordure en fonction du nombre de lignes et de colonnes.

J'ai commencé par quelques choses du genre :
     Range("A:L").End(xlDown).Select
     Selection.Borders(xlTop).Weight = xlMedium
     Selection.Borders(xlTop).Color = 1
Le problème est qu'il ajoute une bordure à toutes les cellules, ce qui prend un temps fou.

Merci par avance pour votre aide.

7 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

en début de traitement : Application.ScreenUpdating = False
en fin de traitement : Application.ScreenUpdating = True

Ca fige le rafraichissement et te fait gagné du temps (mais pas énormément)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

Salut Mortalino,

Merci pour ta remarque.
Mais comment faire en sorte que seules les cellules possédant des données aient une bordure ?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
    Dim PLV As Long
   
PLV = Columns(1).Find("", [A1], , , , xlByRows, xlnext).Row - 1
Application.ScreenUpdating = False

 Range("A1:B" & PLV).Select
 Selection.Borders(xlTop).Weight = xlMedium
 Selection.Borders(xlTop).Color = 1

Application.ScreenUpdating = True

Ta solution Range("A:L").End(xlDown).Select ne sélectionne que la dernière cellule remplie dans la colonne.

@++

<hr size ="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Maintenant ça m'étonne quand tu dis que ça prend du temps !!

J'ai fait un test sur la plage A1:L65536, ça m'a pris 93 milisecondes :

<small>
Coloration syntaxique automatique </small>
Sub test() 

Dep = Timer 

    Columns("A:L").Select 
    With Selection.Borders(xlInsideHorizontal) 
        .LineStyle = xlContinuous 
        .Weight = xlMedium 
        .ColorIndex = xlAutomatic 
    End With 

Arr = Timer
MsgBox Arr - Dep  ' reponse : 0,09345

End Sub 

<small>
Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

Merci encore mais ça ne marche pô.
Effectivement, c'est un peu plus rapide mais aucune bordure n'apparaît.
:(
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

Niveau temps, je crois que c'est normal, notre BDD est monstrueuse. Et tout le monde requête sans arrêt.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Essaie celui-ci alors :

<small>
Coloration syntaxique automatique </small>
Dim PLV As Long 

PLV = Columns(1).Find("", [A1], , , , xlByRows, xlnext).Row - 1 
Application.ScreenUpdating = False 

 Range("A1:B" & PLV).Select 

    With Selection.Borders(xlInsideHorizontal)  
        .LineStyle = xlContinuous  
        .Weight = xlMedium  
        .ColorIndex = xlAutomatic  
    End With  

Application.ScreenUpdating = True

<small>
Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--