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 20:34:42 Re bonjour Claude Voilà qui est plus présentable. Code de la fonction Enregistrer, voir commentaire souligné. Sub Enregistrer(ColControle As Collection) Dim PlageBase As Range ' La plage qui représente la base de données. Dim CelluleAjout As Range ' Cellule où se fera l'ajout de données. Dim NoColonne As Long ' Entier du numéro de colonne idoine. Dim Controle As Control ' Attention, le typage de la variable oblige à ne charger que des objets de type ' Control dans la collection, sinon une erreur (Paff-Boum!) se produira. ' Affecte la variable PlageBase à la plage BaseDeDonnées. Set PlageBase = Range(Names("BaseDeDonnées").RefersTo) ' Mettre un point d'arrêt ICI pour voir For Each Controle In ColControle ' On trouve le no. de colonne approprié avec la fonction EQUIV(), MATCH en Anglais. ' Si le nom de champ de la base ne correspond pas Badaboum-Crac! ' On corrigera sous peu, une chose à la fois. NoColonne = WorksheetFunction.Match(Controle.Tag, PlageBase.Rows(1), 0) ' Puis on ajoute la donnée en fin de colonne dans la cellule CelluleAjout ' Note : ' 1 - PlageBase pointe vers la plage BaseDeDonnées. ' 2 - PlageBase.Columns(NoColonne) pointe vers la colonne NoColonne de la plage BaseDeDonnées. ' 3 - PlageBase.Columns(NoColonne).Range("A1") pointe vers la cellule supérieure de la colonne NoColonne de la plage BaseDeDonnées. ' 4 - PlageBase.Columns(NoColonne).Range("A1").End(xlDown) pointe vers la dernière cellule non vide de la colonne ' NoColonne. ' 5 - PlageBase.Columns(NoColonne).Range("A1").End(xlDown).Offset(1, 0) pointe vers la cellule (vide on le souhaite) ' suivant immédiatement la dernière cellule non vide de la colonne NoColonne. ' 6 - C'est là que seront ajoutées les données du formulaire. Set CelluleAjout = PlageBase.Columns(NoColonne).Range("A1").End(xlDown).Offset(1, 0) ' Ouf! Nous y sommes presque... CelluleAjout = Controle.Text Next ' Ne reste plus qu'a passer l'aspirateur. With frmExemple1 .txtDate.Text = vbNullString .txtMontant = vbNullString .cboCategorie.ListIndex = 0 .cboTypeDePaiement.ListIndex = 0 End With End SubGuy |
Forums