Erreur 1004 insertion ligne

Bonjour.
J'essai à l'aide d'un bouton, de rajouter une ligne à une tableau, en copiant la mise en forme des lignes du dessus.
Malheureusement, defois cela marche, desfois ça ne marche pas,j'obtiens l'erreur

Erreur d'execution 1004 : La méthode Copy de la classe Range a échoué

Le bouton lance la macro suivante :

   Option Explicit

Sub newLine()

   Application.ScreenUpdating = False

   With ActiveCell.EntireRow
      .Copy
      .Offset(1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

     On Error Resume Next
      .Offset(1).SpecialCells(xlCellTypeConstants).Value = ""
      Application.CutCopyMode = False
      On Error GoTo 0
   End With

   Application.ScreenUpdating = True

End Sub

Après mainte recherche, je n'arrive toujours pas à comprendre comme résoudre ce problème pour que cela marche à tous les coups

Merci de bien vouloir m'aider.

Bonsoir,

Nul besoin de macro en utilisant un Tableau Structuré...

Une donnée rajoutée dans la ligne du dessous entraîne une recopie auto des formats, formules, validations de données, MEFC...

Bonne soirée

Bonsoir à vous deux !

Sans rentrer dans les bonnes considération de cousinhub, et en restant dans l'idée de répondre à votre question, votre code fonctionne bien chez moi, je n'ai pas réussi à reproduire l'erreur.

J'ai même pu réduire le code en partant du principe que sous excel avec une sélection de ligne entière l'insertion se fait automatiquement vers le bas.
Et que par défaut, Excel recopie les format de la ligne du dessus pour créer la nouvelle ligne. Comme on fait un Offset d'1 ligne, alors on recopiera bien la mise en forme de la ligne de la cellule sélectionnée.

Le code réduit :

Sub newLine()
    ActiveCell.EntireRow.Offset(1).Insert
End Sub

Maintenant si vous avez une erreur c'est peut-être du à la présence d'un élément perturbateur sur la feuille...

@ bientôt

LouReeD

J'aurai bien aimé utiliser la ligne de code très simplifié, mais cela ne recopie pas les formules qui sont dans certaines cellules.

Pour les tableaux structurés, merci pour l'idée, mais j'ai jamais encore utilisé cela, je vais y jeter un coup d'oeil.

Merci pour vos réponses, super cool !

Bonjour,

évidemment j'ai oublié le "copy" :

Sub newLine()
    ActiveCell.EntireRow.Offset(1).Copy
    ActiveCell.EntireRow.Offset(1).Insert
End Sub

@ bientôt

LouReeD

Bonjour, désolé pour la réponses tardives, mais aucune des solutions n'ayant marché à tous les coups, j'ai abandonné et fais autrement.

Merci pour vos participations

un essai

Sub NewLine()
     Dim LO    As ListObject, i, c

     Application.ScreenUpdating = False
     On Error Resume Next
     Set LO = ActiveCell.ListObject          'TS autour de l'activecell
     If LO Is Nothing Then Set LO = ActiveCell.Offset(-1).ListObject     'si l'activecell est juste en dessous d'un TS, alors ce TS
     If LO Is Nothing Then MsgBox "erreur", vbCritical: Exit Sub     'pas possible d'assigner un TS = erreur = exit
     On Error GoTo 0

     With LO                                 'le TS
          i = ActiveCell.Row - .Range.Row    'position de l'activeCell dans le TS
          If .ListRows.Count = 0 Then        'TS ne contient pas encore des listrows
               Set c = .InsertRowRange       'ajouter une première listrow
          Else
               Set c = .ListRows.Add(Application.Max(2, i))     'ajouter une listrow à la ligne de l'ActiveCell
               If i = 1 Then                 'si l'activecell est dans la première ligne
                    .ListRows(1).Range.Copy  'copier la première ligne
                    .ListRows(2).Range.PasteSpecial xlValues     'coller sur la 2ième ligne
                    On Error Resume Next
                    .ListRows(1).Range.SpecialCells(xlConstants).ClearContents
                    On Error GoTo 0
               End If
          End If
     End With
     Application.ScreenUpdating = True
End Sub
Rechercher des sujets similaires à "erreur 1004 insertion ligne"