Ajouter une ligne

Bonjour,

J'aimerais qu'une ligne s'ajoute en-dessous de celle Active lorsque l'utilisateur sélectionne "Oui" dans une liste déroulante.

Est-ce que quelqu'un pourrait corriger mon code s'il vous plait ?

Merci de votre collaboration !

PrivateSub Worksheet_Change(ByVal Target As Range)

ForEach c In Range("M21:M171").Cells
If(c.Value = "Oui")Then
ActiveSheet.Rows(Row + 1).EntireRow.Insert Shift:=xlDown
EndIf
Next

EndSub

Bonsoir CaT41 et

Voici le code corrigé

Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si modification dans la plage M21:M171
  If Not Intersect(Target, Range("E1:E10")) Is Nothing Then
    ' Si le choix est oui
    If Target.Value = "Oui" Then
      ' Désactiver les évènements
      Application.EnableEvents = False
      ' On insère une ligne en dessous
      ActiveSheet.Rows(Target.Row + 1).EntireRow.Insert Shift:=xlDown
      ' Réactiver les évènements
      Application.EnableEvents = True
    End If
  End If
End Sub

Edit : code corrigé

@+

Bonjour,

Merci de m'avoir aidé rapidement.

Merci, j'ai essayé le code que tu m'as donné. Il m'ajoute une ligne après la ligne 10.

Est-ce que c'est possible qu'il ajoute la ligne mais après celle où j'ai sélectionné "Oui".Dans le cas présent, après la ligne 1.

2

Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si modification dans la plage M21:M171
  If Not Intersect(Target, Range("E1:E10")) Is Nothing Then
    ' Si le choix est oui
    If Target.Value = "Oui" Then
      ' On insère une ligne en dessous
      ActiveSheet.Rows(Target.Row + 1).EntireRow.Insert Shift:=xlDown
    End If
  End If
End Sub

J'obtiens cet erreur:

image

Bonjour,

Oups, j'ai oublié une chose primordiale c'est de désactiver les événements

Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si modification dans la plage M21:M171
  If Not Intersect(Target, Range("E1:E10")) Is Nothing Then
    ' Si le choix est oui
    If Target.Value = "Oui" Then
      ' Désactiver les évènements
      Application.EnableEvents = False
      ' On insère une ligne en dessous
      ActiveSheet.Rows(Target.Row + 1).EntireRow.Insert Shift:=xlDown
      ' Réactiver les évènements
      Application.EnableEvents = True
    End If
  End If
End Sub

Ca devrait mieux aller

@+

Oui, merci, c'est mieux, il n'y a plus d'erreur

Mais est-ce que la ligne peut être ajoutée après celle ou j'ai sélectionné "Oui" donc après la ligne je me trouve actuellement ?

Pour l'instant, elle s'ajoute à la fin complétement de mon tableau.

Merci d'être si efficace, tu es un pro VBA !

Re,

Ce n'est pas normal, la ligne doit s'ajouter après la ligne ou on répond OUI

Target = cellule actuellement modifiée

Target.Row + 1 = Ligne de la cellule modifiée + 1

Testé de mon côté sans problème, avec une petite vidéo en prime

https://*drive*.google.com/file/d/16UeFfkIsCqmanj91CQRdIaaeYS-Xzn99/view?usp=sharing

Nota : enlever les *

@+

Super ça fonctionne !

Avec ce code :

En ajoutant une ligne en-dessous, est-ce qu'on peut faire copier aussi le contenu de la cellule D23 et E23 (1ière année et Oui)

capture d ecran 2020 09 16 085459

Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si modification dans la plage M21:M171
  If Not Intersect(Target, Range("M23:M173")) Is Nothing Then
    ' Si le choix est oui
    If Target.Value = "Oui" Then
      ' Désactiver les évènements
      Application.EnableEvents = False
      ' On insère une ligne en dessous
      ActiveSheet.Rows(Target.Row + 1).EntireRow.Insert Shift:=xlDown
      ' Réactiver les évènements
      Application.EnableEvents = True
    End If
  End If
End Sub

Un gros merci !

Bonjour,

Je ne sais pas si je dois créer une nouvelle demande si j'ai une autre question.

Ajouter une ligne c'est réglé.Par contre, je me demandais si on peut copier le contenu d'une cellule dans une cellule de la nouvelle ligne ajoutée ?

Le code utilisé:

Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si modification dans la plage M21:M171
  If Not Intersect(Target, Range("E1:E10")) Is Nothing Then
    ' Si le choix est oui
    If Target.Value = "Oui" Then
      ' Désactiver les évènements
      Application.EnableEvents = False
      ' On insère une ligne en dessous
      ActiveSheet.Rows(Target.Row + 1).EntireRow.Insert Shift:=xlDown
      ' Réactiver les évènements
      Application.EnableEvents = True
    End If
  End If
End Sub

Merci !

Rechercher des sujets similaires à "ajouter ligne"