Rapport de message :*
 

Re: envoyer les infos d'un userform vers un tableau

Titre du sujet : Re: envoyer les infos d'un userform vers un tableau
par Guy le 04/09/2009 17:35:19

Bonjour Claude,

Tout d'abord va faire un tour sur la page
Nommer une Plage Dynamiquesur ce site.

On y explique comment construire une plage dynamique à une colonne.
L'exemple donne pour la plage nommée «Gamme» la formule 
=DECALER($C$19;;;NBVAL($C:$C)-1;1)

La plage «BaseDeDonnées» du classeur livre de compte2_Mod2.xls porte la formule
=DECALER(Feuil2!$C$6:$H$6;;;NBVAL(Feuil2!$C:$C))
Dans ce cas il y a plus d'une cellule dans la variable Réf (voir Nommer une Plage Dynamique) soit la plage Feuil2!$C6:$H6 qui est la plage en-tête de «BaseDeDonnée». Le dernier paramètre est posé au nombre de cellule portant une valeur dans la colonne C. Il est donc important de ne rien inscrire dans la colonne C autre que les valeurs importées du formulaire.

Par exemple tu peux créer une plage dynamique ailleurs dans  la feuille 2. Comment?

Ouvre le formulaire de définition des Noms (Menu Insertion/Nom/Définir... )
  1. Dans la zone de texte Noms dans le classeur : inscrit le nouveau nom que tu désires.
  2. Clique sur le bouton Ajouter
  3. Dans la zone de texte Fait référence à : inscrit =DECALER(Feuil2!$L$6:$Z$6;;;NBVAL(Feuil2!$L:$L))
  4. Cette nouvelle plage dynamique aura en en-tête la plage Feuil2!$L$6:$Z$6 et s'étendra automatiquement suivant le nombre de valeurs de la colonne L.
  5. Tu remarqueras une petite différence entre la formule à une colonne donnée en exemple et celle-ci.  Le paramètre Largeur est vide.  En effet la largeur de la plage est donnée implicitement par la valeur de paramètre Réf.
  6. Tu pourras évidemment choisir la plage d'en-tête que tu voudras. Je n'ai choisi que pour l'exemple.

Ceci étant, comment peut-on obtenir dans le code une référence à la plage dynamique «BaseDeDonnée»?
Revenons au code de la procédure Enregistrer du module modEnregistrer
(je n'ai pas utilisé l'affichage class="xoopsCode", il ne supporte pas iso-8859-1 et ses caractères accentués, je suis très pointilleux là-dessus )

Sub Enregistrer(ColControle As Collection)

  Dim PlageBase       As Range    ' La plage qui représente la base de données.
  ...
                                 
  ' Affecte la variable PlageBase à la plage BaseDeDonnées.
  Set PlageBase = Range(Names("BaseDeDonnées").RefersTo)
 
  ...
 
End Sub

Names("BaseDeDonnées").RefersTo retourne la formule de la plage «BaseDeDonnée»
C'est cette formule, dynamique va sans dire, qui est affectée à la plage PlageBase.

Pour ce qui est de ta question sur «...et un autre userform pour inscrire les crédits et un autre dont l'idée serai pour integrer les crédit et divers prélèvement mensuel...» je crois que tu peux commencer à voir comment tu pourras y arriver en te basant sur l'exemple fournit dans livre de compte2_Mod2.xls.

Cordialement,

Guy