Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Contribuez
Contribuez Placez ici vos codes, sources, trucs et astuces que vous souhaitez partager avec les membres du club.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/04/2011, 10h29   #1
Membre habitué
 
Cloviz Inat-Zanne
Inscription : octobre 2010
Messages : 91
Détails du profil
Informations personnelles :
Nom : Cloviz Inat-Zanne
Âge : 32

Informations forums :
Inscription : octobre 2010
Messages : 91
Points : 107
Points : 107
Par défaut Comment remplir un tableau avec une tripoté de champs dans un formulaire et tout çà simplement

Bien le bonjour les Developpezeurs,

J'ai été confronté à un problème, dernièrement ; je devais remplir un tableau excel avec des petites croix, là où les checkboxes de mon formulaire étaient cochées. Le souci, c'est que j'avais 6 colonnes d'une cinquantaine de checkboxes à traiter.

L'idée la plus simple consistait à écrire une ligne de code par checkboxes, mais je me voyais mal écrire 300 fois :

Code :
If [nomcheckbox] = True Then Range([AdresseCellule]) = "x"

Je me suis donc mis en tête de gérer le problème avec un for each... next, en testant le nom préalablement défini, ce qui me permettait de trouvé la position du checkbox et de mettre un "x" au bon endroit.

Bien que le code était fort exaltant intellectuellement (j'étais très fier de moi !), il n'en comportait pas moins de 500 lignes, soit plus que la première méthode.

Soudain, un flash !!! Je me suis rapellé, que les objets d'un formulaire contiennent une variable Tag. Il suffit alors d'entrer dans chaque "Tag" l'adresse de la cellule correspondante dans le tableau. Par exemple : AG27.

Le code subit alors une cure d'amaigrissement de choc :

Code :
1
2
3
4
5
6
7
Dim Ctl As Control
 
For Each Ctl In UF.Controls
    If Ctl.Value = True Then
        Feuil1.Range(Ctl.Tag) = "x"
    End If
Next
Bon biensûr, çà demande un petit temps de préparation, car il faut entrer toutes les adresses dans les champs Tag.

Voilà.
__________________
Cordialement.

Touffe
Touffe54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 09h44   #2
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 682
Points : 4 682
Bonjour,

c'est un des domaines de prédilection des Modules de Classe :

Citation:
Lorsque vous devez ajouter un grand nombre de contrôles qui seront utilisés de la même manière (par exemple un groupe de TextBox), il devient vite fastidieux de réécrire plusieurs fois la même procédure. Dans ce cas, vous pouvez utiliser des modules de classe. Les classes définissent le fonctionnement des objets. Un objet peut être défini par une propriété, une méthode ou un évènement. (Vous n'écrivez qu'une seule procédure qui sera appliquable à tous les contrôles que vous aurez défini dans une collection).
http://silkyroad.developpez.com/VBA/ControlesUserForm/

http://fauconnier.developpez.com/art...neral/classes/

pas de tag à alimenter et surtout une portabilité et une maintenance correcte

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h33.


 
 
 
 
Partenaires

Hébergement Web