Microsoft 365 Macro pour insérer une ligne avec conservation de formules et MFC

sanae_J

XLDnaute Nouveau
Bonjour, ça fait quelques jours que je cherchais un code VBA qui pourrait m'aider à insérer des lignes à l'aide d'un bouton tt en conservant les formules des lignes précédentes. J'ai réussi à trouver ce code générique sauf qu'il prend beaucoup de temps pour s'exécuter, je pense car j'ai déjà plusieurs formules dans mon fichier. J'aimerais savoir à travers vous s'il y en a un moyen pour l'optimiser ?ou s'il y une autre méthode pour faire ceci!Merci d'avance pour votre aide.
VB:
Sub InsererLignesCopierFormules()
'Macro insère ligne(s) en-dessous de la (ou des) cellule(s) choisie(s) et copie les formules uniquement

Dim NbLignes As Integer
Dim NbLignes_a As Integer
Dim SelCol As Integer
 
Application.ScreenUpdating = False
 
NbLignes = Selection.Rows.count 'Nombre de lignes dans la sélection
NbLignes_a = NbLignes
SelCol = Selection.Cells(1, 1).Column
 
If NbLignes > 1 Then
    'On choisit la 1re ligne entière de la sélection
    Selection.Cells(1, 1).EntireRow.Select
 
    'On redimensionne du nombre de lignes choisies et on se place une ligne en dessous (.Rows(NbLignes_a + 1) )
    'On redimensionne encore pour insérer le bon nombre de lignes
    Selection.Resize(rowsize:=NbLignes_a).Rows(NbLignes_a + 1).EntireRow. _
        Resize(rowsize:=NbLignes).Insert Shift:=xlDown
 
    'On décale la selection
    Selection.Offset(NbLignes - 1).EntireRow.Select
 
    '"Autofill" à partir de la dernière ligne de la sélection pour recopier valeurs, formules et formats
    Selection.AutoFill Selection.Resize(rowsize:=NbLignes + 1), xlFillDefault
 
    On Error Resume Next
    'On efface les constantes sous la dernière ligne de la sélection
    Selection.Offset(1).Resize(NbLignes).EntireRow.SpecialCells(xlConstants).ClearContents
 
Else    ' une seule ligne choisie
    NbLignes_a = 2
    ActiveCell.EntireRow.Select
    Selection.Resize(rowsize:=NbLignes_a).Rows(NbLignes_a).EntireRow. _
        Resize(rowsize:=NbLignes).Insert Shift:=xlDown
 
    Selection.AutoFill Selection.Resize(rowsize:=NbLignes + 1), xlFillDefault
 
    On Error Resume Next
    Selection.Offset(1).Resize(NbLignes).EntireRow.SpecialCells(xlConstants).ClearContents
 
End If
 
Cells(Selection.Row + 1, SelCol).Select 'pour se replacer
Application.ScreenUpdating = True
 
End Sub
 

sanae_J

XLDnaute Nouveau
A titre d'info, j'ai des macros qui permettent de remplir le tableau en automatique.
J'ai découvert finalement que les données sont copiées hors plage du tableau!!faut il modifier qlq chose dans les paramètres tableau?

Fichier similaire pour illustrer le problème:
 

Pièces jointes

  • sanae_4.xlsm
    23.1 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 110
Messages
2 085 388
Membres
102 882
dernier inscrit
Sultan94