Modification macro pour insérer nombre de lignes souhaité

Bonjour à tous,

je suis sur une macro VBA que je souhaiterais modifier.

Cette macro fonctionne parfaitement (elle insère UNE ligne, incrémente certaines données,...) MAIS je souhaiterais que cette macro insère le nombre de lignes souhaité.

La macro actuelle est la suivante:

Sub InsertionLigne()
Application.ScreenUpdating = False
Feuil2.Select 'feuille("Prélèvement")
ActiveSheet.Unprotect
Rows("14:14").Select
Selection.Copy
Rows("14:14").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
Range("D14:G14").Select
Selection.ClearContents
Dim No As Long 'Pour augmenter le No
No = Cells(15, 1) + 1
Range("A14") = No
Range("C14") = Range("C4") 'Insérer le code de site
Range("D14").Select
ActiveCell = "=TODAY()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False

Range("D14").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowSorting:= _
True, AllowFiltering:=True, AllowUsingPivotTables:=True
Application.ScreenUpdating = True
End Sub

Je souhaiterais pouvoir y insérer le code VBA suivant:

Sub Insertion()
For i = 1 To Range("A1")
Rows("12:12").Insert Shift:=xlDown
Next i
End Sub

Ce code devrait s'insérer au niveau du 4ème paragraphe à mon sens, mais je ne sais comment m'y prendre, mes essais ne fonctionnent pas...

Merci

Edit modo : code mis entre balises (merci de faire attention)

Bonjour,

Merci d'utiliser les balises de code disponible dans la barre de menu (</>) et de placer votre code dans la fenêtre

Ce code devrait s'insérer au niveau du 4ème paragraphe à mon sens,

Que voulez-vous dire ?

Cordialement

Bonjour Dan,

voici le code avec les balises:

Sub InsertionLigne()
'
' InsertionLigne Macro
' Macro enregistrée le 11/10/2017 (Adriana TV)

Application.ScreenUpdating = False

Feuil2.Select 'feuille("Prélèvement")
    ActiveSheet.Unprotect

    Rows("14:14").Select
    Selection.Copy
    Rows("14:14").Select
    Selection.Insert Shift:=xlDown

    Application.CutCopyMode = False
    Range("D14:G14").Select
    Selection.ClearContents

    Dim No As Long 'Pour augmenter le No
    No = Cells(15, 1) + 1
    Range("A14") = No
    Range("C14") = Range("C4") 'Insérer le code de site

    Range("D14").Select
    ActiveCell = "=TODAY()"
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False

    Range("D14").Select

    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowSorting:= _
        True, AllowFiltering:=True, AllowUsingPivotTables:=True

Application.ScreenUpdating = True

End Sub

