Microsoft 365 Macro Pour inserer 9 lignes à chaque nouveau matricule

SEVE95

XLDnaute Nouveau
Bonjour,
Je voudrais faire une macro qui me permette d'insérer 9 lignes à chaque nouveau matricule
Je vous remercie par avance
Bien cordialement
 

Pièces jointes

  • base pour inserer des lignes.xlsx
    24 KB · Affichages: 9

vgendron

XLDnaute Barbatruc
Hello

un essai en PJ
il me semble que la description "à chaque NOUVEAU matricule" ne correspond pas au commentaire "inserer 9 lignes ici" dans la feuille
 

Pièces jointes

  • base pour inserer des lignes.xlsm
    48 KB · Affichages: 3

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Vincent pourquoi une 2eme boucle il me semble que l'on peut le faire avec une seule boucle et arrêter la boucle à 4 au lieu de 3

For i = LastLine To 4 Step -1

VB:
Sub InsererEntreChaqueligne()
Application.ScreenUpdating = False
Dim i&, LastLine&
With ActiveSheet
    LastLine = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = LastLine To 4 Step -1
        If .Range("A" & i) <> .Range("A" & i - 1) Then
            .Rows(i & ":" & i + 9).Insert
'            For j = 1 To 9
'                .Rows(i).Insert
'            Next j
        End If
    Next i
End With
Application.ScreenUpdating = True
MsgBox "OK"
End Sub
 

Pièces jointes

  • Insertion X lignes V1.xlsm
    47.3 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Bonjour à tous

Vincent pourquoi une 2eme boucle il me semble que l'on peut le faire avec une seule boucle et arrêter la boucle à 4 au lieu de 3



VB:
Sub InsererEntreChaqueligne()
Application.ScreenUpdating = False
Dim i&, LastLine&
With ActiveSheet
    LastLine = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = LastLine To 4 Step -1
        If .Range("A" & i) <> .Range("A" & i - 1) Then
            .Rows(i & ":" & i + 9).Insert
'            For j = 1 To 9
'                .Rows(i).Insert
'            Next j
        End If
    Next i
End With
Application.ScreenUpdating = True
MsgBox "OK"
End Sub
Hello Phil

pourquoi une seconde boucle.. parce que je me pose systématiquement la question de "comment inserer x lignes d'un coup" :)
et pour s'arreter à 4 au lieu de 3.. effectivement
 

vgendron

XLDnaute Barbatruc
tu parles de 5000 lignes.. j'en déduis que finalement, ce n'est pas entre chaque NOUVEAU matricule mais bien entre CHAQUE ligne

VB:
Sub InsererEntreChaqueligne()
    Application.ScreenUpdating = False
    With ActiveSheet 'avec la feuille active
        LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne non vide de la colonne A
       
        Set zone = .Range("A2:F" & LastLine) 'on définit le tableau complet
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=zone.Columns(1).Offset(1, 0), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'on créé le tri sur la colonne A
        With .Sort 'on applique le tri
            .SetRange zone
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

        For i = LastLine To 4 Step -1 'pour toutes les lignes en partant du bas
            'If .Range("A" & i) <> .Range("A" & i - 1) Then 'si on a deux matricules différents
                .Rows(i).Resize(9).Insert
            'End If
        Next i
    End With
    Application.ScreenUpdating = True
    MsgBox "OK"
End Sub
 

Phil69970

XLDnaute Barbatruc
Re

En plus court pour le tri

VB:
Sub InsererEntreChaqueligne()
Application.ScreenUpdating = False
With ActiveSheet 'avec la feuille active
    LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne non vide de la colonne A
   .Range("A2:F" & LastLine).Sort Key1:=Range("A2:F" & LastLine), Order1:=1, Header:=xlYes, DataOption1:=xlSortNormal 'xlSortTextAsNumbers
    For i = LastLine To 4 Step -1 'pour toutes les lignes en partant du bas
        If .Range("A" & i) <> .Range("A" & i - 1) Then 'si on a deux matricules différents
            '.Rows(i & ":" & i + 9).Insert
            .Rows(i).Resize(9).Insert 'ou en version plus élégante de Cousinhub  ; )
        End If
    Next i
End With
Application.ScreenUpdating = True
MsgBox "OK"
End Sub

Et même remarque que Vincent
chez moi, avec ton fichier, elle s'execute correctement...

Ou alors il nous manque une info ......:oops:
 

SEVE95

XLDnaute Nouveau
Merci pour votre retour,
J'ai copié la macro dans visual basic et en l'éxécutant j'ai ce message
1719223849676.png
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 191
Membres
112 679
dernier inscrit
Yupanki