[MACRO] Copier une ligne X fois suivant la valeur de la cell

Bonjour,

Je me retrouve dans une situation où je pense qu'une macro devrais pouvoir le réaliser

Malheureusement mes connaissances sont limité

Je vous explique :

J'ai environ 200 lignes, tableau A4:AM200, dans la colonne I j'ai un nombre,

J'aimerai copier la ligne 4 et la coller autant de fois que le nombre dans la cellule I4.

si dans la cellule I4 j'ai : 5 la ligne 4 sera copié 4 fois (5-1), dans la même feuille, ou SI CELA EST PLUS SIMPLE copié 5 fois dans une nouvelle feuille.

si dans la cellule I25 j'ai : 8, je copie la ligne 7 fois (8-1).

une idée de comment procéder ?

Merci pour votre aide

bonjour

avant de te lancer dans une telle manœuvre qui va ajouter des dizaines de lignes, si tu disais quel est ton BUT ?

quel est l'objet de ton fichier Excel ?

gérer des livres ?

faire des calculs de statistiques ?

gérer des notes scolaires ?

préparer les dossards d'un marathon ?

?

Bonjour,

Essaie ainsi :

Sub Test()
    Dim i%, j%, n%
    With ActiveSheet
        n = .Cells(.Rows.Count, 9).End(xlUp).Row
        Application.ScreenUpdating = False
        For i = n To 1 Step -1
            If IsNumeric(.Cells(i, 9)) Then
                j = .Cells(i, 9) - 1
                If j > 0 Then
                    .Range("A" & i & ":AM" & i).Copy
                    .Range("A" & i + 1 & ":AM" & i + j).Insert xlShiftDown
                End If
            End If
        Next i
    End With
    Application.CutCopyMode = False
End Sub

Mais tu devrais te pencher sur la question de jmd...

Cordialement.

Bonjour,

merci de votre réponse rapide, si je n'ai pas parler du but, c'est pour vous éviter une partie technique qui n'est pas supposée vous dire grand chose, si vous pensez que cela est utile :

C'est la gestion de l'éclairage sportif, j'ai un inventaire par candélabre alors que je le veux par foyers, du coup j'ai une colonne nombre de foyers, pour chaque candélabre. Je veux donc dupliquer le tout, pour qu'une ligne corresponde à un foyer et non un candélabre.

Est-ce que tout ça va vraiment vous aider pour établir le fonctionnement de la macro je ne pense pas

Merci pour votre aide en tout cas, je teste et je reviens vers vous.


Ok, je viens de tester cela fonctionne parfaitement,

toutefois vu que je suis en plein apprentissage, J'ai mis mon commentaire mais pourriez commentez le code si le mien est incorrect ou incomplet ? merci

Sub Test() 'créer le nom de la fonction
    Dim i%, j%, n% 'déclare mes variables en tant que nombre entier
    With ActiveSheet 'sur la feuille active
        n = .Cells(.Rows.Count, 9).End(xlUp).Row  'égal la valeur de la colonne 9
        Application.ScreenUpdating = False
        For i = n To 1 Step -1 'boucle sur chaque ligne
            If IsNumeric(.Cells(i, 9)) Then  'test si la valeur est numérique pour la cellule ligne I colonne 9
                j = .Cells(i, 9) - 1 'valeur de la cellule colonne 9 - 1
                If j > 0 Then
                    .Range("A" & i & ":AM" & i).Copy 'copie la ligne I de la colonne A à la colonne AM
                    .Range("A" & i + 1 & ":AM" & i + j).Insert xlShiftDown 'colle la valeur dans la ligne du dessous autant de fois que la variable J
                End If
            End If
        Next i
    End With
    Application.CutCopyMode = False 'a quoi cela sert ??
End Sub

merci beaucoup

Sub Test() 'créer le nom de la fonction
    Dim i%, j%, n% 'déclare mes variables en tant que nombre entier
    With ActiveSheet 'sur la feuille active
        n = .Cells(.Rows.Count, 9).End(xlUp).Row  '[barrer]égal la valeur de la colonne 9[/barrer] n° dernière ligne occupée en col. 9 (I)
        Application.ScreenUpdating = False
        For i = n To 1 Step -1 'boucle sur chaque ligne
            If IsNumeric(.Cells(i, 9)) Then  'test si la valeur est numérique pour la cellule ligne I colonne 9
                j = .Cells(i, 9) - 1 'valeur de la cellule colonne 9 - 1
                If j > 0 Then
                    .Range("A" & i & ":AM" & i).Copy 'copie la ligne I de la colonne A à la colonne AM
                    .Range("A" & i + 1 & ":AM" & i + j).Insert xlShiftDown '[barrer]colle la valeur dans la ligne du dessous autant de fois que la variable J[/barrer] Insère j lignes sous la ligne copiée en la collant sur les lignes insérées
                End If
            End If
        Next i
    End With
    Application.CutCopyMode = False 'a quoi cela sert ?? Vide le presse-papier, ce qui élimine l'encadrement scintillant de la ligne copiée (qui ne se produit pas spontanément dans ce cas)
End Sub

Cordialement.

Mattieu a écrit :

Bonjour,

merci de votre réponse rapide, si je n'ai pas parler du but, c'est pour vous éviter une partie technique qui n'est pas supposée vous dire grand chose, si vous pensez que cela est utile :

C'est la gestion de l'éclairage sportif, j'ai un inventaire par candélabre alors que je le veux par foyers, du coup j'ai une colonne nombre de foyers, pour chaque candélabre. Je veux donc dupliquer le tout, pour qu'une ligne corresponde à un foyer et non un candélabre.

Est-ce que tout ça va vraiment vous aider pour établir le fonctionnement de la macro je ne pense pas

insérer des lignes ne va pas te donner d'inventaire par foyer. Ou alors il faut aller sur site pour saisir les foyers.

il reste plus que probable que tu es parti sur une idée d'insertion de lignes, alors qu'il est possible de travailler sans.

quoi qu'il en soit, bonne soirée à toi et à MFerrand

amitiés excelliennes à tous

Rechercher des sujets similaires à "macro copier ligne fois suivant valeur"