Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 12/07/2008
De RENNES
Messages:
30
Système d'exploitation: PC Version Excel utilisée: 2003 FR |
Posté le : 05-06-2012 16h38
Bonjour à tous,
Dans un fichier, j'utilise déjà une macro évènementielle du style worksheet_change sur une colonne mais je suis bloqué car j'aimerais bien en utilisé une autre sur une autre colonne. Donc j'avais pensé à worksheet_BeforeRightClick mais la colonne contient une liste de validation et ma question est : peut-on déclencher cette liste par évènement du clic droit ? Merci d'avance et bonne fin de journée. |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 23/05/2008
De La Varenne Saint-Hilaire
Messages:
356
Système d'exploitation: PC Version Excel utilisée: 2010 |
Posté le : 05-06-2012 18h01
Bonsoir criscris11,
Si j'ai bien compris, tu dois pouvoir gérer l'ensemble dans ta macro évènementielle sans avoir besoin du clic droit, en détectant l'adresse de la cellule qui est modifiée. Par exemple: Private Sub Worksheet_Change(ByVal Target As Range) Vois si cette piste peut t'aider, Bonne soirée, mth |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 09/05/2007
De Courcelles-les-Montbéliard
Messages:
286
Système d'exploitation: PC & Mac Version Excel utilisée: Mac 2004 - 2011, et PC 2003 - 2010 |
Posté le : 05-06-2012 18h13
Bonjour Mireille, criscris11, Didier, le Forum
Je complète la réponse de Mireille, et je suis du même avis, tu peux en contrôlant l'adresse de la cellule sélectionnée, activer différent bloc d'instructions, tout en gardant le même événement. J'ai rajouté l'ouverture automatique de la liste de validation quand on sélectionne une cellule en disposant. Private Sub Worksheet_SelectionChange(ByVal Target As Range) Si Didier passe par là, j'espère qu'il corrigera mes erreurs. Si l'utilisateur clic sur une cellule avec le clic droit, l'événement Worksheet_BeforeRightClick est retourné. C'est donc possible. Mais attention normalement, le clic droit sert en principe à l'affichage d'un menu contextuel, donc tu vas devoir gérer les concéquences du détournement de l'action de l'utilisateur... @+Jean-Marie |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 12/07/2008
De RENNES
Messages:
30
Système d'exploitation: PC Version Excel utilisée: 2003 FR |
Posté le : 05-06-2012 20h37
Bonsoir Mireille, Jean-Marie, Didier, le forum,
Merci à Mireille et à Jean-marie pour leurs pistes qui se recoupent et qui m'arrangeraient bien c'est sûr car jusqu'à présent je n'avais trouvé que la solution du clic droit pour me sortir de mon bourbier. Je vais essayer de m'en sortir avec ces codes en attendant la confirmation ou la correction de la part de Didier s'il le juge nécessaire bien évidemment. En attendant un grand merci et bonne soirée. PS : Si je m'en sors pas avant demain soir, je posterais les deux codes actuels qu'il faudra essayer de fusionner. |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 05-06-2012 22h00
Bonsoir criscris11, Mth, JeanMarie, le Forum,
A vrai dire, moi, je n'ai pas compris l'exacte objectif de ta question criscris11 Cela dit, puisque tu m'y invites JeanMarie , je viens de jeter un oeil sur ton code (et plus qu'un oeil puisque j'ai testé ) et j'en fais une analyse critique que je souhaite bien évidemment positive. Tout d'abord, une remarque : j'ai testé sur XL2010, puis sur XL2003. Et si j'ai testé sur les deux ce n'est bien évidemment pas par hasard car j'avais un doute... Il me semblait avoir déjà rencontré des choses bizarres avec les sendkeys notamment... L'instinct m'a donné raison, car ça ne fonctionne pas sous mon XL2003 ! Un quart d'heure de prise de cerveau plus tard, je me rends compte qu'il suffit simplement de supprimer le "Application." dans : Application.SendKeys "%{DOWN}" Bien sûr JeanMarie, tu vas me dire : "Quoi ? C'est quoi ce binz ?"... et tu auras raison Visiblement, la méthode SendKeys (liée à l'objet Application) est fautive. Et si tu enlèves donc "Application.", alors le système n'utilise plus la méthode SendKeys issue de la bibliothèque Excel / Classe Application, mais l'instruction SendKeys issue directement de la bibliothèque VBA (qui elle, solutionne le problème)! Alors bien sûr, mon explication est lourding à souhait... mais voir l'Explorateur d'objets (touche F2 depuis l'éditeur VBE) et faire une recherche sur le mot clé "SendKeys" pour constater la même chose que moi et se rendre compte de ce que j'écris. Evidemment, il est inutile de me demander pourquoi il existe 2 SendKeys (comme il existe aussi 2 InputBox avec chacune leur spécificité) et quelle est la philosophie adoptée par Microsoft sur ce point... Je n'en sais strictement rien, mais c'est comme ça ! Et là, JeanMarie, tu vas me dire : "Quoi ? Ils sont fous chez Microsoft !"... et tu auras encore raison Concernant la procédure proprement dite, je ne vais parler que d'optimisation puisque ta procédure fonctionne très bien JeanMarie . J'en profite d'ailleurs au passage pour féliciter encore les gens comme toi et Mth qui ont une grande expertise des Formules, TCD et autres bonnes choses, tout en manipulant VBA de façon fort honorable ! Bravo, je le dis et je le répète, mon champ d'investigation à moi est bien plus restreint. J'aborde donc les détails de ta procédure JeanMarie : Tout d'abord, l'évènement "Worksheet_SelectionChange()" est un évènement très sensible car il se déclenche à chaque changement de sélection par l'utilisateur (par le code aussi !). Il convient donc de rester très vigilant et très light sur ce type de procédure évènementielle... Dans cette partie : TestListe = Target.Validation.Type Pour ma part, j'aurai fait directement : If Target.Validation.Type = 3 Then Ensuite, comme tu fais usage d'un "On Error Resume Next", alors je pense que le test : If Target.Cells.Count = 1 Then J'ai dans l'idée qu'il faut toujours éviter les tests "IF" quand c'est possible afin d'économiser un maximum de temps machine. L'utilisation du "Select Case" est par contre une très bonne idée, car réputée comme étant peu gourmande et bien plus performante que des "IF" successifs. Et dernière chose, je m'aperçois que si je réduis ton code uniquement à ça : Private Sub Worksheet_SelectionChange(ByVal Target As Range) Il reste juste un petit effet peu esthétique lorsque tu cliques sur une cellule de la colonne F qui n'aurait pas de liste de validation : un semblant de liste se déroule quand même... Mais nous ne subissons aucun plantage, ni aucun effet pervers ! Voilà, ce que j'ai pu décortiquer de cet extrait de code. Mais, je le répète à nouveau : tout ça n'est que chipotage et ta procédure était tout à fait fonctionnelle JeanMarie ! Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 12/07/2008
De RENNES
Messages:
30
Système d'exploitation: PC Version Excel utilisée: 2003 FR |
Posté le : 05-06-2012 22h50
Re à tous,
Voici mes deux codes : Private Sub Worksheet_Change(ByVal Target As Range) Private Sub Worksheet_Change(ByVal Target As Range) Donc si j'ai bien compris : Private Sub Worksheet_Change(ByVal Target As Range) Merci encore pour vos réponses et bonne soirée à tous. |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 09/05/2007
De Courcelles-les-Montbéliard
Messages:
286
Système d'exploitation: PC & Mac Version Excel utilisée: Mac 2004 - 2011, et PC 2003 - 2010 |
Posté le : 05-06-2012 22h55
Bonsoir
Merci Didier, pour ton examen de mon code, il est toujours bon de connaître ton avis. Concernant le code pur, je l'ai codé sous office 2003 sp3, et je n'ai pas remarqué le problème du sendkeys, il fonctionne de mon côté aussi bien avec Application que sans. J'ai rajouté le test If Target.Validation.Type = 3 Then Mais ce test provoque un plantage de l'exécution du code quand la cellule ne contient pas de liste de validation, j'ai donc rajouté la ligne On Error Resume Next Jean-Marie |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 05-06-2012 23h48
Re JeanMarie,
Tu as tout à fait raison JeanMarie !!! Je n'ai visiblement pas assez réfléchi à ce cas de figure . Comme quoi, les choses ne sont jamais acquises. Il y a d'autres façons de faire, mais après tests et réflexion, ta façon de faire me semble au final le meilleur compromis ! Trop fort JeanMarie Tu peux toutefois te passer du test "If Target.Cells.Count = 1 Then" je pense (je n'ose plus dire que je suis sûr lol )
Concernant le problème que je rencontre avec XL2003 (SP3 pour moi également), je n'ai pas idée de ce qui arrive chez moi... (peut-être une incompatibilité dû à une macro complémentaire, je ne vois que ça...)
@+
Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Activer une liste de validation sur un clic droit | ||
---|---|---|
Inscription: 12/07/2008
De RENNES
Messages:
30
Système d'exploitation: PC Version Excel utilisée: 2003 FR |
Posté le : 06-06-2012 20h25
Bonsoir Mireille, Jean-Marie, Didier, le forum,
Grâce à vous trois, non seulement vous avez résolu mon problème (oui, je sais je n'oublie pas la balise ) et en plus je m'endormirais moins bête ce soir car effectivement j'avais déjà vu la méthode Case mais je ne pensais pas qu'elle pouvait être utilisée dans une macro évènementielle et encore moins sur plusieurs colonnes (ou lignes ou ce qu'on veut...). Donc pour résumé, plus besoin de clic droit pour sélectionner une valeur dans ma liste de validation . Comme d'habitude et comme j'ai posté mes 2 codes hier soir, je vous met la macro unique que j'ai réussi (enfin j'espère) à compiler : Private Sub Worksheet_Change(ByVal Target As Range) Bonne soirée à tous et encore un très grand merci. |
|
|
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
Qui consulte actuellement ce sujet ?
1 Utilisateur(s) anonymes