Bonjour Yann, bonjour le forum,
Remarques :
• Tu boucles d'abord sur les lignes puis sur les onglets. C'est étrange mais pourquoi pas... Cela veut dire que tu vérifies la ligne 1 de tous les onglets, puis la ligne 2 de tous les onglets, etc. Il me semble plus logique de vérifier toutes les lignes de l'onglet 1, puis toutes les lignes de l'onglet 2, etc.
• l'erreur la plus grave vient du fait que tu n'indiques pas l'onglet :
1 2
| For Each sht In Worksheets
If sht.Name <> "EN_COURS" And Cells(I, 7).Value > limite_inf And Cells(I, 7).Value < limite_sup Then |
devrait être :
1 2
| For Each sht In Worksheets
If sht.Name <> "EN_COURS" And sht.Cells(I, 7).Value > limite_inf And sht.Cells(I, 7).Value < limite_sup Then |
• tu déclares lN_SOURCE de type Range, il te faut la définir avec :
Set lN_SOURCE = Cells(I, 7).EntireRow
plutôt que :
Cells(I, 7).EntireRow = lN_SOURC
Je te propose une méthode beaucoup plus rapide qui utilise un tableau plutôt des plages de cellules :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| Sub Macro1()
Dim EC As Object 'déclare la variable EC (onglet En Cours)
Dim LI As Date 'déclare la variable LI (Limite Inférieure)
Dim LS As Date 'déclare la variable LS (Limite Supérieure)
Dim O As Object 'déclare la variable O (Onglets)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim J As Integer 'déclare la variable J (incrément)
Set EC = Sheets("EN COURS") 'définit l'onglet EC
LI = EC.Range("E3").Value 'définit la limite inférieure LI
LS = EC.Range("E2").Value 'définit la limite supérieure LS
For Each O In Sheets 'boucle 1 : sur tous les onglets du classeur
If Not O.Name = EC.Name Then 'condition 1 : si l'onglet n'est pas l'onglet "EN COURS"
'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row
TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
For I = 1 To UBound(TC, 1) 'boucle 2 : sur toutes les lignes du tableau TC
'condition 2 : si la valeur en colonne 7 de TC est comprise entre les limites
If TC(I, 7) > LI And TC(I, 7) < LS Then
'définit la cellule de destination DEST
Set DEST = EC.Cells(EC.Range("A1").CurrentRegion.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
For J = 1 To UBound(TC, 2) 'boucle 3 : sur toutes les colonnes du taleau TC
'récupère la valeur ligne I colonne J du tableau dans DEST décalée de J-1 colonnes à droite
DEST.Offset(0, J - 1).Value = TC(I, J)
Next J 'prochaine colonne de la boucle 3
End If 'fin de la condition 2
Next I 'prochaine ligne de la boucle 2
End If 'fin de la condition 1
Next O 'prochain onglet de la boucle 1
End Sub |
Partager