Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

10 réponses
Avatar
Fredo(67)
Bonjour,

Je souhaite r=E9cup=E9rer AVEC LIAISON, les valeurs d'une zone nomm=E9e
synth=E8se d'un classeur ferm=E9.

Pour l'instant j'utilise le GETEXTERNALDATA... pour r=E9cup=E9rer les
valeurs d'une zone nomm=E9e d'un fichier ferm=E9.

Voici la macro utilis=E9e :
Sub LitDatas()
Dim Fich$, Arr
Dim NomFichier
Application.Goto Reference:=3D"ZONE"
Selection.ClearContents
NomFichier =3D Application.GetOpenFilename
On Error Resume Next
Fich =3D NomFichier
'r=E9cup des donn=E9es =E0 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 =3D Arr
End With
End Sub

Cette macro r=E9cup=E8re les valeurs des cellules de la zone concern=E9e.

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

Merci

10 réponses

Avatar
LSteph
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)" wrote:
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


Avatar
LSteph
Re,
ce qui donnerait:

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

--
lSteph

On 9 oct, 14:36, "Fredo(67)" wrote:
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


Avatar
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 wrote:
Re,
ce qui donnerait:

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

--
lSteph

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



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


Avatar
JB
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)" wrote:
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 wrote:



> Re,
> ce qui donnerait:

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

> --
> lSteph

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

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


Avatar
LSteph
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)" wrote:
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 wrote:



> Re,
> ce qui donnerait:

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

> --
> lSteph

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

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


Avatar
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 wrote:
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)" wrote:



> 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 wrote:

> > Re,
> > ce qui donnerait:

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

> > --
> > lSteph

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

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


Avatar
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 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 wrote:
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 wrote:



> 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)" wrote:

> > 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 wrote:

> > > Re,
> > > ce qui donnerait:

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

> > > --
> > > lSteph

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

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


Avatar
JB
Il faut enlever cette ligne:

Range(ChampOuCopier) = Range(ChampOuCopier).Value

JB


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



> 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 wrote:

> > 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)" wrote:

> > > 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 wrote:

> > > > Re,
> > > > ce qui donnerait:

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

> > > > --
> > > > lSteph

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

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


Avatar
Fredo(67)
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...
Avatar
Fredo(67)
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.