Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Insérer 2 lignes en copiant certaines cellules

Mnd

XLDnaute Nouveau
Bonjour à tous,

J'utilise une macro pour insérer 2 lignes après chaque ligne de mon tableau EXCEL

Sub InsertionLigne()
Dim i As Integer
For i = 100 To 1 Step -1
Cells(i + 1, 1).Select
ActiveCell.Offset(1).Resize(2, 1).EntireRow.Insert
Next
End Sub
Ce code fonctionne très bien mais j'aimerais ajouter des éléments.

J'aimerais que dans les cellules insérées des informations soient reprises
Les colonnes A B C et E doivent être copiées dans les 2 lignes insérées.
Dans la 2e ligne insérée colonne D j'aimerais le code 445660 systématiquement
Dans la 1ère ligne insérée colonne F j'aimerais que montant indiqué dans la colonne G de la ligne juste au-dessus soit divisé par 1.2
Dans la 2e ligne insérée colonne F j'aimerais que montant indiqué soit le montant de la colonne G 2 lignes au dessus - le montant de la colonne F 1 ligne au-dessus :
Exemple ci-dessous :
JournalDateRéf. pièceCompteLibelléDébitCrédit
AC01/06/2020SOLEIL467300ABCD405,00
AC01/06/2020SOLEILABCD337.50
AC01/06/2020SOLEIL445660ABCD67.50

Pourriez-vous m'aider s'il vous plait ?

Merci à vous d'avance !
 
Solution
Bonjour,

Autre proposition, une fois que le traitement à été fait, les lignes traitées sont marquées "Traitées" en colonne H pour éviter de répéter l'opération sur ces lignes si le traitement à déjà eu lieu.

VB:
Sub InsertionLigne()
    Dim i As Long, DerLig As Long
    Application.ScreenUpdating = False
    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    For i = DerLig To 2 Step -1
        If Range("H" & i).Value = "" Then 'si la ligne n'est pas encore traitée
            'on insère 2 lignes et on recopie la ligne en cours
            Range("A" & i & ":H" & i).Copy
            Range("A" & i + 1 & ":H" & i + 2).Insert Shift:=xlDown
            Range("D" & i + 1 & ":H" & i + 2).ClearContents 'on efface les données en surplus...

haonv

XLDnaute Occasionnel
Bonjour,

Un essai avec


Cordialement
 

Rouge

XLDnaute Impliqué
Bonjour,

Autre proposition, une fois que le traitement à été fait, les lignes traitées sont marquées "Traitées" en colonne H pour éviter de répéter l'opération sur ces lignes si le traitement à déjà eu lieu.

VB:
Sub InsertionLigne()
    Dim i As Long, DerLig As Long
    Application.ScreenUpdating = False
    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    For i = DerLig To 2 Step -1
        If Range("H" & i).Value = "" Then 'si la ligne n'est pas encore traitée
            'on insère 2 lignes et on recopie la ligne en cours
            Range("A" & i & ":H" & i).Copy
            Range("A" & i + 1 & ":H" & i + 2).Insert Shift:=xlDown
            Range("D" & i + 1 & ":H" & i + 2).ClearContents 'on efface les données en surplus
            
            'Dans la 2e ligne insérée colonne D j'aimerais le code 445660 systématiquement
            Cells(i + 2, "D") = 445660
            
            'Dans la 1ère ligne insérée colonne F j'aimerais que montant indiqué dans la colonne G de la ligne juste au-dessus soit divisé par 1.2
            Cells(i + 1, "F") = Cells(i, "G") / 1.2
            
            'Dans la 2e ligne insérée colonne F j'aimerais que montant indiqué soit le montant de la colonne G 2 lignes au dessus - le montant de la colonne F 1 ligne au-dessus
            Cells(i + 2, "F") = Cells(i, "G") - Cells(i + 1, "F")
            Range("H" & i & ":H" & i + 2).Value = "Traitée" 'on marque la ligne comme étant traitée pour éviter de répéter l'opération sur ces lignes
        End If
    Next
End Sub

Cdlt
 

Pièces jointes

  • Mnd_Insérer 2 lignes en copiant certaines cellules.xlsm
    18.2 KB · Affichages: 10

haonv

XLDnaute Occasionnel
Re Mnd, Rouge,

Je reviens sur :
Cells(i + 2, 6) = Round(Cells(i + 1, 7) / 1.2, 2)
Je pense qu'il faut prendre l'arrondi à 2 chiffres comme c'est du monétaire, quelque soit le code choisi.
Suivant le format et les valeurs en colonne F et G, il y a un risque d'approximation pour certaines lignes.

Cordialement
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…