Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Menu deroul et evénement

  • Initiateur de la discussion Initiateur de la discussion Chombi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Chombi

XLDnaute Occasionnel
Bonjour à tous

je cherche, je cherche mais je ne trouve pas
Dans un menu déroulant je voudrai: si "Nouveau" est sélectionné insérer une ligne sous la ligne de la cellule sélectionner
et copier cette dernière ligne sur la nouvelle ligne créer. Une fois quitté je voudrai que le menu déroulant garde la valeur précédente (ne prenne pas en compte "Nouveau") , que le nouveau menu déroulant créer dans la nouvelle ligne soit vide et que la cellule sélectionnée soit cette dernière.

j’espère mettre bien expliqué, ci joint un petit fichier

Merci
 

Pièces jointes

Re : Menu deroul et evénement

Qui cherche trouve

bon à priori c'est pas si simple
j'ai donc abordé la chose différemment j'ai enlevé "Nouveau" de mon menu déroulant. Quand je sélectionne la cellule en question je fais apparaitre un bouton qui me donne la possibilité d’insérer une ligne, c'est un peu moins fun mais le résultat est là
Merci à ceux qui on réfléchi
si une idée jailli de ci de là je suis preneur
à bientôt

ci joint mon fichier pour ceux que ça intéresse
 

Pièces jointes

Re : Menu deroul et evénement

Bonjour Chombi,

bon à priori c'est pas si simple

Mais si :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target(1) = "Nouveau" Then
  Application.Undo
  Target(2, 1).EntireRow.Insert
  Target(1).EntireRow.Copy Target(2, 1).EntireRow
  Target(2, 1) = "": Target(2, 1).Select
End If
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : Menu deroul et evénement

Bonjour,

Une piste en utilisant les événements de feuille.
Copiez le code suivant dans la fenêtre de code de la feuille concernée
Code:
Dim MemoValue$    'Variable mémorisant l'ancienne valeur du DropDown (portée niveau Module)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Range
Dim Rligne As Range
'---
'--- Seule est prise en compte la 1ère cellule de Target ---
Set R = Target.Cells(1, 1)
'--- Teste si on est en présence d'une Liste de Validation ---
If HasListValidation(R) Then
  
  If Target = "Nouveau" Then
    Application.EnableEvents = False
    Set Rligne = Rows("" & R.Row & ":" & R.Row & "")
    Rligne.Copy
    Rligne.Insert Shift:=xlDown
    R = ""
    R.Offset(-1, 0) = MemoValue$
    R.Select
    Application.CutCopyMode = False
    Application.EnableEvents = True
  End If
  
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim R As Range
'---
Set R = Target.Cells(1, 1)
If HasListValidation(R) Then
  MemoValue$ = R
Else
  MemoValue$ = ""
End If
End Sub

'//////////////////////////////////////////////////////////////////////////
'/// Fonction qui teste si on est en présence d'une Liste de Validation ///
'//////////////////////////////////////////////////////////////////////////
Private Function HasListValidation(R As Range) As Boolean
Dim V As Validation
Dim rep&
'---
Set V = ActiveCell.Validation
On Error Resume Next
rep& = V.Type
If Err <> 0 Then Exit Function
If rep& = xlValidateList Then HasListValidation = True
End Function
 

Pièces jointes

Re : Menu deroul et evénement

Merci PM02

un peu plus compliqué mais le résultat est là

Merci job75

Application.Undo : annule la dernière opération : Nickel

J'ai juste ajouté en début:

If Target.Column = 10 And Target.Count = 1 Then
.......
End if

pour éviter l'insertion d'une ligne si on écrit "Nouveau" dans une autre colonne que la 10

A bientôt
 
Re : Menu deroul et evénement

Re,

Le test Target.Count = 1 est inutile si comme moi vous utilisez Target(1) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 10 Or Target(1) <> "Nouveau" Then Exit Sub
Application.Undo
Target(2, 1).EntireRow.Insert
Target(1).EntireRow.Copy Target(2, 1).EntireRow
Target(2, 1) = "": Target(2, 1).Select
End Sub
A+
 
Re : Menu deroul et evénement

Bonjour Job75

Encore merci pour le temps passé
je me permet encore une question

Le test Target.Count = 1 est inutile si comme moi vous utilisez Target(1) :

Target(1) qu'elle est son rôle

j'ai ajouté "Supprimer" au menu déroulant pour supprimer la ligne si "Supprimer" est sélectionné
avec le code suivant:

If Target(1) = "Supprimer" Then
Application.Undo
Target(1, 1).EntireRow.Delete
End If

il a fallut que je retire "If Target.Column <> 10 Or Target(1) <> "Nouveau" Or Target(1) <> "Supprimer" Then Exit Sub"
pour que ça fonctionne, je suis reparti avec Target.Count

Code:
If Target.Column = 10 And Target.Count = 1 Then
If Target(1) = "Nouveau" Then
  Application.Undo
  Target(2, 1).EntireRow.Insert
  Target(1).EntireRow.Copy Target(2, 1).EntireRow
  Target(2, 1) = "": Target(2, 1).Select
End If
If Target(1) = "Supprimer" Then
  Application.Undo
  Target(1, 1).EntireRow.Delete
End If

End If

A bientôt
 
Re : Menu deroul et evénement

Bonjour Chombi,

Target(1) qu'elle est son rôle

Réfléchissez : Target peut-être constitué de plusieurs cellules, si par exemple on efface une plage.

Dans ce cas un test comme Target = "Nouveau" créera un bug.

Target(1) est la 1ère cellule en haut à gauche de Target.

Maintenant pour votre nouveau code :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 10 Then Exit Sub
If Target(1) = "Nouveau" Then
  Application.Undo
  Target(2, 1).EntireRow.Insert
  Target(1).EntireRow.Copy Target(2, 1).EntireRow
  Target(2, 1) = "": Target(2, 1).Select
ElseIf Target(1) = "Supprimer" Then
  Target(1).EntireRow.Delete
End If
End Sub
Fichier (2).

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Réponses
1
Affichages
697
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…