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
|
Option Explicit
'exemple formule de base
'"=IF('C:\Users\polux\DeskTop\Nouveau Dossier\[source.xlsm]Feuil1'!A1<>"""",'C:\Users\polux\DeskTop\Nouveau Dossier\[source.xlsm]Feuil1'!A1,"""")"
Sub test()
Dim Cel As Range, formule$, chemin$, Pls As Range, feuille$, fichier$
chemin = Environ("userprofile") & "\DeskTop\Nouveau Dossier\"
ChDir chemin
'la source
Set Pls = Range("A1:D34") 'plage de la source
feuille = "Feuil1" ' feuille de la source
'fichier de la source par getopenfilename
fichier = Application.GetOpenFilename(FileFilter:="Excel Files ( *.xlsx;*.xls;*.xlsm), ( *.xlsx;*.xls;*.xlsm), All Files, *.*", FilterIndex:=1)
' si on annule pas le dialog
If fichier <> "" Then
fichier = Mid(fichier, InStrRev(fichier, "\") + 1) 'nom cout du fichier source pour la formule
'creation de la formule pour la premiere cellule
formule = "'" & chemin & "[" & fichier & "]" & feuille & "'!" & Pls.Cells(1).Address(0, 0)
formule = "=IF(" & formule & "<>""""," & formule & ","""")"
Debug.Print formule ' pour verif
'DESTINATION
With Sheets(1).Range("A1") 'feuille et 1ere cellule de destination( c'est pas obligé que se soit la même que la source )
'inscription de la formule dans la 1 ère cellule
.Formula = formule
'on étend la formule vers le bas au même nombre de ligne que la plage source
.AutoFill Destination:=.Resize(Pls.Rows.Count, 1), Type:=xlFillDefault
'on étend la formule vers la droite au même nombre de colonnes que la plage source
.Resize(Pls.Rows.Count, 1).AutoFill Destination:=.Resize(Pls.Rows.Count, Pls.Columns.Count), Type:=xlFillDefault
'on remplace les formules par les valeurs
.Resize(Pls.Rows.Count, Pls.Columns.Count).Value = .Resize(Pls.Rows.Count, Pls.Columns.Count).Value
End With
End If
End Sub |
Partager