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

insertions de lignes en VB vers le bas

  • Initiateur de la discussion josias
  • Date de début
J

josias

Guest
Bonjour a tous !

Comment fait-on, en VB, pour inserrer une ligne dans un tableau EXCEL vers le bas !

J'ai essayé ce code mais ça marche pas:

ex:

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

Merci de votre attention !
 
P

Pascal76

Guest
Salut André

essaies ceci

sub essai()

Dim maligne as integer

maligne = ActiveCell.Row
Rows(maligne & ":" & maligne).Insert Shift:=xlDown
Range("A" & maligne - 1 & ":G" & maligne - 1).AutoFill Destination:=Range("A" & maligne - 1 & ":G" & maligne), Type:=xlFillDefault

end sub

cela t'insères une ligne juste au dessus de la ligne de ta cellule active et y recopies les formules de la ligne du dessus

Pascal
 
J

Jean-Marie

Guest
Re...

Excuse moi,

Sub André()
Dim vLigne As Long

vLigne = ActiveCell.Row
Selection.EntireRow.Insert
Range("A" & vLigne & ":G" & vLigne).Select
Selection.AutoFill Destination:=Range("A" & vLigne & ":G" & vLigne + 1), Type:=xlFillDefault
Range("A" & vLigne & ":G" & vLigne + 1).Select
Rows(vLigne + 1).Select
Selection.SpecialCells(xlCellTypeConstants,23).Select
Selection.ClearContents
Range("A" & vLigne + 1).Select
End Sub

@+Jean-Marie
 
P

Pascal76

Guest
oups j'ai oublié d'effacer les constantes

donc cela donne

Sub essai()

Dim MaLigne As Integer

MaLigne = ActiveCell.Row
Rows(MaLigne & ":" & MaLigne).Insert Shift:=xlDown
Range("A" & MaLigne - 1 & ":G" & MaLigne - 1).AutoFill Destination:=Range("A" & MaLigne - 1 & ":G" & MaLigne), Type:=xlFillDefault
Rows(MaLigne).SpecialCells(xlCellTypeConstants, 23).ClearContents

End Sub

Bonne journée

Pascal
 
J

Jean-Marie

Guest
Re...

Je pense que cela dépend de l'endroit où tu places le MaLigne = ActiveCell.Row

Je n'ai pas peu tester complètement le code j'ai un blocage ici Selection.SpecialCells(xlCellTypeConstants,23).Select

@+Jean-Marie
 
A

andré

Guest
Salut,

Résultat des essais :

Jean-Marie : ne marche pas - erreur 400

Pascal 76 : marche parfaitement (et les lignes du dessous s'incrémentent bien !)
Petit problème : lorsqu'il n'y a pas de constantes (cela peut arriver) la macro s'exécute convenablement, mais à la sortie il y a aussi un message d'erreur 400.
Je suppose que ce n'est qu'une petite condtion à ajouter avant le "effacer les constantes", du type IF THEN OR (mais je ne sais pas le faire).

Serait-il compliqué d'y ajouter une petite boucle permettant d'insérer et de copier ainsi 3, 5 ou 10 lignes.
Je ne désire pas un choix, uniquement la possibilité de modifier ce nombre dans la macro.
Ce n'est qu'à l'usage que je pourrais me rendre compte du nombre le plus adéquat.

A moins que vous ayez une astuce sous la main, par exemple sélectionner 3 cellules (les unes à côté des autres car cette insertion se fait normalement au-dessus de la dernière ligne d'un tableau) pour insérer et copier trois nouvelles lignes.

Tout ceci me laisse l'impression d'être dans un restaurant où j'explique au "CHEF" ce que je souhaite manger, mais moi je ne sais pas cuisiner (lol).

Qu'il est bon d'avoir des amis !
Ândré.
 
A

Abel

Guest
Bonjour tous,

Ândré, est-ce pour ta feuille de mètrage ?

Si oui, on pourrait en profiter pour insérer une petite évennementielle pour ton Lien supprimé

Qu'en penses-tu ?

Toujours dans ce cadre (si c'est le cas), je suppose que les tableaux que tu répliques 100 à 300 fois sont alignés verticalement et pas forcément horizontalement (différences de longueurs) ?
Donc il faut que nous inserions des cellules et non des lignes ?

A+

Abel
 
P

Pascal76

Guest
Bonjour André et le forum,

Voilà un bout de code qui evite l'erreur si pas de constante
Pour le nombre de lignes à insérer il te suffit de sélectionner le nombre de cellules les unes en dessous des autres (par exemple pour insérer 3 lignes au dessus de ligne 11 il te suffit de selectionner les cellules A11, A12,A13 ou b11,B12 B13)

Sub essai()

Dim MaLigneH As Double
Dim MaLigneB As Double
Dim MaPlage As Range
Dim MesLignes As Double

Set MaPlage = Selection
MesLignes = MaPlage.Rows.Count


MaLigneH = MaPlage.Row
MaLigneB = MaLigneH + MesLignes - 1
Rows(MaLigneH & ":" & MaLigneB).Insert Shift:=xlDown
Range("A" & MaLigneH - 1 & ":G" & MaLigneH - 1).AutoFill Destination:=Range("A" & MaLigneH - 1 & ":G" & MaLigneB), Type:=xlFillDefault
On Error Resume Next
Rows(MaLigneH & ":" & MaLigneB).SpecialCells(xlCellTypeConstants, 23).ClearContents

End Sub

Bonne journée

Pascal
 
A

andré

Guest
Salut,

Je n'vais pas vu vos dernières réponses plutôt.
Excusez-moi et merci.

Je classe tout cela pour les resortir au moment de la mise au point définitive.

Je me permettrai de refaire appel à vous en cas de besoin, mais ne manquerai pas de vous faire part de mon résultat final, pour avis et amélioration éventuelle.

Merci encore.
Ândré.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…