Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Insérer une ligne (je relance)

2 réponses
Avatar
Comres.metz
Bonjour à toutes et à tous,

Je me permets de relancer le sujet, avec en copie la réponse de PMO.
En executant le code qu'il m'a envoyé, il n'y a rien qui se passe. Aucune
insertion de lignes qui se fait. J'ai passé une partie de ma soirée à voir
ou cela pouvait "merder" mais je n'ai pas tout compris :-)
Merci d'avance si vous pouviez me dépatouiller.

PB :
J'ai un classeur avec 2 onglets ayant chacun un tableau commençant en A4 et
finissant en P? (longueur variable en fonction des onglets).
2 lignes en dessous de la fin de ces tableaux, j'ai un petit tableau
récapitulatif sur 4 colonnes.

Je voudrais pouvoir insérer à partir de la derniere ligne de mon 1er tableau
un nombre de lignes que j'aurais défini dans une cellule sur mon onglet
"page de garde" et ces lignes que je voudrais insérer doivent reprendre les
formules du tableau au dessus.

Ex : sur l'onglet1, mon tableau va de A4 à P20.
Dans Page de Garde, en A5 je rentre 5
Et en cliquant sur mon bouton, mon tableau sur l'onglet A1 se vois rajouter
5 nouvelles lignes, copie de la ligne 20 (mais juste les formules).

Réponse de PMO (merci pour votre aide) :
1) La procédure suivante est à copier dans votre bouton
'**********
Private Sub CommandButton1_Click()
If Not IsNumeric([a5]) Then
MsgBox "La cellule A5 n'est pas un nombre"
Exit Sub
End If
Call PMO_AjoutLigne(CLng([a5]))
End Sub
'**********

2) Copiez la procédure suivante dans un module standard
et adaptez le nom "Feuil1" dans la ligne
Set S = Sheets("Feuil1")
avec le nom de la feuille où figure votre tableau.
'**********
Sub PMO_AjoutLigne(x As Long)
Dim S As Worksheet
Dim R As Range
Dim C As Range
Dim last&
if x>50 then exit sub 'limitation à 50
Set S = Sheets("Feuil1")
Set R = S.[a4].CurrentRegion
last& = R.Rows.Count + 3
For i& = 1 To x
S.Rows(last& + 1).Insert Shift:=xlDown
Next i&
S.Select
Set R = S.Range(Cells(last&, 1), _
Cells(last&, R.Columns.Count))
For Each C In R
If C.HasFormula Then
C.AutoFill _
Destination:=Range(C.Resize(x + 1, 1).Address)
End If
Next C
End Sub

2 réponses

Avatar
PMO
Bonjour,

J'ai répondu dans votre fil précédent.

Cordialement.
--
PMO
Patrick Morange



Bonjour à toutes et à tous,

Je me permets de relancer le sujet, avec en copie la réponse de PMO.
En executant le code qu'il m'a envoyé, il n'y a rien qui se passe. Aucune
insertion de lignes qui se fait. J'ai passé une partie de ma soirée à voir
ou cela pouvait "merder" mais je n'ai pas tout compris :-)
Merci d'avance si vous pouviez me dépatouiller.

PB :
J'ai un classeur avec 2 onglets ayant chacun un tableau commençant en A4 et
finissant en P? (longueur variable en fonction des onglets).
2 lignes en dessous de la fin de ces tableaux, j'ai un petit tableau
récapitulatif sur 4 colonnes.

Je voudrais pouvoir insérer à partir de la derniere ligne de mon 1er tableau
un nombre de lignes que j'aurais défini dans une cellule sur mon onglet
"page de garde" et ces lignes que je voudrais insérer doivent reprendre les
formules du tableau au dessus.

Ex : sur l'onglet1, mon tableau va de A4 à P20.
Dans Page de Garde, en A5 je rentre 5
Et en cliquant sur mon bouton, mon tableau sur l'onglet A1 se vois rajouter
5 nouvelles lignes, copie de la ligne 20 (mais juste les formules).

