Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Améliorer la rapidité d'une boucle sur 53 feuilles

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 !

zephir94

XLDnaute Impliqué
Bonjour à tous,

Je dois faire le total de 53 feuilles dans une 54 ème sur certaines colonnes.
J'ai donc écris ce code qui marche très bien mais qui reste lent :
VB:
Sub test()
Dim fg
Dim NN
Dim l
Dim P As Variant
Dim ll
Dim vv
vv = ""
Application.ScreenUpdating = False
NN = Sheets(1).Range("C65536").End(xlUp).Row 'recherche de la dernière ligne vide sur la feuille
For fg = 1 To 53 Step 1
With Sheets(fg)
  If fg = 1 Then ' Si on commence par la feuille 1 on vide la feuille Total
  ' à écrire
  Else
  End If
  For ij = 4 To NN Step 1 ' Boucle pour ce déplacer dans les lignes
If IsNumeric(Val(CStr(Sheets(fg).Range("C" & ij).Value))) = True _
And Sheets(fg).Range("C" & ij).Value <> "" Then
k = Sheets(fg).Range("C" & ij).Value
      For Each P In Array(6, 7, 9, 11, 13, 15, 16, 18, 20, 21, 22) ' Boucle pour ce déplacer dans les colonnes
      vv = Sheets(fg).Range("A" & ij).Offset(0, P).Value
      Sheets(54).Range("A" & ij).Offset(0, P).Value = Sheets(54).Range("A" & ij).Offset(0, P).Value + vv
      ko = Sheets(54).Range("A" & ij).Offset(0, P).Value
      vv = ""
      Next P
  Else ' si la valeur de la Cellule n'est pas une valeur numérique alors je ne fait rien
  End If
  Next ij ' je passe à la ligne suivante
End With ' je ferme mon avec la feuille encours
Next fg ' je passe à la feuille suivante
MsgBox " Fin de la boucle"
Application.ScreenUpdating = True
End Sub
Merci par avance pour vos pistes d'améliorations

Bien cordialement Scoubi
 
Si car je vérifie si dans la colonne C il y a une valeur numérique !
Code:
If IsNumeric(Val(CStr(Sheets(fg).Range("C" & ij).Value))) = True _
And Sheets(fg).Range("C" & ij).Value <> "" Then
k = Sheets(fg).Range("C" & ij).Value

Si cette valeur numérique n'existe pas je passe à la ligne suivante donc du fait je ne copiais pas les autres feuilles !
 
Pas fais attention à ça.
Il suffit juste d'ajouter 3 dans Colonne =

Même si nous pourrions boucler directement sur toutes les colonnes, ça n'augmenterait pas spécialement le temps.

Pour cela il faut remplacer la procédure Somme_Tableau par :

VB:
Sub Somme_Tableau(Tableau1(), Tableau2(), Niveau%)
Dim i&, j&
Dim Colonne()
    For i = LBound(Tableau1, 1) To UBound(Tableau1, 1)
        For j = LBound(Tableau1, 2) To UBound(Tableau1, 2)
            If Not IsNumeric(Tableau2(i, j)) And Niveau = 1 Then
                Tableau1(i, j) = Tableau2(i, j)
            ElseIf (Tableau2(i, j)) > 0 Then
                Tableau1(i, j) = Tableau1(i, j) + Tableau2(i, j)
            End If
        Next j, i
End Sub
 
Je me suis basé sur ta macro qui écrit en G la somme des colonnes F (cela me paraissait curieux mais comme on a pas de visibilité sur le cas réel (Edit : l'offset devrait être P-1 dans ta macro)

Le test de la valeur numérique est inutile dans une fonction somme, que ce soit en formule ou VBA : tu pourrais donc simplifier le code si tu tiens à VBA.
 
Dernière édition:
Salut à tous

Je l'ai fait ,je le poste
NB: résultat dans feuille T
Code:
Sub essai()
debut = Timer
Sheets("T").Cells.Clear
fin = Sheets("Feuil1").Range("C" & Rows.Count).End(xlUp).Row
ReDim tabres(1 To fin, 1 To 16)
For Each sh In Sheets
  tablo = sh.Range(Cells(4, 6).Address & ":" & Cells(fin, 22).Address)
  For n = LBound(tablo, 1) To UBound(tablo, 1)
     For m = LBound(tablo, 2) To UBound(tablo, 2)
        On Error Resume Next
             If tablo(n, m) <> "" And tablo(n, m) <> 0 Then tabres(n, m) = tabres(n, m) + Val(tablo(n, m))
        On Error GoTo 0
     Next
  Next
Next
Sheets("T").Cells(4, 6).Resize(UBound(tabres, 1), UBound(tabres, 2)) = tabres
MsgBox (Timer - debut)
End Sub
 

Pièces jointes

- 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

Discussions similaires

Réponses
5
Affichages
281
Réponses
4
Affichages
206
Réponses
7
Affichages
219
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
524
Réponses
5
Affichages
246
Réponses
4
Affichages
477
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…