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 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 Sub
Guy