Réponse de PMO (merci pour votre aide) :
1) La procédure suivante est à copier dans votre bouton
'**********
Private Sub CommandButton1_Click()
If Not IsNumeric([a5]) Then
MsgBox "La cellule A5 n'est pas un nombre"
Exit Sub
End If
Call PMO_AjoutLigne(CLng([a5]))
End Sub
'**********

2) Copiez la procédure suivante dans un module standard
et adaptez le nom "Feuil1" dans la ligne
Set S = Sheets("Feuil1")
avec le nom de la feuille où figure votre tableau.
'**********
Sub PMO_AjoutLigne(x As Long)
Dim S As Worksheet
Dim R As Range
Dim C As Range
Dim last&
if x>50 then exit sub 'limitation à 50
Set S = Sheets("Feuil1")
Set R = S.[a4].CurrentRegion
last& = R.Rows.Count + 3
For i& = 1 To x
S.Rows(last& + 1).Insert Shift:=xlDown
Next i&
S.Select
Set R = S.Range(Cells(last&, 1), _
Cells(last&, R.Columns.Count))
For Each C In R
If C.HasFormula Then
C.AutoFill _
Destination:=Range(C.Resize(x + 1, 1).Address)
End If
Next C
End Sub





Avatar
Comres.metz
Merci, je redescends vers le bon Topic.
"PMO" <patrickPOINTmorangeAROBASElapostePOINTnet> a écrit dans le message de
news:
Bonjour,

J'ai répondu dans votre fil précédent.

Cordialement.
--
PMO
Patrick Morange



Bonjour à toutes et à tous,

Je me permets de relancer le sujet, avec en copie la réponse de PMO.
En executant le code qu'il m'a envoyé, il n'y a rien qui se passe.
Aucune


insertion de lignes qui se fait. J'ai passé une partie de ma soirée à
voir


ou cela pouvait "merder" mais je n'ai pas tout compris :-)
Merci d'avance si vous pouviez me dépatouiller.

PB :
J'ai un classeur avec 2 onglets ayant chacun un tableau commençant en A4
et


finissant en P? (longueur variable en fonction des onglets).
2 lignes en dessous de la fin de ces tableaux, j'ai un petit tableau
récapitulatif sur 4 colonnes.

Je voudrais pouvoir insérer à partir de la derniere ligne de mon 1er
tableau


un nombre de lignes que j'aurais défini dans une cellule sur mon onglet
"page de garde" et ces lignes que je voudrais insérer doivent reprendre
les


formules du tableau au dessus.

Ex : sur l'onglet1, mon tableau va de A4 à P20.
Dans Page de Garde, en A5 je rentre 5
Et en cliquant sur mon bouton, mon tableau sur l'onglet A1 se vois
rajouter


5 nouvelles lignes, copie de la ligne 20 (mais juste les formules).

Réponse de PMO (merci pour votre aide) :
1) La procédure suivante est à copier dans votre bouton
'**********
Private Sub CommandButton1_Click()
If Not IsNumeric([a5]) Then
MsgBox "La cellule A5 n'est pas un nombre"
Exit Sub
End If
Call PMO_AjoutLigne(CLng([a5]))
End Sub
'**********

2) Copiez la procédure suivante dans un module standard
et adaptez le nom "Feuil1" dans la ligne
Set S = Sheets("Feuil1")
avec le nom de la feuille où figure votre tableau.
'**********
Sub PMO_AjoutLigne(x As Long)
Dim S As Worksheet
Dim R As Range
Dim C As Range
Dim last&
if x>50 then exit sub 'limitation à 50
Set S = Sheets("Feuil1")
Set R = S.[a4].CurrentRegion
last& = R.Rows.Count + 3
For i& = 1 To x
S.Rows(last& + 1).Insert Shift:=xlDown
Next i&
S.Select
Set R = S.Range(Cells(last&, 1), _
Cells(last&, R.Columns.Count))
For Each C In R
If C.HasFormula Then
C.AutoFill _
Destination:=Range(C.Resize(x + 1, 1).Address)
End If
Next C
End Sub