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

Le
Fredo(67)
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LSteph
Le #20321371
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


On 9 oct, 14:36, "Fredo(67)"
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 cellule s
  GetExternalData Fich, "", "synthese", False, Arr
  With ThisWorkbook.Sheets("report")
    .Range("A1", .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Ar r
  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
Le #20321361
Re,
ce qui donnerait:

Range("B3:F9").FormulaArray = _
"='c:monrepsousrep[classeur.xls]fiche'!B3:F9"

--
lSteph

On 9 oct, 14:36, "Fredo(67)"
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 cellule s
  GetExternalData Fich, "", "synthese", False, Arr
  With ThisWorkbook.Sheets("report")
    .Range("A1", .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Ar r
  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


Fredo(67)
Le #20321351
Merci pour vos réponses.

Toutefois,
Le ["='c:monrepsousrep[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 ?



On 9 oct, 14:58, LSteph
Re,
ce qui donnerait:

Range("B3:F9").FormulaArray = _
        "='c:monrepsousrep[classeur.xls]fiche'!B3:F9"

--
lSteph

On 9 oct, 14:36, "Fredo(67)"


> 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 cellu les
>   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- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


JB
Le #20321541
Bonjour,

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
Range(ChampOuCopier).FormulaArray = "='" & Chemin & "[" & Fichier
& "]" & onglet & "'!" & ChampAlire
End Sub

JB
http://boisgontierjacques.free.fr/



On 9 oct, 15:03, "Fredo(67)"
Merci pour vos réponses.

Toutefois,
Le ["='c:monrepsousrep[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 ?

On 9 oct, 14:58, LSteph


> Re,
> ce qui donnerait:

> Range("B3:F9").FormulaArray = _
>         "='c:monrepsousrep[classeur.xls]fiche'!B3:F9"

> --
> lSteph

> On 9 oct, 14:36, "Fredo(67)"
> > 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 cel lules
> >   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- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


LSteph
Le #20321531
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)"
Merci pour vos réponses.

Toutefois,
Le ["='c:monrepsousrep[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 ?

On 9 oct, 14:58, LSteph


> Re,
> ce qui donnerait:

> Range("B3:F9").FormulaArray = _
>         "='c:monrepsousrep[classeur.xls]fiche'!B3:F9"

> --
> lSteph

> On 9 oct, 14:36, "Fredo(67)"
> > 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 cel lules
> >   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- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


JB
Le #20321641
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
Bonjour,

Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
   Range(ChampOuCopier).FormulaArray = "='" & Chemin & "[" & Fic hier
& "]" & onglet & "'!" & ChampAlire
End Sub

JBhttp://boisgontierjacques.free.fr/

On 9 oct, 15:03, "Fredo(67)"


> Merci pour vos réponses.

> Toutefois,
> Le ["='c:monrepsousrep[classeur.xls]fiche'!B3:F9"] suppose que l'o n
> connaisse l'adresse exacte de l'emplacement du fichier.
> pourrait on adapter cela avec le Application.GetOpenFilename que
> j'aime beaucoup ?

> On 9 oct, 14:58, LSteph
> > Re,
> > ce qui donnerait:

> > Range("B3:F9").FormulaArray = _
> >         "='c:monrepsousrep[classeur.xls]fiche'!B3:F9"

> > --
> > lSteph

> > On 9 oct, 14:36, "Fredo(67)"
> > > 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 l es
> > > 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 c ellules
> > >   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 concer née.

> > > Comment la modifier pour qu'elle me fasse une copie avec liaison de
> > > ladite zone ?

> > > Merci- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Fredo(67)
Le #20322151
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


On 9 oct, 15:40, JB
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


> Bonjour,

> Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
>    Range(ChampOuCopier).FormulaArray = "='" & Chemin & "[" & F ichier
> & "]" & onglet & "'!" & ChampAlire
> End Sub

> JBhttp://boisgontierjacques.free.fr/

> On 9 oct, 15:03, "Fredo(67)"
> > Merci pour vos réponses.

> > Toutefois,
> > Le ["='c:monrepsousrep[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 ?

> > On 9 oct, 14:58, LSteph
> > > Re,
> > > ce qui donnerait:

> > > Range("B3:F9").FormulaArray = _
> > >         "='c:monrepsousrep[classeur.xls]fiche'!B3:F9"

> > > --
> > > lSteph

> > > On 9 oct, 14:36, "Fredo(67)"
> > > > Bonjour,

> > > > Je souhaite récupérer AVEC LIAISON, les valeurs d'une zone no mmé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))).Valu e = Arr
> > > >   End With
> > > > End Sub

> > > > Cette macro récupère les valeurs des cellules de la zone conc ernée.

> > > > Comment la modifier pour qu'elle me fasse une copie avec liaison de
> > > > ladite zone ?

> > > > Merci- Masquer le texte des messages précédents -

> > > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


JB
Le #20322931
Il faut enlever cette ligne:

Range(ChampOuCopier) = Range(ChampOuCopier).Value

JB


On 9 oct, 16:26, "Fredo(67)"
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 pouvoi r
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

On 9 oct, 15:40, JB


> 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
> > Bonjour,

> > Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire)
> >    Range(ChampOuCopier).FormulaArray = "='" & Chemin & "[" & Fichier
> > & "]" & onglet & "'!" & ChampAlire
> > End Sub

> > JBhttp://boisgontierjacques.free.fr/

> > On 9 oct, 15:03, "Fredo(67)"
> > > Merci pour vos réponses.

> > > Toutefois,
> > > Le ["='c:monrepsousrep[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 ?

> > > On 9 oct, 14:58, LSteph
> > > > Re,
> > > > ce qui donnerait:

> > > > Range("B3:F9").FormulaArray = _
> > > >         "='c:monrepsousrep[classeur.xls]fiche'!B3:F9 "

> > > > --
> > > > lSteph

> > > > On 9 oct, 14:36, "Fredo(67)"
> > > > > 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ér er 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))).Va lue = Arr
> > > > >   End With
> > > > > End Sub

> > > > > Cette macro récupère les valeurs des cellules de la zone co ncernée.

> > > > > Comment la modifier pour qu'elle me fasse une copie avec liaiso n de
> > > > > ladite zone ?

> > > > > Merci- Masquer le texte des messages précédents -

> > > > - Afficher le texte des messages précédents -- Masquer le tex te des messages précédents -

> > > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Fredo(67)
Le #20336181
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)
Le #20336371
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.
Publicité
Poster une réponse
Anonyme