LIAISON EXCEL
Fermé
cocagrenadine
-
4 févr. 2009 à 09:40
m@rina Messages postés 21241 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 9 janvier 2025 - 4 févr. 2009 à 18:39
m@rina Messages postés 21241 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 9 janvier 2025 - 4 févr. 2009 à 18:39
A voir également:
- LIAISON EXCEL
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
8 réponses
jimmax01
Messages postés
32
Date d'inscription
dimanche 1 février 2009
Statut
Membre
Dernière intervention
14 mai 2009
4
4 févr. 2009 à 09:49
4 févr. 2009 à 09:49
tu as quel supprimer la liaison http://www.commentcamarche.net/forum/affich 2086645 excel comment supprimer une liaison
Mabelle60
Messages postés
468
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
130
4 févr. 2009 à 10:40
4 févr. 2009 à 10:40
Salut
J'ai trouvé ç sur 'Excelabo', mais n'ai jamais eu à le tester. JE ne sais pas non plus si ça répondra entièrement à ta question.
Liaison vers un classeur fermé
Pourquoi ne peut-on pas utiliser INDIRECT pour établir une liaison vers un classeur fermé?
=INDIRECT("'C:\Mes Documents\[truc.xls]Feuil1'!$A$1") marche très bien quand truc est ouvert, mais renvoie #REF! dès que truc.xls est fermé alors que ='C:\Mes Documents\[truc.xls]Feuil1'!$A$1 marche très bien même si truc est fermé
En gros : quand le classeur est en mode recalcul, Excel n'effectue aucune opération susceptible d'interférer avec les calculs en cours. En l'occurence, aller chercher le contenu d'un classeur fermé supposerait qu'il établisse d'abord une liaison temporaire, lise la cellule, et détruise ensuite cette liaison. Comme ce type d'action est verrouillé en mode recalcul, INDIRECT échoue.
C'est pour la même raison qu'il est impossible, par exemple, d'ouvrir un nouveau classeur ou de modifier le contenu d'une plage à l'intérieur d'une Function appelée par une formule de cellule.
Une parade toutefois, à l'aide de VBA :
Function RECUP(Fichier As String, Feuille As String, _
Ligne As Long, Col As Integer)
With CreateObject("Excel.Application").Workbooks.Open(Fichier)
RECUP = .Worksheets(Feuille).Cells(Ligne, Col)
.Close False
End With
End Function
Ensuite, par exemple =RECUP("C:\Test.xls";"Feuil1";5;10) pour récupérer la cellule Feuil1!J5 de ce classeur fermé (note qu'il est quand-même temporairement ouvert par la fonction...)
Ca marche pour la seule raison que la fonction lit le contenu du classeur fermé par l'intermédiaire d'une nouvelle instance d'Excel.
Celle-ci étant indépendante de la session active, le "verrouillage" n'a plus lieu.
Attention, chaque appel de RECUP lançant une nouvelle instance d'Excel, cette fonction n'est pas très rapide à l'exécution... à utiliser donc avec modération!
J'ai trouvé ç sur 'Excelabo', mais n'ai jamais eu à le tester. JE ne sais pas non plus si ça répondra entièrement à ta question.
Liaison vers un classeur fermé
Pourquoi ne peut-on pas utiliser INDIRECT pour établir une liaison vers un classeur fermé?
=INDIRECT("'C:\Mes Documents\[truc.xls]Feuil1'!$A$1") marche très bien quand truc est ouvert, mais renvoie #REF! dès que truc.xls est fermé alors que ='C:\Mes Documents\[truc.xls]Feuil1'!$A$1 marche très bien même si truc est fermé
En gros : quand le classeur est en mode recalcul, Excel n'effectue aucune opération susceptible d'interférer avec les calculs en cours. En l'occurence, aller chercher le contenu d'un classeur fermé supposerait qu'il établisse d'abord une liaison temporaire, lise la cellule, et détruise ensuite cette liaison. Comme ce type d'action est verrouillé en mode recalcul, INDIRECT échoue.
C'est pour la même raison qu'il est impossible, par exemple, d'ouvrir un nouveau classeur ou de modifier le contenu d'une plage à l'intérieur d'une Function appelée par une formule de cellule.
Une parade toutefois, à l'aide de VBA :
Function RECUP(Fichier As String, Feuille As String, _
Ligne As Long, Col As Integer)
With CreateObject("Excel.Application").Workbooks.Open(Fichier)
RECUP = .Worksheets(Feuille).Cells(Ligne, Col)
.Close False
End With
End Function
Ensuite, par exemple =RECUP("C:\Test.xls";"Feuil1";5;10) pour récupérer la cellule Feuil1!J5 de ce classeur fermé (note qu'il est quand-même temporairement ouvert par la fonction...)
Ca marche pour la seule raison que la fonction lit le contenu du classeur fermé par l'intermédiaire d'une nouvelle instance d'Excel.
Celle-ci étant indépendante de la session active, le "verrouillage" n'a plus lieu.
Attention, chaque appel de RECUP lançant une nouvelle instance d'Excel, cette fonction n'est pas très rapide à l'exécution... à utiliser donc avec modération!
Bonjour,
apparemment tu te débrouille pas mal en excel tu pourrais m'aider STP.
jais un petit problème ca doit etre simple mais je trouve pas la solution...
jais 10.000 noms dans la colonne A et 12000 noms dans la colonne B
je voudrai faire une formule dans la colonne C , si un nom de la colonne B ce trouve dans la colone A
on le confirme par un ok sur la colonne C sur la meme ligne ou se trouve le nom repeter dans la colonne B
j arive a faire la recherche mais un par un et c'es pas amusant, aussi quand je tire la formule sur toutes la colonne C sa decale la recherche...
merci pour vos solutions
apparemment tu te débrouille pas mal en excel tu pourrais m'aider STP.
jais un petit problème ca doit etre simple mais je trouve pas la solution...
jais 10.000 noms dans la colonne A et 12000 noms dans la colonne B
je voudrai faire une formule dans la colonne C , si un nom de la colonne B ce trouve dans la colone A
on le confirme par un ok sur la colonne C sur la meme ligne ou se trouve le nom repeter dans la colonne B
j arive a faire la recherche mais un par un et c'es pas amusant, aussi quand je tire la formule sur toutes la colonne C sa decale la recherche...
merci pour vos solutions
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
4 févr. 2009 à 11:52
4 févr. 2009 à 11:52
Bonjour,
En principe, il n'y a besoin de rien du tout, juste à préciser que la mise à jour des liens est automatique... Le classeur n'a pas besoin d'être ouvert.
Menu Edition, Liaison = Mise à jour automatique.
L'article dans Excelabo parle de la fonction INDIRECT ! A priori ce n'est pas ton problème !!
Peux tu nous dire comment tu as fait tes liaison ?
Est ce simplement une formule de type ='[monfichier.xls]Feuil1'!$A$1 ??
m@rina
En principe, il n'y a besoin de rien du tout, juste à préciser que la mise à jour des liens est automatique... Le classeur n'a pas besoin d'être ouvert.
Menu Edition, Liaison = Mise à jour automatique.
L'article dans Excelabo parle de la fonction INDIRECT ! A priori ce n'est pas ton problème !!
Peux tu nous dire comment tu as fait tes liaison ?
Est ce simplement une formule de type ='[monfichier.xls]Feuil1'!$A$1 ??
m@rina
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
4 févr. 2009 à 13:23
4 févr. 2009 à 13:23
Bonjour,
Ah oui, effectivement avec ce type de fonction, les liens ne se mettent à jour que si le classeur est ouvert.
Tu pourrais faire une macro qui ouvre le classeur d'origine à l'ouverture du classeur qui contient les formules.
Sinon, au lieu de mettre un NB.SI, essaie d'utiliser le SOMMEPRODD :
=SOMMEPROD(('F:\CREANCES\[Créances 2008.xls]Octobre'!$F$7:$F$32=$A83)*1)
m@rina
Ah oui, effectivement avec ce type de fonction, les liens ne se mettent à jour que si le classeur est ouvert.
Tu pourrais faire une macro qui ouvre le classeur d'origine à l'ouverture du classeur qui contient les formules.
Sinon, au lieu de mettre un NB.SI, essaie d'utiliser le SOMMEPRODD :
=SOMMEPROD(('F:\CREANCES\[Créances 2008.xls]Octobre'!$F$7:$F$32=$A83)*1)
m@rina
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
4 févr. 2009 à 15:54
4 févr. 2009 à 15:54
Je viens pourtant de tester et la formule avec SOMMEPROD fonctionne tout à fait bien avec le classeur d'origine fermé.
m@rina
m@rina
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
4 févr. 2009 à 16:14
4 févr. 2009 à 16:14
Non, il manque des parenthèses :
=SOMMEPROD(('F:\Maladie Angers\CREANCES\Au fil de l''eau\[Créances 2008.xls]Octobre'!$F$7:$F$32=$A83)*1)
m@rina
=SOMMEPROD(('F:\Maladie Angers\CREANCES\Au fil de l''eau\[Créances 2008.xls]Octobre'!$F$7:$F$32=$A83)*1)
m@rina
m@rina
Messages postés
21241
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
9 janvier 2025
11 377
4 févr. 2009 à 18:39
4 févr. 2009 à 18:39
Ahhh !!! Tant mieux !! ;))
Pour le *1, en fait le SOMMEPROD est une fonction qui fait la somme de produits. Elle est tellement pratique qu'elle est souvent détournée, car comme tu le vois, elle permet de faire des sommes conditionnelles (NB.SI ou Somme.SI, elle permet de remplacer des matricielles, même si au départ elle n'était pas faite pour ça. Par ailleurs, comme tu peux t'en rendre compte, elle permet de faire des calculs avec des données provenant de fichiers fermés.
Pour obtenir un produit il faut multiplier... Si pas de multiplication, pas de produits. Donc, dans cette formule, on multiplie parce que c'est nécessaire, et seulement par 1 pour ne pas fausser le résultat.
La formule compte 1 à chaque fois que la condition est vraie, multiplie ce nombre par 1 ce qui ne change rien au résultat et additionne le tout.
m@rina
Pour le *1, en fait le SOMMEPROD est une fonction qui fait la somme de produits. Elle est tellement pratique qu'elle est souvent détournée, car comme tu le vois, elle permet de faire des sommes conditionnelles (NB.SI ou Somme.SI, elle permet de remplacer des matricielles, même si au départ elle n'était pas faite pour ça. Par ailleurs, comme tu peux t'en rendre compte, elle permet de faire des calculs avec des données provenant de fichiers fermés.
Pour obtenir un produit il faut multiplier... Si pas de multiplication, pas de produits. Donc, dans cette formule, on multiplie parce que c'est nécessaire, et seulement par 1 pour ne pas fausser le résultat.
La formule compte 1 à chaque fois que la condition est vraie, multiplie ce nombre par 1 ce qui ne change rien au résultat et additionne le tout.
m@rina
4 févr. 2009 à 10:16
je me suis peut etre mal expliquée
j'ai un tableau sur lequel j'ai des données
mon second tableau par l'intermédiaire de liaisons récupère les données du premier tableau
a l'ouverture de mon second tableau, celui-ci me demande si je souhaite ou non mettre à jour les données
je réponds oui car je souhaite, si les données ont été mises à jour pouvoir en bénéficier
c'est la que se pose le problème, les données sont irrécupérables si le tableau d'orignie, c'est à dire celui où sont les données est fermé
si je l'ouvre par contre mon tableau se met à jour, mais je ne souhaite pas devoir l'ouvrir à chaque fois
comment faire ?
merci