Insertion de lignes en gardant les formules

Bonjour,

Je suis débutante en VBA et n'arrive pas à trouver comment ajouter une ligne en-dessous en conservant les formules mais en supprimant les valeurs.

Si je prends exemple sur le fichier Excel en pièce jointe, l'idéal serait d'avoir un bouton "Ajouter une ligne" à côté de chaque différent poste et que cette ligne vienne se mettre en dernière position. Donc si j'ai besoin d'ajouter une ligne au poste bois, celle-ci devrait apparaître à la ligne 24.

Merci d'avance pour votre aide en espérant que ma demande soit claire...

16fichier-forum.xlsm (25.79 Ko)

Bonjour,

Un test via une procédure événementielle associée à la feuille avec ajustement des formules de totaux :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Columns(1)) Is Nothing And Target = "Ajouter un ligne" Then
    Target.End(xlDown).EntireRow.Insert Shift:=xlUp
    Rows(Target.End(xlDown).Row - 1).FillDown
    Rows(Target.End(xlDown).Row - 1).SpecialCells(xlCellTypeConstants).ClearContents
    Target.EntireRow.Replace What:=Target.End(xlDown).Row - 2 & ")", Replacement:=Target.End(xlDown).Row - 1 & ")", LookAt:=xlPart
End If
End Sub

Cdlt,

Merci beaucoup pour votre solution, tout marche parfaitement!

Bonne fin de journée

Bonjour carla1209, Ergotamine, le forum,

@Ergotamine:

Salut, merci pour ton code

Juste une petite remarque si tu me le permets:

En testant on code, j'ai rencontré une erreur:

capture capture2

Cela se produit si la ligne est vide, ce qui dans une utilisation normale, ne devrait pas se produire, mais un double-clic malencontreux....

Peut-être faut-il rajouter une gestion d'erreur pour cette ligne ? Qu'en penses-tu ?

Amitiés,

Bonour xorsankukai,

Comme tu as pu le voir dans toutes mes réponses, mes codes sont de très loin de la bidouille plus que du vrai VBA et je gère très rarement les erreurs car je ne les vois pas, ou tout simplement ne sais pas les contourner. Cependant j'aime bien toujours apprendre donc merci à toi pour ta remarque ! Même si je ne suis pas fan du On Error Resume Next ... :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Columns(1)) Is Nothing And Target = "Ajouter un ligne" Then
    Target.End(xlDown).EntireRow.Insert Shift:=xlUp
    Rows(Target.End(xlDown).Row - 1).FillDown
    On Error Resume Next
    Rows(Target.End(xlDown).Row - 1).SpecialCells(xlCellTypeConstants).ClearContents
    Target.EntireRow.Replace What:=Target.End(xlDown).Row - 2 & ")", Replacement:=Target.End(xlDown).Row - 1 & ")", LookAt:=xlPart
End If
End Sub

J'ai fait un essai en utilisant la propriété .count de mon objet ROWS sur les cellules constants = 0 malheureusement la propriété ne renvoie pas la valeur 0 mais une erreur 1004 ... Je voulais faire un On Error Go To SORTIE mais vu que je n'ai qu'une ligne en dessous ... Pas forcément utile je pense.

Cdlt,

Edit : Surtout que tes codes sont très bon et agréables à lire, donc tu as tout les droits de me faire une remarque là dessus ! ;) Merci à toi !

image image

Bonjour,

Je suis désolée de trop vous en demander et de revenir vers vous mais j'ai remarqué après utilisation du fichier que j'avais un nombre limité d'ajout de lignes et qu'une fois passé le message erreur d'exécution '1004' s'affichait...

Encore merci d'avance pour votre réponse!

Bonjour,

C'est "normal" vous avez des bordures jusqu'à la fin du classeur. Même si vous n'avez pas de valeur à l'intérieur, toute modification de formatage implique que ces cellules existent, vous ne pouvez les déplacer en dehors de la ligne maximale de votre classeur :
- Sélectionnez toute la ligne à la fin de votre tableau
- Faites CTRL + SHIFT + FLECHE DU BAS afin de sélectionner toutes les lignes
- Supprimez les bordures et sur la droite du menu acceuil, effacer > effacer tout

Cdlt,

Rechercher des sujets similaires à "insertion lignes gardant formules"