Insertion automatique de lignes en fonction d'une valeur de cellule

Bonjour,

Je souhaite insérer des lignes de façon automatique en fonction de la valeur d'une cellule prédéfinie. En outre, je souhaiterai que le contenu d'une cellule de ces lignes insérées soit défini par avance. Exemple dans le fichier joint, si j'inscris la valeur "oui" en B3 et le résultat est la création de 4 lignes dont le contenu de la cellule A4, A5, A6 et A7 est respectivement "Enfant 1", "Enfant 2", "Enfant 3", "Enfant 4".

Je vous remercie de votre aide.

A bientôt

19exemple.xlsx (8.02 Ko)

Bonjour ThomasHL et bienvenue,

Une proposition avec une procédure évènementielle.

Cordialement.

34exemple.xlsm (14.26 Ko)

Bonjour Gyrus,

Merci pour ce retour qui répond à mon besoin. Néanmoins, existe il une solution pour obtenir la réversibilité de l'action d'insertion. EN bref, si j'indique "oui" les lignes s'insèrent, si j'indique "non", elles disparaissent ?

Merci à vous et bonne journée.

Bonjour,

Dans cette solution .. il ne s'agit pas d'insertion ...

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address <> "$B$3" Then Exit Sub
        Application.EnableEvents = False
        If UCase(Target.Value) = "OUI" Then
            Target.Offset(1, -1) = "Enfant 1"
            Target.Offset(2, -1) = "Enfant 2"
            Target.Offset(3, -1) = "Enfant 3"
            Target.Offset(4, -1) = "Enfant 4"
        Else
            Range(Target.Offset(1, -1), Target.Offset(4, -1)).ClearContents
        End If
        Application.EnableEvents = True
End Sub

En espèrant que cela t'aide

Bonjour à tous,

Essaye comme cela

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
    If Target.Count > 1 Then Exit Sub
    If Not Application.Intersect(Target, Range("B1:B1000")) Is Nothing Then
        Application.EnableEvents = False
        If UCase(Target.Value) = "OUI" And Target.Offset(0, -1) = "Mariés" Then
            Target.Offset(1).Resize(4).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Target.Offset(1, -1) = "Enfant 1"
            Target.Offset(2, -1) = "Enfant 2"
            Target.Offset(3, -1) = "Enfant 3"
            Target.Offset(4, -1) = "Enfant 4"
        ElseIf (UCase(Target.Value) = "NON" Or Target.Value = "") And Target.Offset(0, -1) = "Mariés" Then
            For i = 4 To 1 Step -1
                If Left(Target.Offset(i, -1), 6) = "Enfant" Then Target.Offset(i, -1).EntireRow.Delete
            Next i
        End If
        Application.EnableEvents = True
    End If
End Sub

Cordialement.

Bonjour,

@ James007,

Ta proposition revisitée !...

Bon je vais prendre un café.

Bonne journée.

Cdlt.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim tbl As Variant
    If Target.Address = "$B$3" And Target.CountLarge = 1 Then
        If LCase$(Target.Value) = "oui" Then
            tbl = Application.Transpose(Array("Enfant 1", "Enfant 2", "Enfant 3", "Enfant 4"))
            Me.Cells(4, 1).Resize(4).Value = tbl
        Else
            Me.Cells(4, 1).Resize(4).Value = vbNullString
        End If
    End If
End Sub

Merci à Gyrus, James007 et Jean-Eric, je teste tout cela au plus vite et vous fais mon feedback

Merci encore de votre aide.

Bonjour,

@ James007,

Ta proposition revisitée !...

Bon je vais prendre un café.

Bonne journée.

Cdlt.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim tbl As Variant
    If Target.Address = "$B$3" And Target.CountLarge = 1 Then
        If LCase$(Target.Value) = "oui" Then
            tbl = Application.Transpose(Array("Enfant 1", "Enfant 2", "Enfant 3", "Enfant 4"))
            Me.Cells(4, 1).Resize(4).Value = tbl
        Else
            Me.Cells(4, 1).Resize(4).Value = vbNullString
        End If
    End If
