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
|
Sub CopyColumns()
' Copie des colonnes 2 à nombre de colonnes de la plage "Source"
' vers les colonnes de la plage "Cible" (la colonne de départ est définie par ColumnOffset
' si les références contenues en colonne A des plages "Source" et "Cible" sont présentes
' Déclaration variables et constantes + attribution des valeurs aux variables
' ColumnOffset = Colonne cible (déplacement par rapport à la plage cible)
' Exemple :
' si l'on veut copier les données à partir de la colonne L et la plage est A1:J500
' ColumnOffset = 2
Const ColumnOffset As Integer = 7 ' Colonne cible (déplacement par rapport à la plage cible)
Dim rngSource As Range, rngTarget As Range
Dim myFormula As String
myFormula = "=IFERROR(INDEX(<dbSource>,MATCH($A2,<dbSourceKey>,0),COLUMN(<dbTargetColumnStartM>)-COLUMN(<dbTargetColumnStart>)+2),"""")"
Set rngTarget = ThisWorkbook.Worksheets("Feuil2").Range("A2").CurrentRegion
Set rngSource = Workbooks("Encours-CTI.xls").Worksheets("Feuil3").Range("A2").CurrentRegion
With rngSource: Set rngSource = .Offset(1).Resize(.Rows.Count - 1): End With
With rngTarget: Set rngTarget = .Offset(1).Resize(.Rows.Count - 1): End With
' Modification de la formule avec les addresses de rngTarget
myFormula = Replace(myFormula, "<dbSource>", rngSource.Address(external:=True))
myFormula = Replace(myFormula, "<dbSourceKey>", rngSource.Columns(1).Address(external:=True))
myFormula = Replace(myFormula, "<dbTargetColumnStart>", Cells(1, rngTarget.Columns.Count + ColumnOffset).Address)
myFormula = Replace(myFormula, "<dbTargetColumnStartM>", Cells(1, rngTarget.Columns.Count + ColumnOffset).Address(columnabsolute:=False))
' Copie de la formule dans plage cible (rngTarget)
With rngTarget
With .Offset(ColumnOffset:=.Columns.Count + ColumnOffset - 1).Resize(columnsize:=rngSource.Columns.Count - 1)
.Formula = myFormula
.Value = .Value ' Transforme les formules en valeur
End With
End With
'
Set rngSource = Nothing: Set rngTarget = Nothing
End Sub |
Partager