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
| Sub CopierCollerDunClasseurDansLautre()
Dim Plage1 As Range
Dim Plage2 As Range
Dim CL1 As Workbook
Dim CL2 As Workbook
Dim Fl1 As Worksheet
Dim Fl2 As Worksheet
Dim Tableau, NoCol(), NoLig()
Dim LigDep1, ColDep1, LigDep2, ColDep2, i
Dim Cel As Range
Set CL1 = Workbooks("Classeur1")
Set CL2 = Workbooks("Classeur2") 'Tu remplaces par la ligne suivante
'Set CL2 = Workbooks.Open("D:\xls\TonFichier.xls")
DoEvents
Set Fl1 = CL1.Worksheets("Feuil1")
Set Fl2 = CL2.Worksheets("Feuil2")
Fl1.Activate
Set Plage1 = Fl1.Application.InputBox(Prompt:="Selectionnez la plage ", Type:=8)
'Pour récupérer les NoLigne et colonne de début de plage, on crée un tableau
'qui sépare les adresses de début et de fin de plage
'(ex : "$B$12:$N$25" -> "$B$12")
Tableau = Split(Plage1.Address, ":")
LigDep1 = Range(Tableau(0)).Row 'ligne de départ de la plage ds Fl1
ColDep1 = Range(Tableau(0)).Column 'Column de départ de la plage
'Création des tableaux des adresses de la plage sélectionnée dans Fl1
'Pour relever les adresses des cellules de Fl1, on s'affranchit de
'la colonne et de la ligne de départ
i = 0
For Each Cel In Plage1
ReDim Preserve NoCol(i)
NoCol(i) = Cel.Column - ColDep1 'Tableau des colonnes dans Fl1
ReDim Preserve NoLig(i)
NoLig(i) = Cel.Row - LigDep1 'Tableau des lignes
i = i + 1
Next
Fl2.Activate
Do 'on vérifie qu'une seule cellule a été sélectionnée
Set Plage2 = Application.InputBox(Prompt:="Selectionnez la plage ", Type:=8)
If InStr(Plage2.Address, ":") > 0 Then msgox "Ne sélectionner qu'une cellule"
Loop While InStr(Plage2.Address, ":") = 0
'Dans Fl2, CL2, on récupère les No de colonne et de ligne de début de plage
LigDep2 = Plage2.Row 'Ligne de départ ds Fl2
ColDep2 = Plage2.Column 'Colonne de départ
'Collage des données : pour copier, on lit chaque cellule de Plage1
'Pour coller, on part d'une cellule Plage2.address
i = 0
For Each Cel In Plage1
Fl2.Cells(NoCol(i) + LigDep2, NoLig(i) + ColDep2).FormulaLocal = "='[" & CL1.Name & "]" & Fl1.Name & "'!" & Cel.Address
i = i + 1
Next
End Sub |
Partager