End Sub

Bonjour Jean Eric,

Je vous remercie pour cette macro qui répond à mon besoin.

En complément, si je souhaite que les lignes et cellules créés, ici Enfant 1, Enfant 2, etc... soient des listes déroulantes, que faudrait il faire ?

Pourrait-on imaginer qu'en cellule A3, on définisse une question et qu'en B3 la réponse soit un nombre (dans une liste déroulante de 1 à 10. En fonction du chiffre choisit, autant de lignes se créent à partir de A4 comportant chacune une liste déroulante dont le contenu serait prédéfini.

Merci pour votre aide précieuse qui me permet d'avancer dans mon projet de tableur automatisé.

Bien à vous.

Bonjour,

Dans cette solution .. il ne s'agit pas d'insertion ...

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address <> "$B$3" Then Exit Sub
        Application.EnableEvents = False
        If UCase(Target.Value) = "OUI" Then
            Target.Offset(1, -1) = "Enfant 1"
            Target.Offset(2, -1) = "Enfant 2"
            Target.Offset(3, -1) = "Enfant 3"
            Target.Offset(4, -1) = "Enfant 4"
        Else
            Range(Target.Offset(1, -1), Target.Offset(4, -1)).ClearContents
        End If
        Application.EnableEvents = True
End Sub

En espèrant que cela t'aide

Merci James007, cela répond à mes attentes. J'ai posté un autre problème dans mes remerciements à Jean Eric, si vous avez un moment pour y répondre . Merci à vous.

Bonjour,

Pourrait-on imaginer qu'en cellule A3, on définisse une question et qu'en B3 la réponse soit un nombre (dans une liste déroulante de 1 à 10. En fonction du chiffre choisit, autant de lignes se créent à partir de A4 comportant chacune une liste déroulante dont le contenu serait prédéfini.

On peut tout imaginer ...!!!

Et avec Excel ... on peut tout réaliser ...

Encore faudrait-il que tu connaisses tes propres besoins ...

Dans le cas précis ... il suffit de tout recommencer à zèro ...

Bonjour,

Pourrait-on imaginer qu'en cellule A3, on définisse une question et qu'en B3 la réponse soit un nombre (dans une liste déroulante de 1 à 10. En fonction du chiffre choisit, autant de lignes se créent à partir de A4 comportant chacune une liste déroulante dont le contenu serait prédéfini.

On peut tout imaginer ...!!!

Et avec Excel ... on peut tout réaliser ...

Encore faudrait-il que tu connaisses tes propres besoins ...

Dans le cas précis ... il suffit de tout recommencer à zèro ...

Bonjour,

Je souhaiterai qu'à la réponse "Oui" en B2, la ligne 3 s'incrémente et propose une liste déroulante des actions de maintenance connues dans la base de données (onglet BD). A chaque saisie d'une nouvelle action, une ligne s"incrément en dessous et propose une nouvelle liste déroulante construite à partie de la même base de données. Ainsi de suite...

Merci de votre aide.

3classeur1.xlsx (9.06 Ko)

Bonjour,

Sans doute ... au risque de me répéter ...

Il suffit ... dans le cas précis ... de tout recommencer à zèro ...

Bonjour,

J'avais bien compris, donc pouvez vous m'aider ?

Merci.

Bonjour,

Un exemple basé sur le post précédent avec le nombre d'enfants !...

A adapter.

Cdlt.

7exemple.xlsm (16.68 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, lRow As Long, i As Long
    If Target.Address = "$B$3" And Target.CountLarge = 1 Then
        With Me
            lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            If lastRow > 3 Then .Cells(4, 1).Resize(lastRow - 3, 2).ClearContents
            lRow = 4
            If Not IsEmpty(Target) Then
                For i = 1 To Target.Value
                    .Cells(lRow, 1) = "Enfant " & i
                    lRow = lRow + 1
                Next i
            End If
        End With
    End If
End Sub

Bonjour,

Un exemple basé sur le post précédent avec le nombre d'enfants !...

A adapter.

Cdlt.

Bonjour,

Je vous remercie.

Bonjour,

Un exemple basé sur le post précédent avec le nombre d'enfants !...

A adapter.

Cdlt.

exemple.xlsm

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, lRow As Long, i As Long
    If Target.Address = "$B$3" And Target.CountLarge = 1 Then
        With Me
            lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            If lastRow > 3 Then .Cells(4, 1).Resize(lastRow - 3, 2).ClearContents
            lRow = 4
            If Not IsEmpty(Target) Then
                For i = 1 To Target.Value
                    .Cells(lRow, 1) = "Enfant " & i
                    lRow = lRow + 1
                Next i
            End If
        End With
    End If
End Sub

Bonjour, c'est extactement ce que je recherche.

Pourrait on imaginer la création d'une liste déroulante, dont le contenu serait défini par ailleurs (exemple age), en face (en B4, B5, etc...) de chaque cellule "Enfant" nouvellement incrémenté ?

Je vous remercie pour votre aide.

Bonjour, c'est extactement ce que je recherche.

Pourrait on imaginer la création d'une liste déroulante, dont le contenu serait défini par ailleurs (exemple age), en face (en B4, B5, etc...) de chaque cellule "Enfant" nouvellement incrémenté ?

Je vous remercie pour votre aide.

Bonjour,

Plus de doute possible ... après 17 messages ...

On peut tout imaginer ...!!!

Et avec Excel ... on peut tout réaliser ...

Encore faudrait-il que tu connaisses tes propres besoins ...

Bonjour,

Un exemple basé sur le post précédent avec le nombre d'enfants !...

A adapter.

Cdlt.

exemple.xlsm

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, lRow As Long, i As Long
    If Target.Address = "$B$3" And Target.CountLarge = 1 Then
        With Me
            lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            If lastRow > 3 Then .Cells(4, 1).Resize(lastRow - 3, 2).ClearContents
            lRow = 4
            If Not IsEmpty(Target) Then
                For i = 1 To Target.Value
                    .Cells(lRow, 1) = "Enfant " & i
                    lRow = lRow + 1
                Next i
            End If
        End With
    End If
End Sub

Bonjour Jean Eric,

Si je souhaite que le choic du nombre d'enfants se fasse en B70 et que la liste des Enfants apparaissent en A71, quels sont les paramètres à modifier ?

Je vous remercie pour votre aide.

Bonjour,

Ton fichier en retour.

Cdlt.

8exemple.xlsm (17.08 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, lRow As Long, i As Long
Const RW As Long = 70
    If Target.Address = "$B$70" And Target.CountLarge = 1 Then
        With Me
            lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            If lastRow > RW Then .Cells(RW, 1).CurrentRegion.Offset(1).ClearContents
            lRow = RW + 1
            If Not IsEmpty(Target) Then
                For i = 1 To Target.Value
                    .Cells(lRow, 1) = "Enfant " & i
                    lRow = lRow + 1
                Next i
            End If
        End With
    End If
End Sub

Bonjour,

Ton fichier en retour.

Cdlt.

exemple.xlsm

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, lRow As Long, i As Long
Const RW As Long = 70
    If Target.Address = "$B$70" And Target.CountLarge = 1 Then
        With Me
            lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            If lastRow > RW Then .Cells(RW, 1).CurrentRegion.Offset(1).ClearContents
            lRow = RW + 1
            If Not IsEmpty(Target) Then
                For i = 1 To Target.Value
                    .Cells(lRow, 1) = "Enfant " & i
                    lRow = lRow + 1
                Next i
            End If
        End With
    End If
End Sub

Bonjour,

Merci pour la réponse.

Savez vous comment introduire des listes déroulantes en B71, B72, etc... en face des cellules A71, A72, etc... générées ?

Un grand merci encore.

Rechercher des sujets similaires à "insertion automatique lignes fonction valeur"