Perte formules dans copie ligne avec macro

Fat17 Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   -  
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour le Forum,

J'ai un souci avec la macro ci dessous :

Sub recop()
'dernière ligne remplie en colonne E
ligneC = Columns(5).Find("*", , , , xlByColumns, xlPrevious).Row
'première ligne vide en colonne I
Dim Ligne As Long
Ligne = Columns(9).Find("*", , , , xlByColumns, xlPrevious).Row + 1
'copier-coller
Range("A" & ligneC & ":Z" & ligneC).Select
Selection.Copy
Range("A" & Ligne).Select
ActiveSheet.Paste
'Effacements
Range("F" & Ligne).Select
ActiveCell.FormulaR1C1 = ""
Range("P" & Ligne).Select
ActiveCell.FormulaR1C1 = ""
Range("U" & Ligne).Select
ActiveCell.FormulaR1C1 = ""
Range("C" & Ligne).Select
ActiveCell.FormulaR1C1 = ""
End Sub

Cette macro me sert à recopier la dernière ligne remplie en colonne E pour la mettre dans la première ligne vide en colonne I.
La copie se fait correctement, avec les effacements demandés, mais les formules disparaissent avec maintien seulement des valeurs qui n'ont aucun intérêt toutes seules.
Comment faire pour que les formules contenues dans les colonnes E, I, N, Q, R, S, T et V soient maintenues ?
Nota : Cette macro est dans un module de façon à pouvoir servir 2 feuilles, et elle est activée par Ctrl+w

Merci d'avance pour votre précieuse collaboration
Cordialement
Fat
A voir également:

1 réponse

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

1) J'ai un peu de mal à comprendre l'utilisation de ce code : la plage cible et la plage source se situent dans les mêmes colonnes de la même feuille !

2) Il faut absolument éviter d'employer .Select et ActiveCell

3) Je l'aurais écrit comme ça :

Option Explicit
Public Sub recop()
Dim source As Range
Dim cible As Range

  With ActiveSheet
    'Dernière cellule remplie en colonne E
    Set source = .Columns("E").Find("*", , , , xlByColumns, xlPrevious)
    'Première cellule vide en colonne I
    Set cible = .Columns("I").Find("*", , , , xlByColumns, xlPrevious).Offset(1)
  End With
  'Dernière ligne de A à Z remplie en colonne E
  Set source = source.EntireRow.Resize(1, 26)
  'Première ligne de A à Z vide en colonne I
  Set cible = cible.EntireRow.Resize(1, source.Columns.Count)
  'Copier-coller
  source.Copy Destination:=cible
  'Effacements
  cible.Cells(1, "F").ClearContents
  cible.Cells(1, "P").ClearContents
  cible.Cells(1, "U").ClearContents
  cible.Cells(1, "C").ClearContents

End Sub

Cordialement
Patrice
0