Choix nombre de lignes à insérer [Résolu]

Signaler
Messages postés
3
Date d'inscription
vendredi 15 mai 2009
Statut
Membre
Dernière intervention
9 juin 2009
-
alkacefa17
Messages postés
5
Date d'inscription
jeudi 24 janvier 2013
Statut
Membre
Dernière intervention
26 janvier 2013
-
Bonjour à vous,

nouveau sur le forum et débutant VB depuis 1 an je suis à la recherche d'une aide. Mon code permet l'insertion d'une ligne après la dernière ligne remplie en gardant les formules de la ligne copiée.

Mon problème réside dans le fait que je voudrai que l'utilisateur est le choix du nombre de lignes à insérer et c'est là que ça bloque.

Sheets("A").Select
    Range("A1").Select
    Rows("1000:1000").Copy
   
'Trouve la dernière ligne remplie puis descend d'une ligne'
    Selection.End(xlDown).Offset(1, 0).Select
   
'Choix d'une nombre de lignes à insérer'
    X = InputBox("Saisir le nombre de lignes à insérer", "Insertion lignes")
    Selection.Insert , Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   
    ActiveSheet.Paste
'Trouve la première ligne vide nommée DERNIERE '


   Range("DERNIERE").Select
'Remonte d'une ligne et efface'
    Range(Selection, Selection.End(xlUp)).ClearContents

Je ne sais pas si j'ai mis le code de la bonne façon, n'hésitez pas à me reprendre au cas ou?
Et j'attend votre aid epour m'aider à avancer un peu et ainsi progresser


Le développement, c'est intéressant!! Et ça demande de la rigeur.

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Salut
Catégorie de la question modifiée .Net --> VBA

Je ne vois pas trop ce que tu veux faire avec ton Rows(1000:1000) ...
Pour sélectionner tout le classeur :
   Cells.Select

Pour insérer plusieurs lignes :
   Dim laLigne As Long
   X = InputBox ...
   laLigne = ActiveCell.Row
   Rows(CStr(laLigne) & ":" & CStr(laLigne + X)).Select
   Selection.Insert Shift:=xlDown

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Ah, si tu veux insérer des lignes que tu as préparées, en effet, c'est différent.
Fais quand même l'essai proposé, mais cette insertion insère des lignes vides, sans mise en forme.
Sinon, tu gardes le principe de demander le nombre de lignes, puis tu fais une boucle :
For r = 1 To X
   tu fais ton insert/paste
   tu te positionnes à la ligne d'après
Next r

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3
Date d'inscription
vendredi 15 mai 2009
Statut
Membre
Dernière intervention
9 juin 2009

Bonour,


et tout d'abord merci pour ta réponse précise et rapide.


Pour explication : je copie la ligne 1000 qui est ma ligne de référence et l'insert après la dernière ligne remplie. Une fois fait je supprime les données des cellules afin de garder les cellules avec formules.
Je voulais faire insérer le nombre de ligne nécessaires à l'utilisateur en une fois afin de lui éviter de rappuyer sur le bouton.

J'essai ta proposition pour voir si j'arrive à l'appliquer.

Enncore fois merci de l'aide apportée.


Le développement, c'est intéressant!! Et ça demande de la rigeur.
Messages postés
3
Date d'inscription
vendredi 15 mai 2009
Statut
Membre
Dernière intervention
9 juin 2009

Merci jack pour tes réponses,

après différents essais ta seconde solution m'a paru plus appropriée à mon problème et j'ai donc pu la mettre en place.
Je dépose le code terminé si cela peux en aider d'autres :

Sub Insertion_lignes()
'
' Insertion_lignes Macro
'
'Choix du nombre de lignes à insérer'
    x = InputBox("Saisir le nombre de lignes à insérer", "Insertion lignes")
    For i = 1 To x
'Sélection de la feuille + cellule'
    Sheets("Saisie des affectations").Select
    Range("A1").Select
'Copie ligne de référence'
    Rows("1000:1000").Copy
'Atteint la dernière ligne remplie et descend de 1 ligne'
    Selection.End(xlDown).Offset(1, 0).Select
    Selection.Insert Shift:=xlDown, Copyorigin:=xlFormatFromLeftOrAbove
'Colle la ligne 1000 et efface les données'
    ActiveSheet.Paste
    Range("DERNIERE").Select
    Range(Selection, Selection.End(xlUp)).ClearContents
    Next i
   
End Sub

Encore un fois merci de ton aide Jack

Le développement, c'est intéressant!! Et ça demande de la rigeur.
Messages postés
5
Date d'inscription
jeudi 24 janvier 2013
Statut
Membre
Dernière intervention
26 janvier 2013

Bonjour,

Je ne suis qu'un modeste debutant en vba. Je suis en train de creer un livre de compte qui "fonctionne" pas très mal, mais maintenant je voudrais inserer +sieurs lignes ainsi que les formules afférentes.

J'ai repris le code ci-dessus, mais il bug à Range("DERNIERE").Select pour l'instant.
Je ne vois pas où on nomme "DERNIERE" la ligne inserée.

Pouvez-vous m'aider


Merci

Alain
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour,
DERNIERE n'a, dans le code que tu as lu au dessus, rien à voir avec les lignes à insérer !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
5
Date d'inscription
jeudi 24 janvier 2013
Statut
Membre
Dernière intervention
26 janvier 2013

Bonjour,

En fait, le bug commence sur
Selection.Insert Shift:=xlDown, Copyorigin:=xlFormatFromLeftOrAbove

Moi pour l'instant c'est ce code qui tourne, mais ce que je cherche, c'est d'inserer +sieurs lignes avec les formules attachées. C'est un code que j'ai récupéré et un peu modifié, je reste prudent.

Sub Insertion2()
'ActiveSheet.Unprotect
derlig = Range("A6").End(xlDown).Row + 2 'recherche première ligne vide
Rows(derlig).Select
Selection.Insert Shift:=xlDown 'Insertion à la première ligne vide

'*********Mise en forme
' A améliorer
ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select
Selection.Copy
ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(-1, 0).Range("A1:o1").Select
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(-1, 3).Range("A1:B1").Select
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(-2, 0).Range("A1").Select
Application.CutCopyMode = False

ActiveCell.Offset(1, -3).Range("A1:o1").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
'ActiveCell.Offset(0, 1).Range("A1").Select
'ActiveCell.Formula = "=SUM(D10:D" & [D10].End(xlDown).Row & ")"
'ActiveCell.Offset(0, 1).Range("A1").Select
'ActiveCell.Formula = "=SUM(E10:D" & [E10].End(xlDown).Row & ")"

End Sub

Merci pour ton aide


Cdt

Alain