Limiter le nombre de lignes dans la feuille de calcul
Bonjour,
J'aimerais savoir s'il y a une possibilité de limiter le nombre de lignes dans une feuille de calcul.
J'ai mis au point une macro qui a un temps de traitement relativement long.
Merci par avance pour votre réponse.
Bonjour,
Merci de joindre un fichier à ta demande, que l'on voit la chose !...
Cdlt.
Bonjour Jean-Eric,
En réalité mon problème concerne la taille de mon fichier. A l'origine le fichier sans macro fait aux alentours de 1976 Ko, une fois que j'ai fait tourner les deux macros attachées à mon fichier, je me retrouve avec une taille de 11 391 Ko, ce qui entraîne un ralentissement considérable. Dans la première macro (voir ci-dessous), j'ai incorporé une procédure que tu m'avais conseillé sur un sujet antérieur (FILTRE).
Sub Mise_en_forme_rapport_referentiel_derniere_version()
' Conversion des cellules en format text en format numéraire
'Effacement des données dans l'onglet Rapport Referentiel
Sheets("Rapport Referentiel").Select
Range("A1:L1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Sheets("Rapport Referentiel source").Select
Range("G1").Select
Application.CutCopyMode = False
Selection.NumberFormat = "0"
ActiveCell.FormulaR1C1 = "1"
Range("G1").Select
Selection.Copy
Range("C5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
Rows("4:4").Select
Application.CutCopyMode = False
Dim AL1 As Object
Dim x As Integer, i As Long
Set AL1 = CreateObject("System.Collections.ArrayList")
plg = Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
AL1.Add ""
For i = LBound(plg) To UBound(plg)
If IsError(Application.Match(plg(i, 1), AL1.Toarray(), 0)) Then x = 1 Else x = 0
If x = 1 And plg(i, 1) <> "FIL01" Then AL1.Add plg(i, 1): Err.Clear
Next
r = AL1.Toarray()
Range("$A$4:$L$123").AutoFilter
If Not ActiveSheet.FilterMode Then Range("$A$4:$L$123").AutoFilter
ActiveSheet.Range("$A$4:$L$123").AutoFilter Field:=2, Criteria1:=r, Operator:=xlFilterValues
'Sélection du champs à partir des cellules A4:L4 jusqu'à la dernière cellule non vide _
et copie dans la cellule A1 de la Feuil2
Range("A4:L4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Rapport Referentiel").Select
ActiveWindow.SmallScroll Down:=-9
Range("A1").Select
ActiveSheet.Paste
End Sub
Une fois que j'ai fait tourner la première macro, le fichier n'augmente pas en taille.
Par contre, le lancement de la macro ci-dessous entraîne une augmentation excessive du fichier.
Sub Actualisation_base_partagee_derniere_version()
'ACTUALISATION DU FICHIER DE LA BASE PARTAGEE
'Effacement des données dans l'onglet J-1 base travail Référentiel
Sheets("J-1 base travail Referentiel").Select
Range("A3:AM3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
'Copie des données J base travail Referentiel dans l'onglet J-1 base travail Référentiel
Sheets("J base travail Referentiel").Select
Range("A3:AM3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("J-1 base travail Referentiel").Select
Range("A3").Select
ActiveSheet.Paste
'Effacement des données dans l'onglet J base travail Référentiel
Sheets("J base travail Referentiel").Select
Range("A3:AM3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
'Copie des données du Rapport Référentiel retraité à partir des cellules B2:L2 dans l'onglet J base travail Référentiel
Sheets("Rapport Referentiel").Select
Range("B2:L2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("J base travail Referentiel").Select
Range("C3").Select
ActiveSheet.Paste
'Boucle pour copier les formules des cellules A2:B2 dans le champs A3:B300 tant que les cellules se trouvant dans le champs C3:D300 sont non vides :
Do
Sheets("J base travail Referentiel").Select
Range("A2:B2").Select
Selection.Copy
Range("A3:B3").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
Loop While ("C3:D300") = ""
Do
Sheets("J base travail Referentiel").Select
Range("N2:AM2").Select
Selection.Copy
Range("N3:AM300").Select
ActiveSheet.Paste
Loop While ("C3:D300") = ""
'Remplacement des formules par leur valeur à partir des cellules A3:B3 jusqu'à la dernière cellule non vide
Range("A3:B3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Remplacement des formules par leur valeur à partir des cellules N3:AM3 jusqu'à la dernière cellule non vide
ActiveWindow.ScrollWorkbookTabs Sheets:=-1
Sheets("J base travail Referentiel").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
Range("N3:AM3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Mise en forme de la couleur du champ de cellules N3:AM3, remplacement du fond rouge par un fond blanc
Range("N3:AM3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Application.CutCopyMode = False
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'Remplacement de tous les messages d'erreur #N/A par NA
'Utilisation d'une boucle For to
For i = 3 To 300
If WorksheetFunction.IsNA(Range("P" & i)) = True Then Range("P" & i) = "NA"
Next
'Utilisation d'une boucle For to
'Remplacer dans la colonne S les champs vides par le commentaire " En attente ", dans la colonne T les champs vides par la date du jour et dans la colonne W les champs vides par le commentaire " A analyser ".
For i = 3 To 300
If Range("P" & i).Value = "NA" Then
Range("S" & i).Value = "En attente"
Range("T" & i).Value = Date
Range("W" & i).Value = "A analyser"
End If
Next
'Si variables de la colonne N à partir de la ligne 3 jusqu'à 300 sont supérieurs à 10000 alors les cellules de la colonne_
'N à la colonne AM sont vides
For h = 3 To 300
If Range("N" & h).Value > 10000 Then
Range("N" & h).Value = ""
Range("O" & h).Value = ""
Range("P" & h).Value = ""
Range("Q" & h).Value = ""
Range("R" & h).Value = ""
Range("S" & h).Value = ""
Range("T" & h).Value = ""
Range("U" & h).Value = ""
Range("V" & h).Value = ""
Range("W" & h).Value = ""
Range("X" & h).Value = ""
Range("Y" & h).Value = ""
Range("Z" & h).Value = ""
Range("AA" & h).Value = ""
Range("AB" & h).Value = ""
Range("AC" & h).Value = ""
Range("AD" & h).Value = ""
Range("AE" & h).Value = ""
Range("AF" & h).Value = ""
Range("AG" & h).Value = ""
Range("AH" & h).Value = ""
Range("AI" & h).Value = ""
Range("AJ" & h).Value = ""
Range("AK" & h).Value = ""
Range("AL" & h).Value = ""
Range("AM" & h).Value = ""
Range("B" & h).Value = ""
End If
Next
' Actualisation_données Macro
'
ActiveWorkbook.RefreshAll
End Sub
Je n'arrive pas à trouver ce qui entraîne l'augmentation de la taille du fichier.
Je ne peux pas fournir le fichier EXCEL car c'est un document interne qui ne peut être divulgué. J'aimerais savoir si le fait d'avoir déclaré les variables (notamment dans la procédure que tu m'as fourni), peut être à l'origine de cette augmentation de taille. De même, j'ai utilisé la fonction SI ce qui a entraîné des messages d'erreur NA et REF qui étaient dupliqués jusqu'à la fin de la feuille EXCEL. J'ai incorporé des procédures afin de les remplacer par """ (notamment par IF RANGE ("N" & h). value > 10000 Then ...). Merci par avance pour un début de réponse mais si je sais que sans fichier EXCEL, cela va être difficile de pouvoir m'aider. Bonne journée.