Ajouter une ligne

Fermé
Catherine - Modifié le 16 sept. 2020 à 00:58
ccm81 Messages postés 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 - 16 sept. 2020 à 18:37
Bonjour,

J'aimerais qu'une ligne s'ajoute en-dessous de celle Active lorsque l'utilisateur sélectionne "Oui" dans une liste déroulante. La colonne M est celle avec la liste déroulante oui/non pour chacune des lignes 21 à 171.

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

2 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
16 sept. 2020 à 10:13
Bonjour,

Déjà, tu sembles avoir une erreur ici
ActiveSheet.Rows(Row + 1)

A corriger par
ActiveSheet.Rows(c.Row + 1)


Ensuite, vu que tu ajoutes des lignes, je pense qu'il serait préférable de faire une boucle en partant du bas.
Pour ça, il faut utiliser un for et step -1
un truc du genre
for i = 171 to 21 step -1
   c = celles(i,13)
   If(c.Value = "Oui")Then
           ActiveSheet.Rows(l+1).EntireRow.Insert Shift:=xlDown
    end if
next

0
ccm81 Messages postés 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
Modifié le 16 sept. 2020 à 18:37
Bonjour à tous les deux

une ligne s'ajoute en-dessous de celle Active lorsque l'utilisateur sélectionne "Oui"
Une autre solution
Option Explicit

Const plage = "M21:M171"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim li As Long
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range(plage)) Is Nothing Then
  If UCase(Target.Value) = "OUI" Then
    li = Target.Row
    Rows(li + 1).Insert
  End If
End If
End Sub

https://www.cjoint.com/c/JIqqJ4AjUWB

Cdlmnt
0