Créer une liaison entre deux classeurs excel
Résolu
plastickman
Messages postés
66
Statut
Membre
-
plastickman Messages postés 66 Statut Membre -
plastickman Messages postés 66 Statut Membre -
Bonjour à tous,
Au travail, j'utilise un classeur excel par client avec toutes les informations qui lui sont dédiées.
J'en ai créé un nouveau appelé "résultat" que je place dans le même dossier que les tous les autres qui me sert à synthétiser les principales informations de chaque classeur (client). Pour récupérer les infos dans les cellules qui m'intéressent j'utilise le code suivant:
Ce dernier marche très bien, mais il m'oblige à le relancer dès que j'ai effectué une modification dans un classeur. Je souhaiterais remplacer les valeurs importer dans "résultat" par un lien vers la cellule d'origine, de façon à ce qu'elle soit automatiquement modifiée à l'ouverture suivante lorsque il y à lieu. Je ne sais pas par quoi remplacer le ".value" de la ligne:
pour que ça fonctionne.
Merci encore une fois pour votre aide,
jp
Au travail, j'utilise un classeur excel par client avec toutes les informations qui lui sont dédiées.
J'en ai créé un nouveau appelé "résultat" que je place dans le même dossier que les tous les autres qui me sert à synthétiser les principales informations de chaque classeur (client). Pour récupérer les infos dans les cellules qui m'intéressent j'utilise le code suivant:
Sub ExtractRefresh()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Nbr As Long
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
.LookIn = ActiveWorkbook.Path
.SearchSubFolders = True
.Filename = xls
.MatchTextExactly = True
Nbr = .Execute
For Each NomFic In .FoundFiles
If Right(NomFic, 13) = "resultats.xls" Then GoTo suite
Workbooks.Open Filename:=NomFic
With Workbooks("resultats.xls").Sheets("diagnostics")
.Range("D65536").End(xlUp).Offset(1, 0).Value = ActiveWorkbook.Sheets("Renseignements").Range("D17").Value
End With
ActiveWorkbook.Save
ActiveWorkbook.Close
suite:
Next
End With
End Sub
Ce dernier marche très bien, mais il m'oblige à le relancer dès que j'ai effectué une modification dans un classeur. Je souhaiterais remplacer les valeurs importer dans "résultat" par un lien vers la cellule d'origine, de façon à ce qu'elle soit automatiquement modifiée à l'ouverture suivante lorsque il y à lieu. Je ne sais pas par quoi remplacer le ".value" de la ligne:
ActiveWorkbook.Sheets("Renseignements").Range("D17").Value
pour que ça fonctionne.
Merci encore une fois pour votre aide,
jp
A voir également:
- Liaison entre classeur excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Nombre de jours entre deux dates excel - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
8 réponses
Je ne sais pas comment te remercier.
Tout marche parfaitement bien et en plus j'ai appris un paquet de chose.
J'ai un super outil maintenant!!!
Encore merci,
jp
Tout marche parfaitement bien et en plus j'ai appris un paquet de chose.
J'ai un super outil maintenant!!!
Encore merci,
jp
Bonjour,
essaie avec :
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "='D:\ton chemin\[ton fichier]Renseignements'!$A$1"
eric
essaie avec :
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "='D:\ton chemin\[ton fichier]Renseignements'!$A$1"
eric
Bonjour,
Ce code fonctionne bien mais le problème est qu'il me demande de préciser manuellement chaque nom de fichier (j'en ai environ 700...). J'ai essayé la ligne suivante, mais ça ne marche pas:
Qu'en penses-tu?
Ce code fonctionne bien mais le problème est qu'il me demande de préciser manuellement chaque nom de fichier (j'en ai environ 700...). J'ai essayé la ligne suivante, mais ça ne marche pas:
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "=' C:\Documents and Settings\jp\Bureau\EXERCICE 2012\test" & ActiveWorkbook.Name & " \Renseignements'!A1"
Qu'en penses-tu?
Bonjour,
Avec ton nom de fichier xxx.xls dans une variable fich par exemple ça serait :
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "='D:\ton chemin\[" & fich & "]Renseignements'!$A$1"
eric
Avec ton nom de fichier xxx.xls dans une variable fich par exemple ça serait :
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "='D:\ton chemin\[" & fich & "]Renseignements'!$A$1"
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai utilisé la variable "NomFic" et ça ne marche toujours pas.
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "='D:\ton chemin\[" & NomFic & "]Renseignements'!$A$1"
C'est vrai que je n'ai pas été très clair...
Voilà la formule dans la première cellule de la colonne A, "111103" étant le nom d'un fichier (client):
J'en déduit que ma variable "NomFic" intègre déjà le chemin (ce que je ne comprends pas...) et je n'explique pas pourquoi on retrouve également [Renseignements] avant "Renseignements A1.
Voilà la formule dans la première cellule de la colonne A, "111103" étant le nom d'un fichier (client):
=' C:\Documents and Settings\jp\Bureau\EXERCICE 2012\test\[C:\Documents and Settings\jp\Bureau\EXERCICE 2012\test\111103\111103.xls] \[Renseignements]Renseignements'!A1
J'en déduit que ma variable "NomFic" intègre déjà le chemin (ce que je ne comprends pas...) et je n'explique pas pourquoi on retrouve également [Renseignements] avant "Renseignements A1.
Bon, je crois que ce n'est pas gagné...
J'ai rajouté en tête:
en suite, comme le nom de mes fichiers ne fait pas toujours le nombre de caractères j'ai mis:
J'obtiens dans ma cellule:
Ce qui me semble bon, et pourtant, ça ne trouve pas la valeur de cellule concernée, et pire, si je sauvegarde, le chemin indiqué dans ma cellule est écrit deux fois lorsque j'ouvre à nouveau mon classeur, ce qui donne:
J'ai rajouté en tête:
Dim Fich As Variant
en suite, comme le nom de mes fichiers ne fait pas toujours le nombre de caractères j'ai mis:
Fich = ActiveWorkbook.Name
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "=' C:\Documents and Settings\jp\Bureau\EXERCICE 2012\test\[" & Fich & " ]Renseignements'!A1"
J'obtiens dans ma cellule:
='C:\Documents and Settings\jp\Bureau\EXERCICE 2012\test\[111103 nom du client.xls]Renseignements'!A1
Ce qui me semble bon, et pourtant, ça ne trouve pas la valeur de cellule concernée, et pire, si je sauvegarde, le chemin indiqué dans ma cellule est écrit deux fois lorsque j'ouvre à nouveau mon classeur, ce qui donne:
='C:\Documents and Settings\jp\Bureau\EXERCICE 2012\test\ C:\Documents and Settings\jp\Bureau\EXERCICE 2012\test\[111103 nom du client.xls ]Renseignements'!A1
Bonjour,
Fabrique tes formules avec les fichiers concernés fermés, ça devrait le faire.
J'ai cru lire qcq part que tu en avais 200, tu ne vas peut-être pas tous les ouvrir...
Si le fichier est ouvert la partie chemin est masquée par excel et rajoutée à sa fermeture. Dans ce cas la formule est : =[Classeur1]Feuil1!$A$1
Fabrique tes formules avec les fichiers concernés fermés, ça devrait le faire.
J'ai cru lire qcq part que tu en avais 200, tu ne vas peut-être pas tous les ouvrir...
Si le fichier est ouvert la partie chemin est masquée par excel et rajoutée à sa fermeture. Dans ce cas la formule est : =[Classeur1]Feuil1!$A$1
Bonjour,
J'ai bien cru que c'était bon, mais c'était trop beau...
J'ai fait comme tu m'as dit:
J'ai conservé en tête de code:
En suite, j'ai transformé ma ligne:
Le problème étant qu'il ne trouve pas à quoi correspond ma variable "Fich", il me demande à nouveau via une fenêtre le fichier correspondant.
La bonne nouvelle est que lorsque je lui montre le classeur que je veux, la liaison se fait bien. Ce qui est surprenant, c'est que dans ma cellule je retrouve:
Je m'attendais à retrouver:
Je ne vois pas comment éviter la variable "Fich", le but de la routine étant d'ouvrir mes 700 fichiers et les répertorier les uns en dessous des autres comme base de donnée.
J'ai bien cru que c'était bon, mais c'était trop beau...
J'ai fait comme tu m'as dit:
J'ai conservé en tête de code:
Dim Fich As Variant
En suite, j'ai transformé ma ligne:
Fich = ActiveWorkbook.Name
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "=[Fich]Renseignements!A1"
Le problème étant qu'il ne trouve pas à quoi correspond ma variable "Fich", il me demande à nouveau via une fenêtre le fichier correspondant.
La bonne nouvelle est que lorsque je lui montre le classeur que je veux, la liaison se fait bien. Ce qui est surprenant, c'est que dans ma cellule je retrouve:
=[Fich]Renseignements!A1
Je m'attendais à retrouver:
=[nom du classeur choisi]Renseignements!A1
Je ne vois pas comment éviter la variable "Fich", le but de la routine étant d'ouvrir mes 700 fichiers et les répertorier les uns en dessous des autres comme base de donnée.
Bonjour,
Ta formule doit être une chaine de charactère.
Quand tu insères une variable il faut fermer ton début de chaine avec : "
insérer ta variable avec : & nom_de_variable &
ouvrir le début de la chaine finale avec "
donc :
Fich = ActiveWorkbook.Name
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "=[" & Fich & "]Renseignements!A1"
et évite d'utiliser as variant, type tes variables :
Dim Fich As String
D'une part c'est plus rapide, d'autre part ça peut te faire ressortir des erreurs
eric
Ta formule doit être une chaine de charactère.
Quand tu insères une variable il faut fermer ton début de chaine avec : "
insérer ta variable avec : & nom_de_variable &
ouvrir le début de la chaine finale avec "
donc :
Fich = ActiveWorkbook.Name
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "=[" & Fich & "]Renseignements!A1"
et évite d'utiliser as variant, type tes variables :
Dim Fich As String
D'une part c'est plus rapide, d'autre part ça peut te faire ressortir des erreurs
eric
PS2 :
Je vois que tu rames pas mal dans la manipulation des chaines et ça fait déjà 4 jours qu'on est dessus...
Sur la base de ton code du début essaie avec :
C'est ça que tu voulais ?
eric
Je vois que tu rames pas mal dans la manipulation des chaines et ça fait déjà 4 jours qu'on est dessus...
Sur la base de ton code du début essaie avec :
Sub ExtractRefresh()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Nbr As Long, p As Long
Dim path As String, fich As String
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
.LookIn = ActiveWorkbook.path
.SearchSubFolders = True
.Filename = "xls"
.MatchTextExactly = True
Nbr = .Execute
For Each NomFic In .FoundFiles
If Right(NomFic, 13) = "resultats.xls" Then GoTo suite
'recherche position du dernier \
p = InStrRev(NomFic, "\")
' extraction du path et du nom de fichier
path = Left(NomFic, p)
fich = Mid(NomFic, p + 1, 50)
With Workbooks("resultats.xls").Sheets("diagnostics")
.Range("D65536").End(xlUp).Offset(1, 0).Formula = "='" & path & "[" & fich & "]Renseignements'!$A$1"
End With
suite:
Next
End With
End Sub
C'est ça que tu voulais ?
eric