Bonjour,
La validation de données standard d'Excel ne permet de faire qu'un seul choix à la fois.
Or on a parfois besoin de sélectionner plusieurs choix et dès lors, on abandonne cette validation de données si bien que les données sont pénibles à saisir et potentiellement avec des fautes de frappe, ce qui nuit aux filtrages ou à la bonne exploitation de ces cellules.
Pour remédier à ça dans un de mes fichiers, j'ai créé une pop-up qui s'ouvre lorsqu'on double-clique dans la cellule à modifier et contient la liste des choix possibles (checkBoxes).
Jusque-là rien de bien excitant me direz-vous, mais l'intérêt de ma solution réside dans sa généricité puisque les choix sont construits dynamiquement. Voici le principe basé sur le fichier exemple ci-joint:
- Le tableau de l'onglet RiskMatrix est celui qui nous intéresse.
- L'onglet Data est l'onglet utilisé par la macro pour lister les choix qui seront proposés à l'utilisateur en fonction de la colonne de la case sur laquelle il fait le double-clic dans l'onglet RiskMatrix.
En gros, à chaque double-clic dans l'onglet RiskMatrix, la macro regarde si l'entête de colonne correspondante est aussi utilisée comme entête de colonne dans un des tableaux de l'onglet Data. Si oui, elle va ouvrir une pop-up listant toutes les valeurs de ce tableau issu de Data en présélectionnant les cases à cocher selon le contenu de la cellule visée. Là, il suffit de cocher/Décocher et valider pour mettre à jour la cellule.
Les avantages:
Rien à faire dans la macro:
- Pour ajouter une nouvelle liste de choix; il suffit juste de rajouter un tableau dans l'onglet Data ayant la même entête que la colonne visée dans l'onglet Risk Matrix.
- Pour ajouter un élément à une liste existante, il suffit de le rajouter au tableau correspondant dans l'onglet Data. Dans la pop-up, les éléments seront présentés dans le même ordre que dans l'onglet Data. La taille de la pop-up s'ajuste automatiquement en hauteur.
- Possibilité de tout faire au clavier: espace pour cocher/décocher; entrée pour valider; échap pour annuler; tab pour passer à la checkBox suivante.
Pour l'adapter chez vous, il faut:
- Reprendre le code de l'onglet RiskMatrix gérant l'événement Double-Clic et le copier dans chaque onglet où vous voulez vous en servir.
- Importer la UserForm.
- Créer l'onglet Data et s'assurer qu'il s'appelle bien DataSheet dans VBA (son nom dans Excel n'a pas d'importance) ou bien remplacer DataSheet par le nom que vous souhaitez dans le code fourni.
- Copier ces deux lignes de code dans un module standard:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 '--- 'Public data for check box management Public rangeTextStr As String Public tableForCheckBoxesStr As String '---
La solution est implémentée selon mes besoins donc il y a quelques limitations:
- F2 au lieu du double-clic permet de contourner la pop-up.
- Si dans une même liste, un nom est contenu dans un autre, ça devrait mal se passer... :p => facile à résoudre si nécessaire en supposant que personne ne modifie la case manuellement.
- Dans l'onglet Data, il peut y avoir d'autres tableaux n'ayant aucun rapport mais ils doivent n'avoir qu'une seule colonne. => facile à résoudre aussi mais il est possible de n'utiliser cette onglet que pour les checkBoxes et de le masquer pour éviter tout souci.
- Dans l'onglet où l'on capte les double-clics, pour avoir un code VBA générique à n'importe quel onglet, j'attaque le 1er tableau de l'onglet (Me.ListObjects(1)) donc il faut que le tableau visé soit le 1er de l'onglet. => facile à adapter si nécessaire
- Il n'y a pas de sélectionner/désélectionner tout.
- Pas d'ajustement de la pop-up en largeur.
- Je ne suis pas développeur donc le code n'est peut-être pas 100% optimisé.
- Testé sur Excel 2010 mais j'imagine que ça marche sur d'autres versions.
Voilà. J'espère que ça sera utile à quelqu'un.
Si vous trouvez cette solution intéressante et souhaitez voir ses limitations franchies ou si vous avez d'autres suggestions, discutons-en!
Partager