XL 2016 Procédure très lente : boucle pour insérer des colonnes et des formules

Daniel38

XLDnaute Occasionnel
Bonjour les Excelliens

La procédure est vraiment lente ... :mad:

Je cherche à insérer des colonnes et des formules dans des tableaux variables en nombre de ligne et colonnes :D
- l'insertion des colonnes (2 par entreprise) s'effectue dans une boucle sur chaque onglet (relativement rapide)
- les formules sont déterminées dans la feuille Couleur et ensuite fait un copié collé (je ne pense pas que ce soit la bonne solution)
- les formats des colonnes avec bordure s'effectue aussi avec une boucle (ça semble assez lent)

Y aurait il un moyen de rendre plus rapide l'exécution de cette procédure ? (je sais que c'est pas le top mais elle fonctionne et pendant que cela s'exécute on a le temps d'aller boire un café mais bon ...) o_O

A bientôt ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Il y a toujours plein de Select dans ton fichier...
Un petit exemple illustratif
Du Select partout
VB:
Sub MacroEnregisteurMacro()
    Range("A1").FormulaR1C1 = "=ADDRESS(ROW(),COLUMN(),4)"
    Range("A1").AutoFill Destination:=Range("A1:J1"), Type:=xlFillDefault
    Range("A1:J1").Select
    Selection.AutoFill Destination:=Range("A1:J10"), Type:=xlFillDefault
    Range("A1:J10").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Et la même macro (Sans Select)
VB:
Sub Macro_Sans_Select()
With Range("A1:J10")
.Borders.LineStyle = 1
.Formula = "=ADDRESS(ROW(),COLUMN(),4)"
End With
End Sub
Testes ces deux macros (à seule vocation illustrative) sur une feuille vierge.
Tu verras qu'elles produisent le même résultat
Fais ensuite le test en agrandissant la plage de cellules
Exemple: Range("A1:J100000")
Tu constateras que la macro Sans Select est beaucoup plus rapide.
 
Dernière édition:

Daniel38

XLDnaute Occasionnel
Staple
Merci pour cet exemple ;) mais regarde les colonnes à insérer ne sont pas contiguës et les formules varient en fonction de l'article (article si Unité dans la colonne U) ou d'un sous-total (texte commençant par sous-total) c'est standard.
Le nombre de lignes et de colonnes en fonction des lots et du nombre d'entreprise est variable aussi.
Je comprends le fait d'éliminer les Select mais je ne comprends pas comment faire avec ce genre de tableau :mad:
c'est vrai que j’utilise beaucoup l'enregistreur de macro mais tu remarques que je nettoie aussi :)
 

Daniel38

XLDnaute Occasionnel
OK j'ai testé
Sub Macro_Sans_Select()
With Range("A1:J100000")
.Borders.LineStyle = 1
.Formula = "=ADDRESS(ROW(),COLUMN(),4)"
End With
End Sub

Maintenant je teste dans les tableaux,
pour formula je mets un conditionnel si article ou sous-total mais la formule est conditionelle dans l'onglet couleur ...

par contre sur la longueur ligne du tableau je ne sais pas comment lui dire ?
mais si on est obligé de passé par une boucle pour insérer les colonnes au bon endroit en fonction du NB d'entreprise ?

qu'en penses-tu ?
 

Staple1600

XLDnaute Barbatruc
Re

Si j'étais moi, et si je devais triturer ton fichier, je changerai mon fusil d'épaule.
C'est à dire que je reverrai complètement la structure de mon fichier.
Et dans un premier temps, j'irai me confronter à l'existant (au cas où...)

[hft T]Enfin, cela c'est si j'étais moi, et que nullement je me méfierai ;)[hft T]
 

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 886
Membres
103 018
dernier inscrit
mohcen23