Rapport de message :*
 

Re: Automatisation d'une base de données avec excel

Titre du sujet : Re: Automatisation d'une base de données avec excel
par myDearFriend! le 13/09/2008 01:37:17

Re,

Ok, en premier lieu et pour répondre à ta question :

Les données pré-affichées à l'ouverture du Userform proviennent de la procédure "effacer()" présente dans le module de code standard (Module1).
En fait, cette procédure est déclenchée lors du clic sur le bouton "Saisir" de la feuille de calcul : voir la procédure évènementielle "CommandButton1_Click()" dans le module de code de la Feuil1. Dans cette procédure évènementielle, on retrouve également le pré-remplissage des ComboBox du Userform.


Cela dit
, je me permets de t'annoncer que tu n'as pas vraiment choisi le meilleur support pour apprendre à utiliser les Userforms. N'en déplaise à l'auteur auprès duquel je m'excuse par avance, mais franchement, dans ce classeur, il y a, à mon avis, des erreurs qu'il convient d'éviter...

Quelques remarques par exemple :

- Déclarer les variables est une bonne chose. Mais la déclaration systématique de variables en type "Public" et/ou en tête de module n'est pas vraiment la meilleure façon d'optimiser un code. Cela entraine un gaspillage des ressources machine (mémoire). On peut utiliser des variables dites "Public", mais il convient de les restreindre au strict nécessaire (quand on ne peut pas faire autrement).
Je te conseille de lire l'article VBA et les variables dans lequel je tente d'expliquer la déclaration des variables et leur utilisation.

- Row est une propriété existante dans VBA. Il s'agit donc d'un mot clé réservé. Nommer une variable avec ce même nom peut entrainer des conflits d'interprétation du code et est donc à proscrire.

- L'utilisation de "TELMOBPROMO.Hide" lorsqu'on clique sur le bouton "Quitter" ne fait que masquer le Userform et ne le décharge pas complètement de la mémoire : encore un gaspillage de ressources.

- Pour initialiser les valeurs dans les contrôles du Userform à son ouverture, on utilise normalement l'évènement "Initialize()" du Userform qui est justement réservé à cet effet. C'est dans cet évènement qu'on devrait remplir les ComboBox par exemple.

- Dans l'expression :
   While ActiveSheet.Cells(Row, 1).Value <> ""
       ActiveSheet.Cells(Row, 1).Select
       Row = Row + 1
    Wend
...la ligne ActiveSheet.Cells(Row, 1).Select ne sert strictement à rien. Par ailleurs, il est toujours déconseillé d'utiliser les Select ou Activate dans VBA. C'est souvent inutile, c'est toujours source de lenteur et ça peut favoriser les plantages dans certaines situations.

Si tu le souhaites, je peux te mettre en pièce jointe un classeur exemple que j'avais réalisé à une certaine époque et qui est, selon moi, sans doute un peu plus académique et plus simple pour ton apprentissage...

Cordialement,