Ce code me permet d'insérer une ligne et d'incrémenter des données (quand j'insère une ligne, j'ai plusieurs informations qui s'insèrent automatiquement).

Le problème c'est que je souhaiterais pouvoir avoir le choix du nombre de lignes à insérer. C'est pourquoi j'ai ce code là:

Sub Insertion()
    For i = 1 To Range("A1")
        Rows("12:12").Insert Shift:=xlDown
    Next i
End Sub

Ce code me permet de définir le nombre de lignes à insérer.

Je voulais savoir s'il était possible de combiner ce code au précédent.

Dans le premier code vous utilisez la ligne 14 et dans le second la ligne 12
Est-ce que vous partez toujours de la ligne 14 ?

en gros, vous exécutez le premier code puis vous insérez les lignes en ligne 12 ?

ah oui pardon, je pars toujours de la ligne 14.

L'idée c'est de pouvoir choisir le nombre de ligne à insérer

ah oui pardon, je pars toujours de la ligne 14.

Ok mais votre deuxième code insère toujours bien à la ligne 12 ?

L'idée c'est de pouvoir choisir le nombre de ligne à insérer

Là je vois que c'est défini dans la cellule A1. Juste ?

Non le second aussi à la ligne 14.

En fait je veux modifier le premier code, qui insère 1 ligne à la fois, par le second code qui me permettra d'avoir le contrôle sur le nombre de lignes à insérer.

Le premier code fonctionne parfaitement (incrémentation automatique). La seule chose qui ne fonctionne pas comme je le souhaite c'est le nombre de ligne à insérer.

Et oui le nombre de cellules à insérer sera défini en cellule A1

Merci

Pas sûr que c'est ce que vous voulez mais eEssayez toujours comme ceci

Sub InsertionLigne()
Application.ScreenUpdating = False

With Feuil2
    .Unprotect 'feuille("Prélèvement")
    With .Rows("14:14")
        .Copy
        .Insert Shift:=xlDown
    End With
    .Range("D14:G14").ClearContents
    .Range("A14") = .Cells(15, 1) + 1
    .Range("C14") = .Range("C4") 'Insérer le code de site
    .Range("D14") = Format(Now, "dd/mm/yyyy")
    Application.CutCopyMode = False
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowSorting:= _
        True, AllowFiltering:=True, AllowUsingPivotTables:=True

    Dim i As Integer
    For i = 1 To .Range("A1")
        .Rows("12:12").Insert Shift:=xlDown
    Next i
End With
Application.ScreenUpdating = True
End Sub

Dan,

j'ai essayé sur mon fichier mais cela ne fonctionne pas.

Je t'ai mis mon fichier pour que tu y jettes un œil.

En te remerciant de ton aide

16test-macro-vba.zip (639.03 Ko)

Merci du fichier

En voyant votre fichier et la valeur 4 en A1, est-ce que c'est ceci que vous voulez faire ?

- ajouter 4 lignes en ligne 14
- ajouter le num en colonne A pour chaque ligne ajoutée
- ajouter la date du jour en colonne D pour chaque ligne ajoutée
- ajouter C4 en colonne C pour chaque ligne ajoutée

Effectivement je souhaite lorsque je met 4 en A1:

  1. 4 lignes s'ajoutent en ligne 14
  2. ajouter le num en colonne A pour chaque ligne ajoutée
  3. ajouter le CODE en colonne B pour chaque ligne ajoutée
  4. Ainsi que les autres informations (code site, code correcte, fromage, code analyse, semaine Envoie, mois envoie et année envoie)

Ok. Essayez comme ceci

Sub InsertionLigne()
Application.ScreenUpdating = False
With Feuil2
    .Unprotect 'feuille("Prélèvement")
    Dim i As Integer
    For i = 1 To .Range("A1").Value
        .Rows("14:14").Insert Shift:=xlDown
        .Range("A14") = WorksheetFunction.Max(.Range("A14:A" & .Range("A" & Rows.Count).End(xlUp).Row)) + 1
        .Range("C14") = .Range("C4").Value
        .Range("D14") = Format(Now, "dd/mm/yyyy")
        .Range("B15").AutoFill Destination:=.Range("B14:B15"), Type:=xlFillDefault
        .Range("I15:N15").AutoFill Destination:=.Range("I14:N15"), Type:=xlFillDefault
    Next i
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowSorting:= _
        True, AllowFiltering:=True, AllowUsingPivotTables:=True
End With
Application.ScreenUpdating = True
End Sub

Sinon, en mettant votre tableau au format structuré , on pourrait aussi réduire le code (il serait à changer) et avoir une plus belle présentation

Cordialement

Cela fonctionne!

Merci beaucoup Dan pour ton aide!

A bientôt

Bonjour Dan,

j'aurais une autre demande à partir de ce fichier.

Serait-il possible de créer une macro qui récupère les données collées dans un onglet en les ajoutant dans les tableau. De ce fait cette macro serait capable d'insérer le nombre de lignes correspondant au nombre de lignes copié/coller dans l'onglet voisin?

Je ne sais pas si cela est clair et réalisable?

merci

une macro qui récupère les données collées dans un onglet en les ajoutant dans les tableau

Oui. mais pouvez vous placer un exemple avec le résultat attendu

Bonjour Dan,

ci-joint le fichier avec la demande.

6test-macro-vba.zip (639.52 Ko)

Bonjour

J'ai quelques questions :

- Pourquoi vous voulez dissocier les 13 numéros alors que vous les reprenez en colonne K
- les 13 numéros "étape 1" sont toujours positionnés entre C4 et C16 ?
- Incrémenter les codes échantillon "étape 3". ce sont les numéros en colonne A (incrémentés par le code proposé avant) ? Donc si 13 numéros on aura 13 en cellule A1 ?
- Les 13 numéros sont bien à transférer en colonne E dans la feuille prélèvement ?
- Quand vous dites "20 n° de lot" je suppose que les 13 peuvent être 20

j'aurais préféré avoir un fichier avec une deuxième feuille prélèvement avec le résultat attendu

Bonjour,

- c'est vrai que c'est répétitif, mais les équipes ont pour habitude de fonctionner comme ça (rentrent seulement le numéro à 7 chiffres).

- les 13 numéros (qui peuvent varier en fonction de la saisie du jour) pourront être toujours saisi à partir de la même ligne (plus ou moins longue en fonction du nombre à saisir).

- incrémenter les codes, ce sont les éléments placés en colonnes A, B et C et H,I,J,K,L,M et N

- effectivement les 13 numéros sont bien à transférer en colonne E dans la feuille prélèvement

- exactement le nombre de n° de lot à "transférer" dans l'onglet prélèvement peut varier, d'où la nécessité de créer une macro permettant de basculer ces N° de lot et insérer le nombre de lignes adéquates à ces n°de lot inséré.

Merci pour ton aide

3test-macro-vba.zip (645.15 Ko)

Bonjour Dan, Excelée

@Excelée, quand un modérateur vous demande de mettre votre code entre balises,
ce n'est pas pour recréer un nouveau post mais pour éditer l'ancien et le modifier

Comme ce que j'ai fait ICI https://forum.excel-pratique.com/s/goto/1041595

Vous voudrez bien vous conformer à la charte SVP

Merci de votre compréhension

Rechercher des sujets similaires à "modification macro inserer nombre lignes souhaite"