Conception d'un formulaire (UserForm) et du fichier

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 16 août 2016 à 16:02
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 août 2016 à 09:32
Bonjour,

Ma question du jour ne concerne pas ce forum, mais je voulais des avis un peu plus ,spécialisé, alors je me lance.

En étant au niveau de la conception du classeur dans lequel je vais créer un Userform pour faciliter saisie, recherche, etc, je me pose la question suivante :
Que vaut-il mieux pour faciliter, agiliser le code?

1- les entêtes de colonnes peuvent servir de noms à mes contrôles
Avantage : les Allers-retours feuille <=> Userform sont très simples :
'remplissage de l'userform
For Col = 1 To 14
    Me.Controls(Cells(1, Col).Value) = Cells(Lign, Col).Value
Next Col

Inconvénients :
> pas d'espace (quoique on peut gérer facilement avec Replace( , " ", "_") par exemple
> pas d'accent (quoique)
> SURTOUT : on perd la lisibilité sur le type de contrôle... par exemple : ComboVilles : je ne vais tout de même pas mettre en entête de ma colonne Villes : ComboVilles...

2- je peux entrer les numéros des colonnes dans les propriétés Tag de mes contrôles
Avantages :
> les Allers-retours feuille <=> Userform sont très simples
> les noms des contrôles peuvent être explicites
Inconvénient : on perd tout de même la propriété Tag...

Il existe encore d'autres possibilités, bien sur.
Pourriez-vous me décrire laquelle vous privilégierez? Éventuellement me donner (on peut y réfléchir ensemble bien sur) une autre méthode qui ne comporte aucun inconvénient...
Merci
Si vous me trouvez hors sujet, n'hésitez pas à supprimer et/ou signaler...

A++

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 août 2016 à 19:04
Bonjour, Franck,
Un éclairage sur ce que sont ces Controls (de quel type) est souhaitable avant de réfléchir à la solution la mieux adaptée.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
16 août 2016 à 19:24
Bonsoir Jacques, et merci de ta réponse.

Cette question, je me la pose, en vue de réaliser une "fiche pratique" pour débutants.

Le but est de partir de rien, et de réaliser son propre formulaire de saisie pour sa petite bdd sur feuille Excel.

Pour cela, j'envisage de rester le plus simple possible et donc de n'utiliser que les contrôles "faciles" d'accès ET indispensables.

Soit :
> Label ==> mais ça on va s'en "ficher un peu" car ils n'auront d'autre intérêt que d'indiquer les "noms" des champs.

> TextBox
> Contrôles de liste ==> ListBox ET ComboBox
> CheckBox
> OptionButton
> Frame
> CommandButton

Éventuellement, en extension, j'envisage de présenter les résultats de "recherches" grâce à un contrôle Scrollbar.

Donc, surtout rien "d’inhabituel", que de l'usuel "pur jus".

Je souhaite présenter une "méthode" permettant de gérer facilement :
> la saisie dans l'userform
> l'enregistrement de l'userform dans la feuille
> la modification d'un enregistrement
> la recherche de données dans la feuille avec, par conséquent, le transfert de ces données, en mémoire, pour affichage dans l'userform.

Comme tu le vois, le B-A BA des formulaires sous VBA...

Sur ce, c'est l'heure du bain du p'tit, donc je te dis, ... à demain.
Bonne soirée.
Mes amitiés à ton épouse.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 août 2016 à 19:33
Un peu embêtant du fait que ces contrôles ne sont pas tous du même type
Tu peux également utiliser la propriété comment des cellules, si tu veux préserver celle des contrôles
Je me demande si tu n'aurais pas intérêt à rechercher plutôt une solution par liaison de tes contrôles aux cellules concernées.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
17 août 2016 à 09:32
Bonjour Jacques,

Un peu embêtant du fait que ces contrôles ne sont pas tous du même type
Pourrais-tu me montrer ce qu'il est possible de faire si, par exemple, nous n'aurions que des textbox?

Tu peux également utiliser la propriété comment des cellules, si tu veux préserver celle des contrôles
C'est une solution.
Une autre, totalement invisible, serait d'utiliser le gestionnaire de noms du classeur en cachant les noms générés.
On génère autant de noms que de contrôles devant être liés avec la feuille, et on affecte à chacun de ces noms la colonne liée grâce à la propriété RefersTo des noms.
Cela me plait déjà davantage.

Mais le but est d'essayer de concevoir le fichier au mieux. Or ces solutions entraînent toutes des "complications" (Sub complémentaires, noms, comment en plus...).

Je me demande si tu n'aurais pas intérêt à rechercher plutôt une solution par liaison de tes contrôles aux cellules concernées
C'est la finalité que je recherche. Enfin, plutôt qu'aux cellules, je cherche à lier mes contrôles aux colonnes. La ou les lignes "intéressantes" peuvent facilement être trouvées à posteriori.

Une idée m'a "traversé" après avoir lu ta dernière réponse :
Il convient de bien "concevoir" les noms de TOUS les contrôles, suivant un modèle précis :
[type] underscore [Nom contrôle explicite] underscore [Lettre colonne]
Exemple pour une ComboBox Villes devant être stockée en colonne D :
Combo_Villes_D


Ainsi, on obtient un code clair, notamment dans les événements (
Combo_Villes_D_Change() Combo_Villes_D_Click()
) et le remplissage de l'userform vers la feuille (et réciproquement) se fait aisément grâce à
Split(Ctrl.Name, "_")(2)


Pour "évincer" les contrôles ne devant pas être liés à la feuille, il suffit de les nommer : [type] underscore [Nom contrôle explicite] underscore [zéro].
Exemple :
Lab_Nom_0


Reste à traiter le cas des contrôles qui ont vocation à traiter la même colonne (ex : OptionButton).
0
Rejoignez-nous