Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Récupérer les valeurs d'une zone d'un classeur fermé

691 views
Skip to first unread message

Fredo(67)

unread,
Oct 9, 2009, 8:36:26 AM10/9/09
to
Bonjour,

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

LSteph

unread,
Oct 9, 2009, 8:52:20 AM10/9/09
to

Bonjour,

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

LSteph

unread,
Oct 9, 2009, 8:58:08 AM10/9/09
to
Re,
ce qui donnerait:

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:

Fredo(67)

unread,
Oct 9, 2009, 9:03:17 AM10/9/09
to
Merci pour vos réponses.

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 -

JB

unread,
Oct 9, 2009, 9:31:49 AM10/9/09
to
Bonjour,

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 -

LSteph

unread,
Oct 9, 2009, 9:34:50 AM10/9/09
to
Oui, je donnais juste la façon d'inserer la formule matricielle qui
recupere les valeurs sans avoir à ouvrir le fichier
En outre, (si tu es certain que le choix se portera sur un classeur ou
la plage nommée existe)
rien ne t'empêche de creer
1 une variable string pour le nom de plage (utioliser l'adresse donc
dans la feuille qui recoit et pour composition de la formule
2.un getopenfilename pour la selection du fichiertu cree ta variable
et fais ton getopenfilename comme tu avais prevu


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 -

JB

unread,
Oct 9, 2009, 9:40:03 AM10/9/09
to

Sub LitClasseurFermé()
ChampOuCopier = "A1:B4"
Chemin = ThisWorkbook.Path
Fichier = "BDSource.XLS"
onglet = "Feuil1"
ChampAlire = "A1:B3" ' ou "MaBD"
LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire
End Sub

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/

Fredo(67)

unread,
Oct 9, 2009, 10:26:49 AM10/9/09
to
Salut

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

JB

unread,
Oct 9, 2009, 12:31:54 PM10/9/09
to
Il faut enlever cette ligne:

Range(ChampOuCopier) = Range(ChampOuCopier).Value

JB

Fredo(67)

unread,
Oct 12, 2009, 3:21:07 AM10/12/09
to
Bonjour,
tout d'abord, merci de m'aider.

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...


Fredo(67)

unread,
Oct 12, 2009, 3:55:57 AM10/12/09
to
J'ai retravaillé la chose :

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.

0 new messages