Aide pour Code VBA sur une liste déroulante (Formulaire)

Bonjour , Je suis nouveau dans le forum et novice en VBA.

Permettez moi de vous exposer mon problème si quelqu'un a la gentillesse de m'aider pour trouver une solution.

J'ai crée une liste déroulante avec le formulaire active x et ça fait plus de 2 jours que j'essaie d'affecter un code à la liste pour qu'il filtre automatiquement le fichier.

Vous trouverez ci-joint le fichier ainsi que le code qui ne fonctionne pas , d'avance Merci.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim menu As String

If Not Intersect(Target, Range("E5")) Is Nothing Then

Application.ScreenUpdating = False

menu = Range("E5").Value

If menu <> "Position" Then

ActiveSheet.Range("$A$4:$C$4").AutoFilter Field:=1, Criteria1:=Position

Else

Sheets("MENU").Activate

ActiveSheet.ShowAllData

End If

End If

Application.ScreenUpdating = True

End Sub

14classeur2.xlsx (16.04 Ko)

Bonjour Spyweeper, bonjour le forum,

Pourquoi un contrôle ActiveX alors qu'une simple validation de données suffirait ? Du coup, l'événement Change ne fonctionne pas puisque rien ne change dans l'onglet mais c'est le contrôle qui change.

Deux solutions :

• Garder le contrôle avec le code :

Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
On Error Resume Next
If ComboBox1.Value <> "" Then
    Range("A4").AutoFilter Field:=1, Criteria1:=ComboBox1.Value
Else
    ActiveSheet.ShowAllData
End If
Application.ScreenUpdating = True
End Sub

• Utiliser une liste de validation de données en E2 avec le code :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address <> "$E$2" Then Exit Sub
If Target.Value <> "" Then
    Range("A4").AutoFilter Field:=1, Criteria1:=Target.Value
Else
    ActiveSheet.ShowAllData
End If
Application.ScreenUpdating = True
End Sub

En pièce pointe ton fichier modifié avec les deux options...

20spyweeper-v01.xlsm (23.53 Ko)

Merci énormément tu me sauves la vie

Une petite dernière demande je veux faire un bouton pour renvoyer la valeur choisi dans la liste à une autre feuille tu aurais une idée s'il te plait ?

Re,

Dans ton exemple la liste ne contient que des éléments uniques.

Pourrait-elle contenir des éléments répétés une ou plusieurs fois ?

Si tel était le cas, voudrais-tu renvoyer tous les éléments filtrés ou uniquement une ligne parmi la liste ?

En attendant ta réponse pour te proposer une solution adaptée...

En fait l'idée , si tu le permets bien sur , c'est une fois sélectionné un élément dans la liste , j'appuie sur un bouton pour qu'il me renvoie vers une liste dans la 2eme feuille.

C'est pour ça que j'ai crée une colonne "position code" ( Dans le tableau sujet de la liste déroulante ) qui sera également dans la 2eme feuille également pour faciliter l'opération.

Merci pour tout Chef !

Re,

Tu ne réponds pas vraiment à mes questions !...

Si tu veux juste copier une ligne de la liste pourquoi filtrer au préalable ?

J'ai renommé le second onglet de ton fichier exemple Liste, le code ci-dessous fait un copier/coller de la ligne au double-clic sur n'importe quelle cellule de cette ligne (colonnes 1 à 3).

Le code :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim PL As Range

Set PL = Range("A4").CurrentRegion
Set PL = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count)
If Application.Intersect(Target, PL) Is Nothing Then Exit Sub
Cancel = True
Cells(Target.Row, 1).Resize(1, 3).Copy Sheets("Liste").Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
End Sub

Le fichier :

14spyweeper-v02.xlsm (20.18 Ko)

Désolé de m'avoir mal expliqué ,

En fait l'idée que j'ai c'est de pouvoir accéder à des informations dans la deuxième feuille après avoir fait le choix dans la liste déroulante de la 1ere feuille , le point commun entre les deux feuilles sera l'onglet "Position code" tu trouveras ci joint le fichier pour mieux me comprendre.

Désolé pour avoir mal expliqué , d'avance merci

17spyweeper-v01.xlsm (24.89 Ko)
Rechercher des sujets similaires à "aide code vba liste deroulante formulaire"