Voir le flux RSS

Philippe Tulliez

VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy

Noter ce billet
par , 13/10/2020 à 12h09 (401 Affichages)
Lorsque l’on doit traiter des données en utilisant des données provenant d’autres classeurs, il est préférable de les importer plutôt que d’utiliser des liaisons.
Voici donc une procédure qui effectue ce travail.

Les contraintes
  • Les tables "Source" et "Cible" doivent avoir le même nom
  • Le nombre de colonnes de gauche de la table "cible" doit être égal à celui de la table source
  • L’ordre des colonnes doit être identique
  • Les formules de la table "source", s’il y en a, seront supprimées dans la table "cible" après la copie
  • Le classeur contenant la table "cible" doit être le classeur actif

Ce que l’on peut ajouter
Dans le respect des contraintes, il est tout à fait possible d’ajouter des colonnes avec formules

Important : La fonction publiée ne se charge pas de la vérification

Code de la procédure nommée CopyTable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Function CopyTable(WorkbookName As String, TableName As String)
  ' Fonction qui copie (Importation) une table (LitObject) sur une autre du même nom et se trouvant dans le classeur actif
  ' Philippe Tulliez (www.magicoffice.be)
  ' Arguments
  '  WorkbookName  Nom du classeur source
  '  TableName     Nom commun des deux tables
  ' Déclaration / Affectation des variables
  Dim TableSource As ListObject
  Dim TableTarget As ListObject
  Dim WorkbookSource As Workbook
  Dim HasShowTotal As Boolean
  Dim NumberOfRows As Long
  Dim NumberOfColumns As Integer
  Set TableTarget = Range(TableName).ListObject
  ' Start Of Process
  With TableTarget
   ' Supprime, s'il y en a, les données (DataBodyRange) de la table cible
   If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
   .ListRows.Add               ' Ajoute une ligne
    HasShowTotal = .ShowTotals ' Mémorise la propriété d'affichage de la ligne des totaux
   .ShowTotals = False         ' Supprime l'affichage de la ligne des totaux
  End With
  ' Ouvre la table de données
  Set WorkbookSource = Workbooks.Open(FileName:=WorkbookName) ' , ReadOnly:=True
  Set TableSource = Range(TableName).ListObject
  ' Copie des données
  With Range(TableName).ListObject.DataBodyRange
  .Copy Destination:=TableTarget.DataBodyRange.Cells(1, 1)
   NumberOfRows = .Rows.Count
   NumberOfColumns = .Columns.Count
  End With
  ' Supprime les formules de la table cible provenant de la table source
  With TableTarget.DataBodyRange.Resize(NumberOfRows, NumberOfColumns)
  .Value = .Value
  End With
  ' Fermeture du classeur source
  WorkbookSource.Close
  ' Fin de process
  TableTarget.ShowTotals = HasShowTotal ' Remet la propriété  initiale d'affichage de la ligne des totaux
  Set TableSource = Nothing: Set TableTarget = Nothing: Set WorkbookSource = Nothing
End Function
Exemple d'une procédure qui l'invoque
Cette procédure copie la table nommée T_TimeSheet présente dans le classeur 2020-09 - TimeSheet.xlsb qui se trouve dans le sous-répertoire TimeSheet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Sub TestCopyTable()
  Const WorkbookName As String = "2020-09 - TimeSheet.xlsb"
  Const SubFolder As String = "TimeSheet"
  Dim WkbSrceName As String
  WkbSrceName = ThisWorkbook.Path & "\" & SubFolder & "\" & WorkbookName
  Application.ScreenUpdating = False
  CopyTable WkbSrceName, "T_TimeSheet"
End Sub

Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog Viadeo Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog Twitter Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog Google Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog Facebook Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog Digg Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog Delicious Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog MySpace Envoyer le billet « VBA pour Excel - Copier une table structurée sur une autre à l’aide de la méthode Copy » dans le blog Yahoo

Mis à jour 13/10/2020 à 13h30 par Philippe Tulliez

Catégories
VBA Excel

Commentaires