Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Encore trop long, plus long, peut-être comparer le temps de travail de la macro avec le temps de travail du même boulot fait à la "main" comme on dit.....
tu as parfaitement appliqué la règle 5 de Dave Hawley mais à mon sens la règle n°1 est également très importante, il faut placer Option Explicit dans tous les modules et déclarer toutes les variables et quand je dis déclarer il faut éviter au maximum les variables de type variant qui bouffent beaucoup de ressource.
Le pb est que toutes les variables définissant des plages multiples qui sont utilisées dans les differentes macros sont forcement à déclarer en variant
pour pallier le problème réinitialiser ces variables en fin de code (exemple tabfeuilles = Nothing) ,ci-joint une correction de fichier, reste à tester le temps d'execution
a+
Merco pour vos réponses
J'ai testé les macros mais avant j'ai copié sur vos idées pour corriger toutes mes macros
Effectivement avec "option explicit" et les select en moins c'est mieux
Par contre avec la macro ci-dessous est toujours longues ;
Merci
Cazinos
Option Explicit
Sub InsererLigneVideBX()
Sheets("BX").Select
On Error Resume Next
'à cause de la dernière ligne de la colonne A
Dim c As Range
For Each c In Range("A:A")
'écrire TOTAL en majuscule
If UCase(Left(c, 5)) = "TOTAL" And c.Offset(1, 0) <> "" Then
c.Offset(1, 0).EntireRow.Insert
End If
Next
End Sub
Sub InsererLigneVideBX()
Sheets("BX").Select
Dim c As Range
For Each c In Range([COLOR="Red"][B]"A1:A" & Cells(Rows.Count, 1).End(xlUp).Row[/B][/COLOR])
If UCase(Left(c, 5)) = "TOTAL" And c.Offset(1, 0) <> "" Then c.Offset(1, 0).EntireRow.Insert
Next
End Sub
et si la feuille n'a pas 40 000 lignes utiles, on devrait avoir une amélioration.
A quoi cela sert-il que je modifie tes codes ???? 😡
Voici la macro modifiée telle qu'elle était dans ma dernière pièce jointe
Code:
Sub InsererLigneVideBX()
Dim c As Range
'On Error Resume Next
'à cause de la dernière ligne de la colonne A
With Sheets("BX")
For Each c In .Range("A1:A" & .[A65536].End(xlUp).Row)
' écrire TOTAL en majuscule
If UCase(Left(c, 5)) = "TOTAL" And c.Offset(1, 0) <> "" Then
c.Offset(1, 0).EntireRow.Insert
End If
Next
End With
c = Nothing
End Sub
Et tu poses une question sur ton ancien code
C'est décourageant !
Merci à ledzep et Roger2327 d'avoir pris le temps de lire mes modifications.
Enlever l'affichage, surtout avec des insertions de lignes devrait largement accélérer le processus.
Sub InsererLigneVideBX()
Dim i As Integer
Application.ScreenUpdating = False
With Sheets("BX")
For i = 2 To .Range("A65536").End(xlUp).Row
If UCase(Left(.Cells(i, 1), 5)) = "TOTAL" And .Cells(i + 1, 1) <> "" Then
.Cells(i + 1, 1).EntireRow.Insert
End If
Next
End With
End Sub
J'ai testé toutes les versions "Sub InsererLigneVideBX()
que tu as corriger mais ca rame quand même.
J'ai pris le temps de lire toutes les macros puisque j'ai travaillé à partir de tes corrections pour corriger les miennes.
Je vais testé les nouvelles versions ci-dessus aujourd'hui.
J'ai testé les macros Sub InsererLigneVideBX() elles fonctionnent toutes même celles qui lance les 4 onglets "bx cf cp sg" j'avais mal copier scuses.
Par contre le fait d'ajouter "option explicit" c'est top
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD