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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| Public Function TS_CopierUneColonne(TS_Source As Range, ByVal Colonne_Source As Variant, _
TS_Dest As Range, ByVal Colonne_Dest As Variant, ByVal Ligne_Dest As Long, _
Optional Méthode As XlCellType = xlCellTypeVisible) As Boolean
'------------------------------------------------------------------------------------------------------
'https://laurent-ott.developpez.com/tutoriels/Tableaux-Structures/#LII-F
'Copie une colonne d'un tableau structuré dans un autre tableau structuré.
'------------------------------------------------------------------------------------------------------
' TS_Source : le tableau structuré source où se trouve la colonne à copier.
' Colonne_Source : la colonne à copier (son nom ou son numéro).
' TS_Dest : le tableau structuré destination où il faut copier la colonne (la feuille doit être active).
' Colonne_Dest : la colonne où copier les données (son nom ou son numéro).
' Ligne_Dest : ligne où commencer la copie, par exemple 1 pour copier à la première ligne du tableau,
' ou 0 pour la dernière ligne du tableau.
' Méthode : énumération XlCellType (https://learn.microsoft.com/fr-fr/office/vba/api/excel.xlcelltype).
' par défaut xlCellTypeVisible pour les cellules visibles uniquement.
'------------------------------------------------------------------------------------------------------
' Renvoie : VRAI si tout s'est bien passé.
'------------------------------------------------------------------------------------------------------
' Remarque : si vous utilisez la méthode xlCellTypeVisible (par défaut) pensez à effacer les filtres du
' tableau structuré source si vous voulez copier toutes les données de la colonne et pas uniquement les
' cellules visibles.
'------------------------------------------------------------------------------------------------------
' Gestion des erreurs:
On Error GoTo Gest_Err
Err.Clear
' Mémorise la configuration:
Dim Anc_Visible As Long
Dim Anc_Feuille As String
Dim Anc_Screen As Boolean
Dim TS_Err_Description As String
Anc_Visible = Sheets(TS_Dest.Parent.Name).Visible
Anc_Feuille = ActiveSheet.Name
Anc_Screen = Application.ScreenUpdating
' Retrouve le numéro de la colonne source et vérifie sa cohérence (ou -1 si erreur):
Colonne_Source = TS_IndexColonne(TS_Source, Colonne_Source)
If Colonne_Source = -1 Then Err.Raise vbObjectError, , TS_Err_Description
' Retrouve le numéro de la colonne destination et vérifie sa cohérence (ou -1 si erreur):
Colonne_Dest = TS_IndexColonne(TS_Dest, Colonne_Dest)
If Colonne_Dest = -1 Then Err.Raise vbObjectError, , TS_Err_Description
' Contrôle la cohérence de la ligne destination passée en argument:
Ligne_Dest = TS_IndexLigne(TS_Dest, Ligne_Dest)
If Ligne_Dest = -1 Then Err.Raise vbObjectError, , TS_Err_Description
' Copie les données:
TS_Source.ListObject.ListColumns(Colonne_Source).DataBodyRange.SpecialCells(Méthode).Copy
' Colle les données (la feuille du tableau destination doit être activée pour coller des données):
Application.ScreenUpdating = False
Sheets(TS_Dest.Parent.Name).Visible = True
Sheets(TS_Dest.Parent.Name).Activate
Call TS_Sélectionner(TS_Dest, Colonne_Dest, Ligne_Dest)
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
' Renvoie Vrai:
TS_CopierUneColonne = True
' Fin du traitement:
Gest_Err:
' Restaure la configuration:
Sheets(TS_Dest.Parent.Name).Visible = Anc_Visible
Sheets(Anc_Feuille).Activate
Application.ScreenUpdating = Anc_Screen
If Err.Number = 1004 Then Err.Clear
TS_Err_Number = Err.Number
TS_Err_Description = Err.Description
If Err.Number <> 0 Then
If TS_Méthode_Err = TS_Générer_Erreur Then Err.Raise TS_Err_Number, "TS_CopierUneColonne", TS_Err_Description
If TS_Méthode_Err = TS_MsgBox_Erreur Then MsgBox TS_Err_Number & " : " & TS_Err_Description, vbInformation, "TS_CopierUneColonne"
End If
Err.Clear
End Function |
Partager