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

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

fanch55

XLDnaute Barbatruc
Salut @ tous
Pourriez-vous préciser votre demande car comme les matricules ne sont pas triés et qu'il y a de 1 ligne à 67 lignes par matricule unique, les 9 lignes à ajouter sont pour qui ?
 

SEVE95

XLDnaute Nouveau
Bonjour,
En fait ils ont le même matricule mais le centre consommateur différent
Donc à chaque matricule et code consommateur différent je veux insérer 9 Lignes
Merci beaucoup pour votre retour
 

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
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
 

SEVE95

XLDnaute Nouveau
J'ai essayé la macro, mais elle me l'exécute que pour le premier matricule Je voudrais qu'elle me le fasse Jusqu'au matricule ligne 509 qui ferait au moins 5000 lignes Merci par avance
 

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 ......
 

Discussions similaires

Réponses
5
Affichages
226
Réponses
20
Affichages
419
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…