Ouverture automatique de liste déroulante

Banshor

XLDnaute Nouveau
Bonjour,

je cherche un moyen pour que lorsque je sélectionne la cellule dans laquelle se trouve une liste déroulante, celle ci s'ouvre directement afin que l'opérateur n'est qu'à utiliser le clavier pour naviguer dans Excel. Car pour l'instant il doit sélectionner à la souris 7 listes déroulantes. A coup de 2 clic par liste en sachant que cette tache est assez répétitive.. C'est pas génial ! J'ai récupéré un bout de code sur le net qui fonctionne bien pour le fichier donné mais que je n'arrive pas à adapter.

Voici le bout de code

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  'ouverture automatique des liste déroulantes
  On Error Resume Next
  If Not Intersect([A1:A100], Target) Is Nothing And Target.Count = 1 Then
    typ = Target.Validation.Type
    If typ = 3 Then SendKeys "%{down}": Target.Select
  End If
End Sub

Ainsi que le fichier pour lequel il est utilisé. Regarde la pièce jointe listesderoulantes (1).xls

Puis mon fichier perso Regarde la pièce jointe IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls

Merci de votre lecture ainsi que votre possible aide :)

[EDIT] : J'ai trouvé autre chose

Code:
If Target.Address = "$H$21" And Target.Count = 1 Then
     SendKeys "%{down}"

Ce code marche pour mes deux cellules "simple" mais pour aucune de mes cellules fusionnées

[EDIT2] : Maintenant que j'arrive à ouvrir les liste déroulante dans les cellules "simple" lorsque j'utilise le bouton "Réglages Machine" qui consiste à supprimer les valeurs dans toutes les cases afin de récupérer une page vierge, j'arrive à la sélection de la case B10 dans laquelle il fait l'action "Alt+Down" et affiche du coup comme une liste ou il n'y aurai que "N° OF". Juste pour un coté esthétique j'essaye de résoudre ça en plaçant à la fin de la macro des SendKeys "~" ou " " ou "Up" puis "Down" mais rien n'a faire cette liste s'affiche à la fin de toute la macro. (J'ai vérifier avec des timers pour savoir à quelle moment cela s'effectué). Si vous avez une idée .

[EDIT3] : J'ai trouvé une solution en modifiant mon code. Cela fonctionne pour toutes les cellules sauf (F16:G16) et (H16:I16)

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$F$10:$G$10" And Target.Count = 2 Then
     SendKeys "%{down}"
  End If
  If Target.Address = "$B$16:$E$16" And Target.Count = 4 Then
     SendKeys "%{down}"
  End If
  If Target.Address = "$F$16:$G$16" And Target.Count = 2 Then
     SendKeys "%{down}"
  End If
  If Target.Address = "$H$16:$I$16" And Target.Count = 2 Then
     SendKeys "%{down}"
  End If
  If Target.Address = "$B$21:$E$21" And Target.Count = 4 Then
     SendKeys "%{down}"
  End If
  If Target.Address = "$H$21" And Target.Count = 1 Then
     SendKeys "%{down}"
  End If
  If Target.Address = "$H$22" And Target.Count = 1 Then
     SendKeys "%{down}"
  End If
End Sub

Je n'arrive toujours pas à trouver une solution pour le bouton "Réglages Machine" et ne comprend pas pourquoi cela ne fonctionne pas pour ces deux cellules fusionnées.

[EDIT4] Les cellules ne fonctionnaient pas car elles fonctionnes en fonction de la liste précédente. Finalement il ne me reste que le soucis du bouton "Réglages Machine" ... Le titre n'a plus rien à voir ^^''
 

Pièces jointes

  • IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls
    128 KB · Affichages: 23
  • IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls
    128 KB · Affichages: 26
  • IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls
    128 KB · Affichages: 27
  • IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls
    122 KB · Affichages: 20
  • IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls
    122 KB · Affichages: 18
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ouverture automatique de liste déroulante

Bonjour Banshor,

Quand on joint un ou des fichiers, c'est bien. Quand ces fichiers et/ou leurs feuilles sont protégés par des mots de passe, c'est pas bien du tout.

Pouvez-vous remplacer vos fichiers protégés par des fichiers non protégés et aux feuilles non protégées. Ou bien nous donner les mots de passe ?

