Je souhaite récupérer AVEC LIAISON, les valeurs d'une zone nommée
synthèse d'un classeur fermé.
Pour l'instant j'utilise le GETEXTERNALDATA... pour récupérer les
valeurs d'une zone nommée d'un fichier fermé.
Voici la macro utilisée :
Sub LitDatas()
Dim Fich$, Arr
Dim NomFichier
Application.Goto Reference:="ZONE"
Selection.ClearContents
NomFichier = Application.GetOpenFilename
On Error Resume Next
Fich = NomFichier
'récup des données à partir de l'adresse d'une plage de cellules
GetExternalData Fich, "", "synthese", False, Arr
With ThisWorkbook.Sheets("report")
.Range("A1", .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Arr
End With
End Sub
Cette macro récupère les valeurs des cellules de la zone concernée.
Comment la modifier pour qu'elle me fasse une copie avec liaison de
ladite zone ?
Merci
on peut le faire sans macro sur une plage de même dimension:
='c:\monrep\[monclass.xls]mafeuil'!laplage
shift+ctrl+entrée
(tu peux faire aussi cela via VBA)
--
lSteph
Range("B3:F9").FormulaArray = _
"='c:\monrep\sousrep\[classeur.xls]fiche'!B3:F9"
--
lSteph
On 9 oct, 14:36, "Fredo(67)" <frederic.s...@socara.net> wrote:
Toutefois,
Le ["='c:\monrep\sousrep\[classeur.xls]fiche'!B3:F9"] suppose que l'on
connaisse l'adresse exacte de l'emplacement du fichier.
pourrait on adapter cela avec le Application.GetOpenFilename que
j'aime beaucoup ?
> > Merci- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -
Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).FormulaArray = "='" & Chemin & "\[" & Fichier
& "]" & onglet & "'!" & ChampAlire
End Sub
JB
http://boisgontierjacques.free.fr/
> > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
Cordialement.
--
lSteph
On 9 oct, 15:03, "Fredo(67)" <frederic.s...@socara.net> wrote:
> > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).FormulaArray = "='" & Chemin & "\[" & Fichier &
"]" & onglet & "'!" & ChampAlire
Range(ChampOuCopier) = Range(ChampOuCopier).Value
End Sub
JB
On 9 oct, 15:31, JB <boisgont...@hotmail.com> wrote:
> Bonjour,
>
> Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
> Range(ChampOuCopier).FormulaArray = "='" & Chemin & "\[" & Fichier
> & "]" & onglet & "'!" & ChampAlire
> End Sub
>
> JBhttp://boisgontierjacques.free.fr/
j'ai récupéré et adapté, cela marche mais
je ne récupère que les valeurs, hors il m'est indispensable de pouvoir
récupérer la liaison, afin d'avoir un suvi des valeurs en cas de mise
à jour du tableau d'origine.
je pense que c'est là qu'il faut adapter.... -> Range(ChampOuCopier) =
Range(ChampOuCopier).Value
Fred
Range(ChampOuCopier) = Range(ChampOuCopier).Value
JB
Ensuite, j'ai essayé en enlevant la partie du code indiquée.
j'ai 2 résultats,
- Tout d'abord excel plante
- Mais avant de planter, j'ai pu voir le résultat, et le soucis est
que tout apparait à l'intérieur d'une base de donnée...
En fait, il faut que je puisse retravailler les cellules à l'intérieur
de la zone, par après.
Imaginons plutôt la procédure suivante :
j'ai un classeur de base (qui est un nouveau classeur pas encore
enregistré)
en cliquant sur un bouton, une fenêtre s'ouvre me demandant de
sélectionner un classeur par exemple abc.xls.
les données de la zone "synthese" sont copiées puis collées avec
liaison
le classeur abc.xls est fermé.
la macro s'arrête.
Voilà ce que j'ai déjà pondu... ->
Sub ReCuPSyNtHeSe()
NomFichier = Application.GetOpenFilename
On Error Resume Next
Workbooks.Open NomFichier
range("synthese").select
selection.copy
xxxxxx
yyyyyy
workbooks.Close NomFichier
end sub()
Bon en fait ça ne marche pas pour plusieurs raisons :
en xxxx je ne sais pas retouner dans mon fichier de base, vu qu'il n'a
pas de nom.
Je pense qu'il faudrait associer à une variable le nom du classeur qui
lance la procédure, puis demander à réactiver ce classeur
en yyyy je ne sais pas comment fermer le fichier abc.xls...
voilà où j'en suis...
Sub ReCuPSyNtHeSe()
'Stockage du nom du fichier laçant la macro de base
Dim NomFichierSuivi
NomFichierSuivi = ActiveWorkbook.Name
Dim NomFichierRépart
Dim NomFichier
' Ouverture du fichier désiré
NomFichier = Application.GetOpenFilename
On Error Resume Next
Workbooks.Open NomFichier
' Récupération de son nom
NomFichierRépart = ActiveWorkbook.Name
'Selection de la zone et copie
Range("synthese").Select
Selection.Copy
' Réactivation du fichier de base
Workbooks(NomFichierSuivi).Activate
Range("A1").Select
' Collage avec liaison
ActiveSheet.Paste Link:=True
' Réactivation du fichier désiré
Workbooks(NomFichierRépart).Activate
' Fermeture
ActiveWorkbook.Close
End Sub
Je ne pense pas que ce soit optimisé, mais ca a l'air de fonctionner.