Insertion automatique de ligne

Bonjour,

Ayant un dossier important à rendre, je me dirige naturellement vers ce forum pour trouver une aide à ma question.

Je dois faire un dossier excel, et j'aurais besoin d'une "fonctionnalité" qui permet, lorsque l'on insère un chiffre dans une cellule (par exemple 9), cela insère automatiquement 9 lignes, numérotées de 1 à 9 à partir d'une autre cellule.

J'ai cru comprendre en cherchant sur internet qu'il faut obligatoirement passer par du VBA, je tiens donc à souligner que mon niveau en VBA est nul, je n'en ai jamais fait.

Merci d'avance pour l'aide que vous pourriez m'apporter.

Salut Saylaab,

Un peu vague, comme infos...
- l'encodage de ce nombre peut-il se produire n'importe où ?
- "...à partir d'une autre cellule" : ça veut dire quoi, exactement ?
- il faut insérer des lignes complètes, une colonne unique de cellules ?

Bref, un fichier-exemple avec les variantes de ta demande serait le bienvenu !


A+

Salut Saylaab,

sans indications, j'ai fait joujou avec VBA...
- via un double-clic sur une cellule : insertion d'autant de lignes que renseigné dans cette cellule ;
- via un clic-droit sur une cellule : insertion d'autant de cellules en colonne que renseigné dans cette cellule

La deuxième option est embêtante en cela qu'on perd le menu contextuel du clic droit... mais c'est juste pour jouer..

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iRow%, iCol%, iIdx%, iColor%
'
Application.EnableEvents = False
'
If IsNumeric(Target) And (Target.Interior.Color = RGB(215, 215, 215) Or Target.Interior.Color = RGB(195, 195, 195)) Then
    iRow = Target.Row
    iCol = Target.Column
    iIdx = CInt(Target)
    iColor = IIf(Target.Interior.Color = RGB(215, 215, 215), 1, 2)
    Target = ""
    Target.Interior.Color = xlNone
    If iColor = 1 Then
        Rows(iRow & ":" & iRow + iIdx - 2).Insert shift:=xlDown
    Else
        Cells(iRow, iCol).Resize(iIdx - 1, 1).Insert shift:=xlDown
    End If
    Cells(iRow, iCol) = 1
    Cells(iRow, iCol).Resize(iIdx, 1).DataSeries rowcol:=xlColumns, Type:=xlChronological, step:=1, stop:=iIdx
End If
'
Application.EnableEvents = True
'
End Sub
6saylaab.xlsm (18.05 Ko)


A+

Bonsoir,

Tout d'abord, merci de votre réactivité et merci pour vos réponses.

En effet, je n'ai été clair et précis dans ma demande. Je vous joint alors un fichier excel à titre d'exemple.

La "valeur" de la cellule "nombre de mailles" indique 9, je voudrais qu'en dessous de la cellule "Epaisseur des mailles", qu'il y ait une insertion de 9 lignes, numérotées 1 à 9. Et si biensur, on indique une valeur de 4 pour "nombre de maille", qu'il y ait dans ce cas la une insertion de 4 lignes numérotées 1 à 4 en dessous de la cellule "Epaisseur des mailles"

Je ne sais pas du tout si c'est POSSIBLE de faire ça, mais en tout cas je vous remercie encore une fois du temps consacré.

Salut Saylaab,

aie confiance en VBA... bon, d'autres te diront de faire confiance à Power Query (intégré à Excel depuis... je ne sais plus...)

- la macro démarre lors d'un changement de valeur en [C4] ;
- les lignes éventuellement insérées précédemment s'effacent ;
- si la valeur en [C4] est bien numérique et supérieure à 0, les nouvelles lignes sont insérées ;
- tu peux donc corriger ou recommencer une nouvelle séquence de calcul à volonté.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iRow%
'
Application.EnableEvents = False
'
If Not Intersect(Target, Range("C4")) Is Nothing Then
    iRow = Columns(2).Find(what:="Diamètre", lookat:=xlPart, LookIn:=xlValues).Row
    If iRow > 6 Then Rows("6:" & iRow - 1).Delete shift:=xlUp
    If IsNumeric(Target) Then _
        If CInt(Target) > 0 Then _
            Rows("6:" & 5 + CInt(Target)).Insert shift:=xlDown: _
            Range("B6").Value = 1: _
            Range("B6").DataSeries rowcol:=xlColumns, Type:=xlChronological, step:=1, stop:=CInt(Target)
End If
'
Application.EnableEvents = True
'
End Sub
15saylaab.xlsm (20.76 Ko)


A+

Salut curulis57,

Merci énormément pour ton aide, c'est exactement ce que je voulais...

En effet, je devrai m'intéresser beaucoup plus au VBA, c'est très pratique d'avoir des connaissances sur ca.

Bonne soirée

Bonjour,

C'est encore moi , je voudrais savoir pourquoi j'arrive pas à copier coller ton code sur le classeur que je souhaite ?

S'agit-t-il du fait que ce soit une Private Sub ?

Salut Saylaab,

bonne question...


A+

En effet, avec la pièce jointe c'est mieux ...

J'ai voulu copié collé ton code que tu as partagé auparavant (en changeant bien sûr les cellules), maïs ça ne veut pas compilé...

Rappel : je voudrais que la valeur des nombres de mailles (C40) soit égal au nombre de lignes insérées, or comme je l'ai précisé avant je n'arrive pas du tout à utiliser le même code que toi

4parametre.xlsx (24.40 Ko)

Salut Saylaab,

le changement de valeur d'une cellule contenant une formule n'est pas interprété comme un événement 'Change'.
Il faut donc se rabattre sur la cellule adéquate à l'origine de ce changement, dans ce cas : [C39] = "Epaisseur totale du calorifuge" qui, elle, subit un changement de valeur manuelle.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iRow%
'
Application.EnableEvents = False
'
If Not Intersect(Target, Range("C39")) Is Nothing Then
    iRow = Columns(2).Find(what:="surface du calorifuge", lookat:=xlPart, LookIn:=xlValues).Row
    If iRow > 42 Then Rows("42:" & iRow - 1).Delete shift:=xlUp
    Rows("42:" & 41 + CInt([C40])).Insert shift:=xlDown
    Range("B42").Value = 1
    Range("B42").DataSeries rowcol:=xlColumns, Type:=xlChronological, step:=1, stop:=CInt([C40])
End If
'
Application.EnableEvents = True
'
End Sub

Tu verras, à droite de ton tableau, tes formules de [C40:C41], quelque peu simplifiées !

4saylaabv2.xlsm (31.58 Ko)


A+

Rechercher des sujets similaires à "insertion automatique ligne"