A très bientôt... (j'ai un essai à vous proposer mais pas pu tout vérifié à cause des protections)
 
Dernière édition:

Banshor

XLDnaute Nouveau
Re : Ouverture automatique de liste déroulante

Oups.. je suis désolé j'édit mon message avec le fichier non protégé et je l'envoi aussi dans celui ci. Merci de m'avoir prévenu

Regarde la pièce jointe IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls

(Désolé d'avoir trouver une solution.. Mais proposait moi la votre. Si elle peut être plus simple, esthétique ou plus facilement compréhensible. Je suis preneur.

Merci de votre réponse. (Le mot de passe est : oo) si besoin de déverrouiller la seconde page.
 

Pièces jointes

  • IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls
    122 KB · Affichages: 25
  • IE-QUA12-B-Fiche d'auto-contrôle Tramage et Microperforation.xls
    122 KB · Affichages: 25
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ouverture automatique de liste déroulante

merci Banshor :),

Voir un essai dans le fichier joint. (la feuille "ChoixOpérateur" a été re-protégée avec un mot de passe vide).

La différence principale avec votre code est que le code proposé s'adapte (normalement) à n'importe quelle cellule (fusionnée ou non) contenant une liste de validation sans la déclarer dans le code.

Dans la mesure du possible, évitez les cellules fusionnées qui restent une plaie en VBA (ainsi que pour les filtres automatiques et tris). Voyez du côté du menu Alignement/Horizontal/Centré sur plusieurs colonnes. Bien que pour le formulaire que vous utilisez (cellules fusionnées avec liste de validation), je ne pense pas que "Centré sur plusieurs colonnes" convienne.
 

Pièces jointes

  • Banshor-liste validation auto-ouvrante v1.xls
    119.5 KB · Affichages: 45
Dernière édition:

Banshor

XLDnaute Nouveau
Re : Ouverture automatique de liste déroulante

Merci bien, c'est vrai que ce code semble plus propre et plus recherché que le mien :). Je vais utiliser celui-ci finalement !

Auriez-vous une idée pour mon autre problème avec le bouton "Réglages Machine"?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ouverture automatique de liste déroulante

(re)

Dans votre code d'effacement, vous sélectionnez les cellules à effacer puis vous les effacez. A chaque sélection d'une cellule, vous déclenchez l'évènement Worksheet_SelectionChange, ce qui est inutile et ralentit l'exécution. Il est peu fréquent d'avoir à sélectionner une cellule pour travailler avec.

Ecrire :
VB:
    Range("F10").Select
    Selection.ClearContents
peut s'écrire :
VB:
Range("F10").ClearContents

Bien sûr avec des cellules fusionnées ou non, cela se complique: On utilise Range("F10").MergeArea.ClearContents

Selon ce que vous désirez, on peut modifier votre code en (il exécutera Worksheet_SelectionChange lors de la sélection de B10 à la fin du code):
VB:
Sub Reglages()
' Efface toutes les cases afin d'avoir
' une feuille blanche sans sauvegarder
With Sheets("ChoixOpérateur")
  .Range("B10").MergeArea.ClearContents
  .Range("F10").MergeArea.ClearContents
  .Range("H10").MergeArea.ClearContents
  .Range("B16").MergeArea.ClearContents
  .Range("F16").MergeArea.ClearContents
  .Range("H16").MergeArea.ClearContents
  .Range("B21").MergeArea.ClearContents
  .Range("H21").MergeArea.ClearContents
  .Range("H22").MergeArea.ClearContents
  .Range("G38").MergeArea.ClearContents
  .Range("E36").MergeArea.ClearContents
  .Range("E37").MergeArea.ClearContents
  .Range("E38").MergeArea.ClearContents
  .Range("B48").MergeArea.ClearContents
  'Activer B10
  .Range("B10").Activate
End With
End Sub


ou bien encore (il n'exécute jamais Worksheet_SelectionChange même lors de la sélection de B10) :
VB:
Sub Reglages()
' Efface toutes les cases afin d'avoir
' une feuille blanche sans sauvegarder
  ' désactiver la détection des évènements
  Application.EnableEvents = False
  With Sheets("ChoixOpérateur")
    .Range("B10").MergeArea.ClearContents
    .Range("F10").MergeArea.ClearContents
    .Range("H10").MergeArea.ClearContents
    .Range("B16").MergeArea.ClearContents
    .Range("F16").MergeArea.ClearContents
    .Range("H16").MergeArea.ClearContents
    .Range("B21").MergeArea.ClearContents
    .Range("H21").MergeArea.ClearContents
    .Range("H22").MergeArea.ClearContents
    .Range("G38").MergeArea.ClearContents
    .Range("E36").MergeArea.ClearContents
    .Range("E37").MergeArea.ClearContents
    .Range("E38").MergeArea.ClearContents
    .Range("B48").MergeArea.ClearContents
    'Activer B10
    .Range("b10").Activate
  End With
  ' réactiver la détection des évènements
  Application.EnableEvents = True
End Sub
 

Banshor

XLDnaute Nouveau
Re : Ouverture automatique de liste déroulante

je vous remercie beaucoup vous m'avez bien aidé. D'une car mon problème est résolu grâce à vous et enfin car vous m'apprenez certaines choses que je pourrais réutiliser plus tard. Bonne pédagogie ;) !

Bonne fin de journée !
 

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 885
Membres
103 018
dernier inscrit
mohcen23