Contrôle à utiliser
Bonjour à tous,
J'aurais besoin d'une astuce pour concevoir un UserForm pour lequel je ne trouve rien d'équivalent d'après mes recherches sur Internet. J'ai des listes dynamiques (ajout ou suppression d'items possible) dans plusieurs colonnes d'un onglet. L'UserForm doit initialiser une liste en fonction de la valeur d'une cellule et l'utilisateur dois pouvoir affecter une cotation à chaque item de la liste du type 1 / 0,75 / 0,5 / 0 / NC.
Quel type de contrôles je peux utiliser pour concevoir mon UserForm? Le plus facile à coder pour mon niveau de connaissance en VBA...
Merci
Salut Reco et bienvenue sur le Forum,
Tu as apparemment posé deux fois de suite des questions assez similaires, mais tout ça n’est pas très clair.
Tu ferais mieux de nous fournir un fichier exemple et de nous indiquer ce que tu désires de plus ; des images de tes fichiers ne nous servent pratiquement à rien, un peu comme si tu apportais une photo de ta voiture à réparer à ton garagiste.
A te relire.
Bonjour,
un peu comme si tu apportais une photo de ta voiture à réparer à ton garagiste.
Pourtant j'ai vu le Dr House soigner des patients sans les ausculter...
Voici donc un fichier modifié car ce sont des données du boulot, à mon sens sans caractère confidentiel, mais sait-on jamais...
1ere demande : remplacer la ListBox1 de l'userform_Objectivation par les coordonnées relatives d'une cellule du type : ActiveCell.Offset.(0,-1).value Comment faire pour initialiser les autres ListBox de l'userform à partir de cette cellule ?
2ie demande : quelle est le contrôle le mieux adapter pour réaliser un userform sur lequel une liste d'item est initilisée et pour lesquels on peut attribuer une cotation de 1 / 0.75 / 0.5 / 0 / NC.
J'ai pensé à une listview multicolonne présentant des Checkbox pour chaque item, mais est-ce le plus adapté?
Merci d'avance.
Re,
Si j’avais vu ton fichier d’abord, ce n’est pas certain que je me serais lancé à t’aider, d’ailleurs je ne sais pas si je ne vais pas devoir abandonner au bout d’un moment.
Mais si tu veux, on peut commencer avec le premier problème.
Tu as la ListBox1 dans ton UserForm_Objectivation qui est chargée par tous les titres des lignes 2 des 4 feuilles ‘Risques ……’.
Il me semble que la logique serait de pouvoir choisir dans cette très longue liste une occurrence et qu’en fonction de l’occurrence choisie, des textes apparaissent dans les 3 ListBox en-dessous.
Mais bon, tu indiques vouloir remplacer ce qui est en place dans la ListBox1 par les coordonnées relatives d'une cellule du type : ActiveCell.Offset.(0,-1).value. Là je ne comprends pas ce que tu veux dire. Tu voudrais une seule entrée dans cette ListBox1 ? Concrètement, quelle(s) valeurs désires-tu dans cette ListBox1 ?
A te relire.
Bonjour,
Je veux supprimer la Listbox1 et initialiser les 3 autres listbox à partir de la valeur d'une cellule (en coordonnées relatives). La cellule en question est alimentée par une autre macro.
Merci de ton aide
Par quelle macro ?Reco a écrit :La cellule en question est alimentée par une autre macro.
Tu veux ou tu voudraisReco a écrit :Je veux ........ et initialiser les 3 autres listbox à partir de la valeur d'une cellule (en coordonnées relatives).
Re,
Par quelle macro ?
C'est une macro qui permet à un utilisateur du fichier de sélectionner dans un autre onglet, un item et de reporter la valeur dans une cellule de la colonne "Risques liés". Ca correspond à une étape 1 différente de celle pour laquelle je sollicite de l'aide.
Dès que cette étape 1 est réalisée et que la cellule est complétée, l'utilisateur doit double cliquer dans la cellule de la colonne "équipement, matériaux, sources..." sur la même ligne pour faire apparaitre l'userform Objectivation sur lequel se trouvent 3 listBox qui doivent s'initialiser en fonction de la valeur de la cellule de la colonne "Risques liés" (renseignée à l'étape 1)
Par exemple :
Un utilisateur sélectionne dans l'étape 1 l'item : "Températures extrêmes" qui s'inscrit alors dans une cellule de la colonne "risques liés".
Il double clique dans la cellule à droite de celle complétée par l'étape 1, ce qui fait apparaitre l'userform "Objectivation" et initialise les 3 listBox "origines du risque", "situations dangereuses" et "conséquences". Il sélectionne les items dans ces 3 Listbox qui s'inscrivent automatiquement dans les colonnes correspondantes.
La Listbox1 indique les même items que ceux qui peuvent être saisis à l'étape 1. Si tu veux elle m'a été utile temporairement pour ne pas rester coincé. S'il est possible de remplacer la Listbox1 par la valeur de la cellule de la colonne "Risques liés" alors elle ne sert plus à rien et peut être supprimée.
A bientôt
Salut,
Si je t’ai (enfin) bien compris, le code modifié du fichier ci-joint devrait répondre à ton attente
Si je t’ai (enfin) bien compris, tu mérites presque la palme 2014 de la plus mauvaise explication de son problème
A te relire.
Bonjour,
Merci, c'est parfait pour la première demande ! Désolé pour le manque de précision
Une idée pour le contrôle à utiliser dans le cadre de la 2ie demande?
Bonne journée
Salut,
Tant mieux si ce premier souci est résolu.
Je ne sais plus trop où on en est avec ta deuxième demande. Il me semble que tu as d’un côté un Userform dans ton fichier et d’un autre côté une image sur un de tes messages ; un peu comme si tu apportais ta deux chevaux chez le garagiste avec une photo d’une Lamborghini et que tu lui disais que tu veux un peu la même chose
Peux-tu alors me résumé la situation, me fournir ton fichier actuel avec ce qui joue déjà et – si tu as un code derrière l’image que tu m’as montrée – me le fournir également, quitte à ce que ce soit par un deuxième fichier ?
A te relire.
Bonjour,
Ok, tu n'aimes pas trop les images
L'image est le seul moyen que j'ai trouvé pour illustrer ma seconde demande. Elle n'a pas d'intérêt fonctionnel, juste montrer à quoi ressemble l'userform que je souhaiterais créer.
Je te joins, comme demandé, un fichier avec les explications et ce que j'ai réalisé pour le moment. Le résultat n'est pas terrible, les Listviews sont un peu obscures pour moi...
Bonne journée,
Re,
Tu laisses pratiquement un mois entre deux interventions, ce n’est pas vraiment sérieux. Début août, pendant mes vacances, j’aurais eu plus de temps à te consacrer, raison pour laquelle j’avais pris en charge ton sujet. De plus je suis peu inspiré par ce sujet
Je vais devoir te laisser tomber actuellement pour surcharge au travail et sur le Forum. Je te conseille d’indiquer alors ce fil comme ‘Résolu’ – en cliquant sur le petit V vert dans l’un de tes messages – et d’en recommencer un autre en être immédiatement plus précis dans ta demande. Evite de placer tes instructions directement dans un fichier Excel, c’est ainsi très difficile d’avoir l’historique de la discussion.
Eventuellement à une prochaine fois.
Bonsoir
Je ne sais pas si je vais pouvoir t'aider mais
Comment fais tu pour savoir quelle colonne utiliser (le double clic est déjà pris) ?
Ensuite tu copies toute la colonne dans la ListView et ensuite que fais tu ?
Tu sélectionnes une ligne et tu choisis la bonne valeur, comment ?
Tu ne veux avoir qu'une seule valeur par ligne ?
Au fait (je ne connais pas tout) mais une ListView comme celle que tu as fourni la photo, je n'en ai jamais vu, où l'as tu trouvée ?
Ensuite tu valides
Que fais tu des données (dans le fichier tu notes "Toutes les valeurs (items + valeurs cochées) de la Listview1 sont collées en colonne S à la ligne correspondante) tu mets tout dans la même cellule ?
Le plus simple c'est que notes manuellement le résultat que tu veux : Fais plusieurs exemples
Penses aussi à la macro de Yvouille qui te retourne des valeurs (elles aussi comment sont elles stockées ?)
A suivre ( mais ne tardes pas trop - j'oublie vite )
Bonjour,
Merci de vos réponses, désolé pour le coté tardif.
Comment fais tu pour savoir quelle colonne utiliser (le double clic est déjà pris) ?
Je ne connais pas très bien les Listview mais est ce qu'il est possible que la bonne colonne soit recherchée à partir de la valeur de sa première cellule sur l'onglet Risques-Moyens de prévention.
Exemple:
Sur l'onglet "Document Unique", en colonne O, ligne 6, la valeur est "Température extrême" qui est recherchée dans l'onglet "Risques-Moyens de prévention" sur la ligne 2. Localisée en colonne X, la liste correspondante est reportée dans la Listview.
Ensuite tu copies toute la colonne dans la ListView et ensuite que fais tu ?
Une fois la liste apparue, 5 cases à cocher doivent apparaitre à coté de chaque item de valeur 1, 0.75, 0.5, 0 et NC. L'utilisateur doit cocher chaque item de la liste. Une seule coche possible parmi les 5 choix pour chaque item.
Tu sélectionnes une ligne et tu choisis la bonne valeur, comment ?
L'utilisateur ne sélectionne pas de ligne, il coche à coté de chaque item. Les 5 cases à cocher à coté de chaque item représentent une valeur (1, 0.75, 0.5, 0 et NC).
Tu ne veux avoir qu'une seule valeur par ligne ?
Oui, par exemple :
Mesures organisationnelles
AAAA24 1[ ] 0.75[ ] 0.5[x] 0[ ] NC[ ]
Au fait (je ne connais pas tout) mais une ListView comme celle que tu as fourni la photo, je n'en ai jamais vu, où l'as tu trouvée ?
Il s'agit un montage sous Paint, je me suis inspiré d'une trouvaille sur internet (listview avec case à cocher). L'imprime écran est une "mauvaise" habitude prise sur les forum de modélisation 3D, domaine dans lequel j'ai un peu plus de niveau qu'excel
Que fais tu des données (dans le fichier tu notes "Toutes les valeurs (items + valeurs cochées) de la Listview1 sont collées en colonne S à la ligne correspondante) tu mets tout dans la même cellule ?
Oui tout dans la même cellule.
Bonjour
Comme ta ListView n'existe pas, je me suis débrouillé avec les moyens du bord
J'ai inclus la macro de Yvouille (
Tu ne m'as pas répondu exactement à la question "Comment fais tu pour savoir quelle colonne utiliser (le double clic est déjà pris) ?"
Tu m'as dis de prendre la 1ère valeur O6, quid des autres, comment fait-on pour savoir que l'on va traiter tel ou tel risque ?
Actuellement la macro ne s'occupe exclusivement de O6, en attente de ta réponse
j'essaierai de faire le code quand je verrai cette ListView avec des cases à cocher représentées comme sur ton imageReco a écrit :L'utilisateur ne sélectionne pas de ligne, il coche à coté de chaque item
A tester
C'est magnifique
Pour la valeur O6:
Par exemple, l'utilisateur double clique en P7, ce qui lance la macro modifiée par Yvouille (merci encore), à l'étape de validation la listview se lance (je ferai la modif tout seul) en utilisant la référence relative en O7.
Si double clique en P28 liste chargée à partir de O28 etc.
Si je peux abuser encore un peu, crois tu possible de mettre les cases à cocher directement à coté de chaque item pour eviter de selectionner l'item avant de cocher?
Dans tous les cas un grand merci !
Bonjour
tant mieux que cela te plaise
Reco a écrit :crois tu possible de mettre les cases à cocher directement à coté de chaque item pour eviter de selectionner l'item avant de cocher?
Dis moi où as tu trouver cette ListView alors
Banzai64 a écrit :j'essaierai de faire le code quand je verrai cette ListView avec des cases à cocher représentées comme sur ton image
Re,
Alors voici le post qui m'a inspiré pour la Listview :
https://forum.excel-pratique.com/excel/checkboxes-dans-une-colonne-listview-t13393.html
Pour remplacer la coordonnée O6 du Find, il faut que je mette un ActiveCell.Offset(0, -1) à la place? J'essaie de déchiffrer (digérer) doucement ton code.
Bonne après midi.
Bonjour
C'est bien ce que pensais, cette LisView n'existe pas
Je connais celle où il y a un CheckBox en début mais pas les autres
Désolé il faudra te contenter de ce que je t'ai fait
Reco a écrit :il faut que je mette un ActiveCell.Offset(0, -1) à la place?
si tu te sers de la macro d'Yvouille pour départ, il y a une variable globale qui te sera utile "Target_Offset_Y"
Activecell te sera aussi utile
Re
C'est bien ce que pensais, cette LisView n'existe pas
Ah ok, c'est dejà très bien comme ça, merci encore. A part la Listview il n'y a pas d'autre contrôle qui pourrait être utilisé?
Pour le Find, j'ai fais ceci, cela fonctionne mais je préfère demander confirmation :
Set Cel = Ws.Rows(2).Find(what:=Target_Offset_Y, LookIn:=xlValues, lookat:=xlWhole)En remplacement de :
Set Cel = Ws.Rows(2).Find(what:=Range("O6"), LookIn:=xlValues, lookat:=xlWhole)Bonne continuation