Derniere cellule plein - autofill - derniere cellule vide

bonjour a tous

j'ai un fichier qui fonctionne bien mais qui commence a prendre du poids ( des lignes )

et du coup il deviens tres long lors des calculs

ub Macro1()
Dim fin

f06.[A2:f30].Copy

F08.Select
'if Range("A65000").End(xlUp) .Interior.Color

'fin1 = Range("A1").End(xlDown).Row

Range("A65000").End(xlUp).Offset(1).Select  'recherche la première cellule vide'
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats 'collage specail valeur
Application.CutCopyMode = False

fin = Range("A1").End(xlDown).Row

[e2].FormulaLocal = "toto" '
[f2].FormulaLocal = "tata" '

[e2].AutoFill [e2].Resize(fin)
[f2].AutoFill [f2].Resize(fin)

End Sub

le problème est que je fais a chaque fois que j'utilise la macro un autofill resize sur les colonnes entières ( et lorsqu’il y a plusieurs milliers de linge ca rame )

dans 'l’idéal il faudrait faire un autofill resize juste entre la derniere cellule vide trouve avant copy et la dernière cellule pleine après copy

edit : parfois la page est complètement vide

44end-autfill.xlsm (16.79 Ko)

Bonjour,

Une proposition

Sub Macro1()
Dim Fin
    f06.[A2:F30].Copy
    With F08
        .Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats 'collage special valeur
        Application.CutCopyMode = False
        debut = .Range("E1").End(xlDown).Row
        Fin = .Range("A1").End(xlDown).Row
        .Range("E" & debut).FormulaLocal = "toto"
        .Range("F" & debut).FormulaLocal = "tata"
        .Range("E" & debut).AutoFill .Range("E" & debut).Resize(Fin - debut + 1)
        .Range("F" & debut).AutoFill .Range("F" & debut).Resize(Fin - debut + 1)
    End With
End Sub

A+

merci frangy pour ton code

cela fonctionne ( il faut juste ajouter la varaible debut )

il y a du progrès en terme de tps

tant que j y suis ( je copie par defaut dela ligne 2 a la ligne 30

mais parfois il n y a que 10 lignes et donc je copie du vide ( cela prendre peut etre du calcul pour rien ? )

F06.Select
 'fini = Range("A6").End(xlDown).Row
 'Range("A2" & fini).Copy

j'ai fait ca mais c'est pas bon .....

Bonjour,

pas besoin d'AutoFill, affecter la formule directement dans l'intégralité de la plage de cellules …

Essaie avec

    f06.Range("A2:F" & f06.Range("A2").End(xlDown).Row).Copy

A+

Bonjour le fil, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim LD As Integer 'déclare la variable LD (Ligne de Début)

TC = f06.Range("A2:A" & f06.Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
LD = f08.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la ligne de début LD
f08.Cells(LD, 1).Resize(NL) = TC 'renvoie le tableau TC dans la colonne 1 (=A)
f08.Cells(LD, 5).Resize(NL) = "toto" 'remplit la colonne 5 (=E)
f08.Cells(LD, 6).Resize(NL) = "tata" 'remplit la colonne 6 (=F)
End Sub

oui oui merci cela fonctionne merci

je travaillais sur mon fichier cette après midi , et au final je ne pense pas que c' etais le souci mais c'est tjs bon a prendre ca ne peux etre que mieux !

je pense qu'il s'agit plus des données et du tcd ... je veux bien votre avis

mon fichier fais plusieurs pages ( 9 )

la page 6 ce sont des données du jour en transit F06

la page 8 est la base de données F08 ( qui contient pour le moment 2500 lignes environ ) ( plage dynamique)

la page 9 un tcd ( qui lit les données de la plage dynamique des données f08 )

et du coup j'ai remarquer si j'interviens sur la base de donnée

( supprimer une ligne c'est très long le calcul en % du processeur s' affiche )

et si il s'agit bien du tcd comment le désactiver pendant la mise a jour des données pour qu'il ne ralentise pas excel

je vais regarder avec calculation manuel mais j'ai des calculs a faire sur les pages donc ..... on verra

Application.Calculation = xlCalculationAutomatic

l'autofill me convient bien les formules sont plus complexe

elle vérifie sur chaque nouvelle ligne plusieurs cellule et en fonction affiche un résultats

je n'avais pas vu ta reponse thau theme

pour le moment je vais garder le code de frangy

mais je migrerai sans doute vers le tiens plus tard !

effectivement c'est clair , c'est propre bravo , tt le contraire de mon code lol

( qui ressemble a un assemblage de ce que je trouve lol )

merci a vous pour vos réponses

ps : apres quelques essais avec

Application.Calculation = xlCalculationManual

les résultats ne sont pas meilleurs

il faut 30 secondes a excel pour effectuer ce petit bout de code

voici les Formules que j'avais remplacer pour simplifier par toto et tata

toto =NB.SI.ENS($A:$A;A2;$C:$C;C2;$AM:$AM; AM2)

tata =NB.SI.ENS($A:$A;A2;$C:$C;C2;$AS:$AS; AS2)

F08.Cells(LD, 1).Resize(NL) = TC 'renvoie le tableau TC dans la colonne 1 (=A)

F08.Cells(LD, 40).Resize(NL) = "=NB.SI.ENS($A:$A;A2;$C:$C;C2;$AM:$AM; AM2)" '

F08.Cells(LD, 46).Resize(NL) = "=NB.SI.ENS($A:$A;A2;$C:$C;C2;$AS:$AS; AS2)" '

Bonjour,

Si tu veux gagner du temps ...

Application.ScreenUpdating = False

Merci james

je connais et cela fait parti de mon fichier

Application.ScreenUpdating = False

'ActiveSheet.DisplayPageBreaks = False

'Application.DisplayStatusBar = False

cependant je pense avoir trouvé une source de lourdeur de mon fichier

dans le gestionnaire des noms j'en avais un bon paquet 999 ( j'en ais besoin que de 1 ! )

du coup j'ai utilise le code de cousin hub et deja mon fichier est bcp moins lourd et plus rapide un jeune homme

Dim Nms As Name

For Each Nms In Names

If Nms.Name <> "TCD" Then Nms.Delete

Next Nms

Rechercher des sujets similaires à "derniere plein autofill vide"