IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Pierre Fauconnier

Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2)

Noter ce billet
par , 24/06/2021 à 08h37 (4876 Affichages)
Salut.

Dans ce billet, je développais une fonction générique permettant de transférer les données d'un formulaire feuille de calcul vers un tableau structuré:
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Function AddData(Tablename As String, Map)
  Dim r As Long
  Dim i As Long
  Dim t As ListObject
 
  Set t = Range(Tablename).ListObject
  r = t.ListRows.Add.Index
  For i = LBound(Map) To UBound(Map) Step 2
    t.ListColumns(Map(i + 1)).DataBodyRange(r).Value = Range(Map(i)).Value
  Next i
  Set t = Nothing
End Function


Aujourd'hui, nous allons travailler dans l'autre sens et ce billet va illustrer le transfert d'un tableau structuré ou table de données vers un formulaire à des fins de modification, par exemple1.

On notera au passage que cette fonction est quasi identique à celle qui transfère les données dans le sens Formulaire => Table, la différence principale étant dans la ligne qui transfère la valeur (Range(Formulaire).Value = Range(Table).Value au lieu de Range(Table).Value = Range(Formulaire).Value). Une autre différence est que que la fonction reçoit l'index de la ligne du tableau qu'il faut transférer dans le formulaire2. Afin de faciliter les copier-coller des lignes qui créent l'array de mappage, j'ai laissé l'ordre des valeurs dans l'array identique à celui de la fonction AddData vue dans le billet cité plus haut.

Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Function ReadData(Tablename As String, Index As Long, Map)
  Dim i As Long
  Dim t As ListObject
 
  Set t = Range(Tablename).ListObject
  For i = LBound(Map) To UBound(Map) Step 2
    Range(Map(i)).Value = t.ListColumns(Map(i + 1)).DataBodyRange(Index).Value
  Next i
  Set t = Nothing
End Function

Cette fonction de transfert pourra être appelée pour n'importe quelle paire table/formulaire du classeur. Ici, je l'appelle pour récupérer dans le formulaire les données d'un contact:

Nom : 2021-06-24_082243.png
Affichages : 84
Taille : 47,8 Ko

Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Function ReadContact()
 ReadData "t_contacts", 2, VBA.Array("fc_Prénom", "Prénom", "fc_Nom", "Nom", "fc_DN", "Date naissance", "fc_Actif", "Actif", "fc_Service", "Service")
End Function


A nouveau, on notera que pour une autre paire formulaire/table, on utilisera la fonction ReadData avec les données y associées. Si je dois transférer les données de facturation du tableau des factures vers le formulaire d'encodage, j'utilise la même fonction générique avec les arguments qui conviennent:

Nom : 2021-06-24_083043.png
Affichages : 73
Taille : 34,7 Ko

Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Function ReadInvoice()
  ReadData "t_FacturesVente", 2, VBA.Array("fv_Date", "Date", "fv_Numéro", "Numéro", "fv_Client", "Client", "fv_htva", "HTVA", "fv_Tva", "TVA", "fv_Tvac", "TVAC")
End Function


Comme vous le voyez, il est inutile de réinventer la roue à chaque fois. Cette fonction générique trouvera sa place dans le module xlTools qui contient les outils génériques liés à Excel (voir mon billet à ce sujet).


1 On notera que l'on pourrait réaliser la même chose pour transférer les données d'une table vers une fiche A4 à imprimer, par exemple.
2 La fonction ReadData a la responsabilité unique de transférer les données de la table vers le formulaire, mais pas de déterminer quelle ligne doit être transférée. C'est pourquoi elle doit recevoir l'index de la ligne qui sera déterminé en amont.

Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog Viadeo Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog Twitter Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog Google Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog Facebook Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog Digg Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog Delicious Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog MySpace Envoyer le billet « Excel VBA: Enregistrer un formulaire dans un tableau structuré (Tableau vers feuille formulaire) (2) » dans le blog Yahoo

Commentaires