Insertion de plusieurs lignes en fonction d'une valeur avec une incrementation

Résolu
Bonjour à tous,

Je suis nouvelle dans ce forum, j'ai besoin d'aide sur mon code VBA, je suis débutante et je suis bloquée.
Dans mon code, je veux insérer des lignes en fonction d'un nombre dans une cellule et je veux que quand j’insère la ligne qu'il me fasse une incrémentation de certains valeurs.
> Je suis bloquée sur l' incrémentation , j'arrive à mettre une ligne par ligne et je veux que par exemple dans une cellule j'ai le chiffre 5 et il me met par la suite 5 lignes.
> Voici le code
>
> Private Sub CommandButton2_Click()
>
>
> Application.ScreenUpdating = False
> Dim AJ As Long
> AJ = ActiveCell.Row
> With ActiveSheet
> .Rows(AJ).Insert shift:=xlDown
> .Rows(AJ).EntireRow.Hidden = False
> ' met les lignes en fonction de la cellule
'Sheets(1).Select
> 'Range("C6").Select
> 'i = Range("C6").Value
> 'Rows("7:" : 6 + i : "").Select
> 'Selection.Insert shift:=xlDown
> 'recopie les valeurs précedent dans la nouvelle ligne
> Application.Calculation = xlCalculationManual
> .Range("B" : AJ) = .Range("B" : AJ - 1).Formula
> .Range("C" : AJ) = .Range("C" : AJ - 1).Formula
> .Range("D" : AJ) = .Range("D" : AJ - 1).Formula
> .Range("K" : AJ) = .Range("K" : AJ - 1).Formula
> .Range("L" : AJ) = .Range("L" : AJ - 1).Formula
> .Range("M" : AJ) = .Range("M" : AJ - 1).Formula
> .Range("N" : AJ) = .Range("N" : AJ - 1).Formula
> ' je veux incrementer
> .Range("AD" : AJ) = .Range("AD" : AJ - 1).Formula + .Range("AD" : AJ - 1)
> End With
> Application.CutCopyMode = False
> Application.Calculation = xlCalculationAutomatic
> Application.ScreenUpdating = True
>
> End Sub

Merci d'avance pour votre attention et votre aide.

3 réponses

  1. Bonjour,

     'i = Range("C6").Value 

    C'est cette cellule qui donne le nombre de lignes??
    Y a un bleme avec ceci entre autre:
     'Rows("7:" : 6 + i : "").Select 

    Pourquoi de : ald &!!!!!!
    Pourquoi une plage de code qui devrait vous servir est en commentaire??
    0
    1. Merci pour ton attention.

      le range ("C6 ").value c'est un exemple . je veux le généraliser pour qu'il ne soit pas que sur c6
      par exemple sur la ligne 2 j'ai 5 dans la cellule c2 et je veux qu'il m'insert 5 lignes par la suite et en copiant les informations d'avant.

      Pour le Rows("7:" : 6 + i : "").Select je n'arrive a pas le faire pour que sa marche dans une ligne quelconque.

      et les plages en commentaire ,je testais les codes
      0
    2. Re,

      je veux le généraliser pour qu'il ne soit pas que sur c6
      Tout a fait Thierry(connais pas le feminin), mais a quoi voyons nous que c'est une cellule aleatoire????

      Pour le Rows("7:" : 6 + i : "").Select, ce n'est pas une ligne quelconque, mais pour que ca marche
      Rows("7:" &  6 + i )
      ca devrait aller mieux et le select n'est necessaire
      0
    3. ça fonctionne pas.
      je réexplique, j'ai un bouton qui insère des lignes , je veux que quand j'appuis ce bouton qu'il m'insère des lignes et le nombre de lignes à insérer et donner par une cellule qui correspond. exemple j'ai une famille qui a 3 membres de personne dans le foyer . la cellule contient le chiffre 3 donc quand j'appuis sur le bouton d'insertion il m'insère les 3 lignes en recopiant certains éléments de la ligne précédente. C'est ce que j'ai essayé de faire dans le code que j'ai envoyé ça marche pas. il me met pas les lignes au bon endroit.
      0
    4. Re
      Sur que ce peut pas marcher.
      Vous feriez mieux de mettre votre fichier à dispo pour que nous puissions comprendre d'ou sort la cellule qui donne le nombre de lignes à insérer.
      Site pour partage, ci-joint.com ou mon-partage.fr
      0
    5. Bonjour,
      vous trouverez le fichier en cliquant sur ce lien. Ne tenez pas compte de la feuille(archives)
      https://mon-partage.fr/f/rhMQYqvl/ .

      Merci
      0
  2. Bonjour le forum,

    Pouvez vous m'aider sur le complément de mon code?
    J'ai réussi à mettre les lignes mais je n'arrive pas à copier la ligne précédente sur les lignes insérées et à faire une incrémentation sur un colonne.

    Merci d'avance pour votre aide.
    Application.ScreenUpdating = False
    'déclaration des variables
    Dim message As String, title As String
    Dim nblg As Byte
    Dim I As Long

    I = ActiveCell.Row
    'on prépare les infos pour le message box
    message = "Entrez le nombre de lignes"
    title = "Insérer lignes"
    'demande le nombre de lignes à insérer
    nblg = Application.InputBox(message, title, Type:=1)
    'test pour sortir au cas ou l'utilisateur rentre 0 ligne
    If nblg = 0 Then MsgBox "Le nombre de lignes est à zéro": End

    'copie de la dernière ligne remplie
    Rows(I).Copy

    Rows(I).Resize(nblg, 1).Insert Shift:=xlShiftDown 'Insertion par copie des nouvelles lignes
    Rows(I + 1).Resize(nblg).ClearContents 'on efface le contenu des lignes copiées pour avoir des lignes vierges
    L = Range("U" & nblg)
    LD = nblg + 1
    LF = nblg + L - 1
    NPF = 1
    LD = LD - 1
    LF = LF
    For m = LD To nblg
    Range("AG" & m) = NPF
    NPF = NPF + 1
    Next m
    nblg = nblg + L
    Range("B" & nblg & ":D" & nblg).Copy Range("B" & LD & ":D" & LF)
    Range("L" & nblg & ":M" & nblg).Copy Range("L" & LD & ":M" & LF)


    Merci.
    0
    1. Bonjour,

      Ok, je regarde la chose

      Sub test()
          'd?claration des variables
          Dim message As String, title As String
          Dim nblg As Long
          Dim I As Long
      
          'Application.ScreenUpdating = False
          I = ActiveCell.Row
          'on pr?pare les infos pour le message box
          message = "Entrez le nombre de lignes"
          title = "Insertion lignes"
          'demande le nombre de lignes ? ins?rer
          nblg = Application.InputBox(message, title, Type:=1)
          'test pour sortir au cas ou l'utilisateur rentre 0 ligne
          If nblg = 0 Then MsgBox "Le nombre de lignes est ? z?ro": End    'copie de la derni?re ligne remplie
          LD = I + 1
          LF = I + nblg
          Rows(LD & ":" & LF).Insert Shift:=xlShiftUp 'Insertion par copie des nouvelles lignes
          Range("B" & I & ":D" & I).Copy Range("B" & LD & ":D" & LF)
          Range("L" & I & ":M" & I).Copy Range("L" & LD & ":M" & LF)
          NPF = 1
          LD = I
          LF = LF
          For m = LD To LF
              Range("AG" & m) = NPF
              NPF = NPF + 1
          Next m
      End Sub
      
      0
      1. Re,

        D'accord merci.
        0