VBA copier formules à partir de la 1ere ligne vide

Bonjour à tous,

Avec ce code je recopie des formules dans mon fichier de la ligne 2 à 519. Mais si je modifie une cellule manuellement, elle se retrouve forcément remplacée par la formule ensuite.

Peut-on faire recopier ces formules à partir de la 1ere ligne vide ?

Merci

Option Explicit

Sub Archivage()

Dim i As Long, j As Long

Application.ScreenUpdating = False

If Range("A2") = "" Then

Range("A2").Select

Else

Range("A1").End(xlDown).Select

End If

For i = ActiveCell.Row To 2 Step -1

Sheets("Besoins").Select

If Cells(i, 17) <> "" Then

Range(Cells(i, 2), Cells(i, 17)).Copy

Sheets("Archives").Select

Range("B519").End(xlUp).Offset(1, 0).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

Sheets("Besoins").Select

Range(Cells(i, 1), Cells(i, 17)).Delete

End If

Next i

Sheets("Besoins").Select

For j = 2 To 519

Cells(j, 1).FormulaR1C1 = "=IF(RC[1]="""","""",IF(RC[1]=R[-1]C[1],R[-1]C,R[-1]C+1))"

Cells(j, 11).FormulaR1C1 = "=IF(RC[-10]="""","""",IF(RC[-3]-RC[-1]<0,0,RC[-3]-RC[-1]))"

Cells(j, 14).FormulaR1C1 = "=IF(RC[-12]="""","""",IF(COUNTIF(C[-8]:C[-8],RC[-8])>1,(SUMIF(C[-8]:C[-6],RC[-8],C[-6]:C[-6])-SUMIF(C[-8]:C[-1],RC[-8],C[-1]:C[-1])),""""))"

Cells(j, 16).FormulaR1C1 = "=IF(AND(RC[-11]<TODAY(),RC[-1]<TODAY(),RC[-1]<>""""),""Retard composant et livraison"",IF(AND(RC[-11]<TODAY(),RC[-11]<>""""),""Retard livraison"",IF(AND(RC[-1]<>"""",RC[-1]<TODAY()),""Retard composant"","""")))"

Next j

Application.ScreenUpdating = True

End Sub

Bonjour,

Un essai d'après ce que j'ai comrpis :

Option Explicit
Sub Archivage()

Dim i As Long, DerLig As Long, PremLig As Long

Application.ScreenUpdating = False
With Sheets("Besoins")
    DerLig = Application.Max(.Range("A" & Rows.Count).End(xlUp).Row, 2)
    For i = DerLig To 2 Step -1
        If .Range("Q" & i) <> "" Then
            PremLig = Sheets("Archives").Range("B" & Rows.Count).End(xlUp).Row + 1
            Sheets("Archives").Range("B" & PremLig & ":Q" & PremLig).Value = .Range("B" & i & ":Q" & i).Value
            .Range("B" & i & ":Q" & i).Delete
        End If
    Next i
    For i = 2 To 519
        If IsEmpty(.Cells(i, 1)) Then .Cells(i, 1).FormulaR1C1 = "=IF(RC[1]="""","""",IF(RC[1]=R[-1]C[1],R[-1]C,R[-1]C+1))"
        If IsEmpty(.Cells(i, 11)) Then .Cells(i, 11).FormulaR1C1 = "=IF(RC[-10]="""","""",IF(RC[-3]-RC[-1]<0,0,RC[-3]-RC[-1]))"
        If IsEmpty(.Cells(i, 14)) Then .Cells(i, 14).FormulaR1C1 = "=IF(RC[-12]="""","""",IF(COUNTIF(C[-8]:C[-8],RC[-8])>1,(SUMIF(C[-8]:C[-6],RC[-8],C[-6]:C[-6])-SUMIF(C[-8]:C[-1],RC[-8],C[-1]:C[-1])),""""))"
        If IsEmpty(.Cells(i, 16)) Then .Cells(i, 16).FormulaR1C1 = "=IF(AND(RC[-11]<TODAY(),RC[-1]<TODAY(),RC[-1]<>""""),""Retard composant et livraison"",IF(AND(RC[-11]<TODAY(),RC[-11]<>""""),""Retard livraison"",IF(AND(RC[-1]<>"""",RC[-1]<TODAY()),""Retard composant"","""")))"
    Next i
End With
Application.ScreenUpdating = True

End Sub

Merci,

J'ai testé mais les formules se recopies à partir de la ligne 2

Merci,

J'ai testé mais les formules se recopies à partir de la ligne 2

Oui mais elles n'écrasent pas les valeurs renseignées manuellement. Aussi, lorsque tu parles de renseigner manuellement une cellule, de quelle(s) colonne(s) parle-t-on ? Il s'agit de renseigner une ligne de départ différente, mais la ligne de fin est toujours 519 ?

Excuse moi, oui tu as raison. Ca fonctionne bien, copie des formules sans effacer mes données manuelles

Je pense que mon excel bug, une fois avoir executé la macro, je dois le fermer et le reouvrir pour la reexecuter à nouveau.

Bref la macro fonctionne.

Par contre quand je fais l'archivage, la formule en colonne "A" perd son repère et mets l'erreur #REF!. Les autres formules qui y font reference sont ligiquement pareil.

Je joint mon fichier. J'ai rentre quelques dates il suffit d'appuyer sur le bouton archivage en à droite.

13test-cpst.xlsm (61.12 Ko)

Par contre quand je fais l'archivage, la formule en colonne "A" perd son repère et mets l'erreur #REF!. Les autres formules qui y font reference sont ligiquement pareil.

Je joint mon fichier. J'ai rentre quelques dates il suffit d'appuyer sur le bouton archivage en à droite.

Le problème vient de ta formule en colonne A, elle fait référence à des lignes adjacentes et cela pose problème en cas de suppression liée à l'archivage. Je ne vois pas vraiment l'intérêt de cette ligne ni la valeur que tu souhaites voir, mais il va falloir la concevoir autrement.

Aussi, personnellement je pense que tu n'as pas besoin 2 onglets. Les options de filtre à partir de tes en-tête te permettent déjà de masquer ou d'isoler les dossiers complets, non ?

Je vais avoir des centaines de lignes, certaines personnes se servirons de ce fichier (sans bien connaitre l utilisation des filtres)...pour plusieurs raisons je prefere un archivage de ces données.

Ce qui est etrange, c'est que cela fonctionne bien avec ma macro initiale, je n'ai pas de probleme dans la formule

Bonjour Pedro22,

J'ai trouvé la solution...en retirant le IsEmpty de la formule en colonne "A", le reste suit.

Merci beaucoup

Rechercher des sujets similaires à "vba copier formules partir 1ere ligne vide"