Formule référence autre classeur...

Formule référence autre classeur... - VB/VBA/VBS - Programmation

Marsh Posté le 19-11-2008 à 14:19:54    

:hello:  
 
Question sur une formule...
Voilà, j'ai 2 classeurs (le deuxième classeur s'appelle AA.xls).
Dans le premier, j'ai la cellule B1 dans laquelle j'ai la formule suivante : =SI(ESTVIDE(A1);0;[AA.xls]Feuil1!$C$1)
Si je traduis, B1 analyse s'il y a quelquechose en A1 du premier classeur ;
  1 - s'il n'y a pas de valeur, la formule affiche 0,
  2 - s'il y a quelquechose, la formule affiche la valeur qui se trouve en C1 du classeur AA.xls.
 
Pour le moment, c'est assez simple...
Le souci est que dans la cellule A1 du premier classeur, je veux placer la valeur AA pour que dans la formule, à la place de AA.xls, on ait quelquechose qui reprenne le "AA" de la cellule A1 et rajoute le ".xls"...
 
Un truc du genre : =SI(ESTVIDE(A1);0;["VALEUR en A1" + .xls]Feuil1!$C$1)
 
Car la valeur en A1 du premier classeur peut avoir comme valeur "AA" (pour le fichier AA.xls), "BB" (pour le fichier BB.xls).
 
Quelqu'un a une idée ???
 
;-)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 19-11-2008 à 14:19:54   

Reply

Marsh Posté le 20-11-2008 à 12:21:22    

Bonjour
 
- Il faut d'abord construire ta chaine vers le fichier + feuil + cellule
="[" & A1 & ".xls]Feuil1!$C$1"
 
- Ensuite, pour qu'excel comprenne que ce n'est pas du texte, mais une reference a une cellule/feuille/fichier il faut utiliser la fonction Indirect() (je te laisse cliquer sur F1 hein ;) )
=INDIRECT("[" & A1 & ".xls]Feuil1!$C$1";VRAI)
 
-Ensuite tu la mets dans ta formule
=SI(ESTVIDE(A1);0;INDIRECT("[" & A1 & ".xls]Feuil1!$C$1";VRAI))
 
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 20-11-2008 à 12:24:05

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-11-2008 à 13:13:00    

SuppotDeSaTante a écrit :

Bonjour
 
- Il faut d'abord construire ta chaine vers le fichier + feuil + cellule
="[" & A1 & ".xls]Feuil1!$C$1"
 
- Ensuite, pour qu'excel comprenne que ce n'est pas du texte, mais une reference a une cellule/feuille/fichier il faut utiliser la fonction Indirect() (je te laisse cliquer sur F1 hein ;) )
=INDIRECT("[" & A1 & ".xls]Feuil1!$C$1";VRAI)
 
-Ensuite tu la mets dans ta formule
=SI(ESTVIDE(A1);0;INDIRECT("[" & A1 & ".xls]Feuil1!$C$1";VRAI))
 
 
Cordialement


 
Merci beaucoup pour ton aide !!!
Super...


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 20-11-2008 à 14:12:05    

UP
 
La formule fonctionne parfaitement si le classeur AA.xls est ouvert derrière la premier classeur.
S'il est fermé, j'ai comme réponse #REF!.
Et quand j'ouvre le 1er classeur, je pensais qu'Excel allait me demander de mettre à jour les liaisons... mais non !!?  :cry:  
 
Une idée ????


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 20-11-2008 à 15:44:25    

Bah non, tu ne mets pas le chemin... Vu qu'il est sans chemin, pour Excel c'est comme si il etait ouvert.
Il faut mettre le chemin entre cote avant le classeur.
 
Cordialement


Message édité par SuppotDeSaTante le 20-11-2008 à 15:56:05

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-11-2008 à 15:59:55    

Bon en fait non, ca ne marche pas avec indirect(). En saisie directe oui genre 'C:\[Classeur2.xls]Feuil1'!$A$1 mais pas avec indirect().
Il faut que le classeur soit ouvert.
 
Voila une macro qui palie au souci (pas de moi, je l'ai adpaté à ton besoin)
 
En A1 tu as : 'C:\[Classeur2.xls]Feuil1'!A1 (en gros un chemin vers ton fichier, le nom de ton fichier et la cellule cible)
 
Ensuite tu saisis cette macro :

Citation :

Function SchF(arg)
'renvoie la valeur de la cellule Cell de la feuille Feuille
'du classeur fermé Classeur
     
    'Calcul de la variable "fichier"
    Fichier1 = InStr(1, arg, "[", vbTextCompare)
    Fichier2 = InStr(1, arg, "]", vbTextCompare)
    Fichier = Mid(arg, Fichier1 + 1, Fichier2 - 1 - Fichier1)
    Chemin = Left(arg, Fichier1 - 1)
     
    Classeur = Chemin & Fichier
     
    'Calcul de la variable "Feuille"
    Feuille2 = InStr(Fichier2, arg, "'", vbTextCompare)
    Feuille = Mid(arg, Fichier2 + 1, Feuille2 - Fichier2 - 1)
    Feuille = Feuille
     
    'Calcul de la variable "Cellule"
    Dim Cellule As Variant, Cell As Range
    Cellule = Mid(arg, Feuille2 + 2, Len(arg) - Feuille2 + 1)
    Set Cell = Range(Cellule)
 
Dim RcdSet As Object
Dim strConn As String
Dim strCmd As String
Dim dummyBase As Range
   
  'prépare une "base de données" bidon pour la clause SELECT
  '(une entête fictive et une ligne de données)
  Set dummyBase = Cell.Resize(2)
   
  'prépare les commandes ADO et SQL
  strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & Classeur & ";" & _
                "Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
  strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
   
  'crée l'objet Recordset
  Set RcdSet = CreateObject("ADODB.Recordset" )
   
  'va chercher l'info
  RcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly, adCmdText
   
  'et la renvoie
  SchF = Application.Clean(RcdSet(0))
  'autre syntaxe possible
'  SchF=Application.Clean(RcdSet.GetString(NumRows:=1))
   
  'nettoyage
  Set RcdSet = Nothing
End Function 'fs

Il ne te reste plus qu'a saisir =SchF(A1)
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 20-11-2008 à 16:54:54

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-11-2008 à 16:37:31    

SuppotDeSaTante a écrit :

Bon en fait non, ca ne marche pas avec indirect(). En saisie directe oui genre 'C:\[Classeur2.xls]Feuil1'!$A$1 mais pas avec indirect().
Il faut que le classeur soit ouvert.
 
Si ca t'interresse j'ai trouvé une macro qui palie au probleme.
 
Cordialement


 
Je veux bien si ça ne te dérange pas...    :)  :hello:  


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 20-11-2008 à 16:53:29    

Oui en fait j'etais en train de la faire.... Mais ca m'a pris un peu de temps
 
Regarde plus haut ;)
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 20-11-2008 à 16:53:47

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-11-2008 à 20:48:11    

SuppotDeSaTante a écrit :

Oui en fait j'etais en train de la faire.... Mais ca m'a pris un peu de temps
 
Regarde plus haut ;)
 
Cordialement


 
 :ouch:  
Ah oui, OK, d'accord... je maîtrise pas du tout les Function...
Faut que je me pose dans un endroit calme car là, je suis assez faiblard sur le sujet...
J'étudie et reviens vers toi si nécessaire... ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 20-11-2008 à 22:33:16    

Tu es sur le forum progra vb/vba hein ;)
 
Tu as juste a copier ce que je t'ai mis dans un nouveau module :
Outils, Macro, Visual Basic editor, Insertion, Nouveau module, et tu colles la fonction.
 
Ensuite sous Excel, il faut que le chemin vers ton fichier, ta feuille et ta cellule soit de ce type :
Par ex en A1 : 'C:\[AA.xls]Feuil1'!A1
Ensuite, par ex en A2 tu peux mettre : =SchF(A1)
 
Si tu as besoin d'explication pour le code, pas de souci. Il etait deja bien argumenté a la base, je les ai laissé, et j'ai rajouté les miens, pour l'adapter a ton besoin.
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 20-11-2008 à 22:41:41

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-11-2008 à 22:33:16   

Reply

Marsh Posté le 21-11-2008 à 09:47:18    

SuppotDeSaTante a écrit :

Tu es sur le forum progra vb/vba hein ;)
 
Tu as juste a copier ce que je t'ai mis dans un nouveau module :
Outils, Macro, Visual Basic editor, Insertion, Nouveau module, et tu colles la fonction.
 
Ensuite sous Excel, il faut que le chemin vers ton fichier, ta feuille et ta cellule soit de ce type :
Par ex en A1 : 'C:\[AA.xls]Feuil1'!A1
Ensuite, par ex en A2 tu peux mettre : =SchF(A1)
 
Si tu as besoin d'explication pour le code, pas de souci. Il etait deja bien argumenté a la base, je les ai laissé, et j'ai rajouté les miens, pour l'adapter a ton besoin.
 
Cordialement


 
 :??:  
Moi, je veux qu'en A1, il n'y est que AA...
Cela signifie que je doit insérer une autre colonne avec une formule du genre =TEXTE("'C:\(" & A1 & ".xls]Feuil1'!A1" )
Et je ne sais pas si ça va fonctionner...


Message édité par scaryfan le 21-11-2008 à 09:52:42

---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 23-11-2008 à 00:24:01    

Non il suffit de modifier les variables Chemin et Feuille dans la macro pour les mettre en dur.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-11-2008 à 11:15:51    

:hello:  
 
Bon, j'ai essayé ta macro.
J'ai créé 2 classeurs :  AAA.xls et AA.xls
Dans le classeur AAA.xls, en A1 de Feuil1, j'ai tapé "AA".
J'ai ensuite tapé Alt+F11 pour ouvrir VB et ai créé un module dans lequel j'ai copié-collé ta macro...  telle quelle !
Dans le classeur AA.xls, j'ai tapé une valeur quelconque dans la cellule A1 de Feuil1 (ex : 25).
Dans le classeur AAA.xls, en B1 de Feuil1, j'ai tapé =SchF(A1)... mais j'ai comme résultat #VALEUR! .
 
Ce que je comprends, c'est que la fonction est bien reconnue (car sinon j'aurai comme résultat un truc du genre #NOM? au lieu de #VALEUR! ).
 
Quel est le souci ?
 
Pour le principe, j'ai bien saisi qu'il faut créer une fonction personalisé pour arriver à ce type de résultat...
 
Merci pour votre aide !!!
 


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 23-11-2008 à 11:26:05    

Alors en fait la macro permet de recuperer la cellule, si ta cellule contient une reference externe de ce type : 'C:\[AA.xls]Feuil1'!A1  
 
Je trouve ca plus logique, car tes fichiers ne sont pas tous forcement au meme endroit, et la tu definis sur quelle feuille chercher, et quelle cellule a recuperer.
Maintenant si tes classeurs sont tous au meme endroit et que tu veux y faire reference avec seulement le nom de classeur et la cellule il faut un peu modifier la macro en consequence.
 
Ton exemple ne dit pas ni dans quelle feuille chercher, ni quelle cellule. Il faut bien lui dire a un moment donné... il peut pas deviner que ce que tu veux est sur la feuil1 en A1...
Tu voudrais taper quoi en A1 pour qu'il te recupere la valeur de A1 de la feuil1 de ton fichier AAA.xls ?
 
Sinon je peux l'adapter, pour que par exemple tu saisisses ca : =schf("C:\";A1;"Feuil1";A1) Pour lui dire que tu vas sur le classeur qui se trouve sur C:\ que son nom est en A1, que tu veux la celulle A1 de la feuil1... Mais dans tous les cas il faut bien dire a Excel où se trouve ton fichier, quelle cellule tu veux recuperer et de quelle feuille ...
 
Tiens moi au jus.


Message édité par SuppotDeSaTante le 23-11-2008 à 11:38:45

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-11-2008 à 14:49:32    

C'est effectivement ce que je veux.
 
Je peux adapter comme cela dans AAA.xls :
 
En A1, le chemin : "C:\TEST\"
En A2, le nom du fichier : "AA" (mais il n'y aura pas l'extension !) ; donc, voir s'il ne faut pas qu'en A3, je mette une formule =TEXTE(A2 & ".xsl" )...  :??:  
En A3, le nom de la feuille (onglet) des classeurs dont je veux récupérer des valeurs (sachant que ces onglets auront toujours le même nom ("TOTO" par exemple)...
En A4, la cellule source... mais qui sera toujours la même (en l'occurence A1).
 
Seule la valeur en A2 va changer en fonction des classeurs source créés... car la liste s'allongera... c'est le seul élément variable... le reste est toujours identique selon les classeurs AA.xls, BB.xls, CC.xls...
 
Faut que je réfléchisse... ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 23-11-2008 à 19:19:34    

Alors essaie ca :

Citation :

Function SchF(Chemin As String, Fichier As String, Feuille As String, Cellule As Range)
'renvoie la valeur de la cellule Cell de la feuille Feuille
'du classeur fermé Classeur
     
    'Calcul de la variable "fichier"
    Classeur = Chemin & Fichier & ".xls"
     
    'Calcul de la variable "Cellule"
    Set Cell = Range(Cellule)
 
Dim RcdSet As Object
Dim strConn As String
Dim strCmd As String
Dim dummyBase As Range
   
  'prépare une "base de données" bidon pour la clause SELECT
  '(une entête fictive et une ligne de données)
  Set dummyBase = Cell.Resize(2)
   
  'prépare les commandes ADO et SQL
  strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & Classeur & ";" & _
                "Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
  strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
   
  'crée l'objet Recordset
  Set RcdSet = CreateObject("ADODB.Recordset" )
   
  'va chercher l'info
  RcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly, adCmdText
   
  'et la renvoie
  SchF = Application.Clean(RcdSet(0))
  'autre syntaxe possible
'  SchF=Application.Clean(RcdSet.GetString(NumRows:=1))
   
  'nettoyage
  Set RcdSet = Nothing
End Function 'fs


 
En colonne A ce que tu as mis dans ton exemple :
A1 : C:\Test\     (chemin vers ton fichier)
A2 : AA             (nom du classeur sans l'extension)
A3 : Feuil1         (Nom de l'onglet)
A4 : A1             (cellule dont tu veux retourner la valeur)
 
B1 tu mets ca : =schf(A1;A2;A3;A4)

Message cité 1 fois
Message édité par SuppotDeSaTante le 23-11-2008 à 19:21:14

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-11-2008 à 20:35:48    

SuppotDeSaTante a écrit :

Alors essaie ca :

Citation :

Function SchF(Chemin As String, Fichier As String, Feuille As String, Cellule As Range)
'renvoie la valeur de la cellule Cell de la feuille Feuille
'du classeur fermé Classeur
     
    'Calcul de la variable "fichier"
    Classeur = Chemin & Fichier & ".xls"
     
    'Calcul de la variable "Cellule"
    Set Cell = Range(Cellule)
 
Dim RcdSet As Object
Dim strConn As String
Dim strCmd As String
Dim dummyBase As Range
   
  'prépare une "base de données" bidon pour la clause SELECT
  '(une entête fictive et une ligne de données)
  Set dummyBase = Cell.Resize(2)
   
  'prépare les commandes ADO et SQL
  strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & Classeur & ";" & _
                "Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
  strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
   
  'crée l'objet Recordset
  Set RcdSet = CreateObject("ADODB.Recordset" )
   
  'va chercher l'info
  RcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly, adCmdText
   
  'et la renvoie
  SchF = Application.Clean(RcdSet(0))
  'autre syntaxe possible
'  SchF=Application.Clean(RcdSet.GetString(NumRows:=1))
   
  'nettoyage
  Set RcdSet = Nothing
End Function 'fs


 
En colonne A ce que tu as mis dans ton exemple :
A1 : C:\Test\     (chemin vers ton fichier)
A2 : AA             (nom du classeur sans l'extension)
A3 : Feuil1         (Nom de l'onglet)
A4 : A1             (cellule dont tu veux retourner la valeur)
 
B1 tu mets ca : =schf(A1;A2;A3;A4)


 
 :bounce:  
 
Ca marche super bien !!!!!
 :pt1cable:  
 
GE-NIAL !!!!!
 
Merci beaucoup !
Faut que je prenne une formation sur le sujet car les fonctions peuvent bien m'aider dans certains cas... ;)
 
 :jap:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 23-11-2008 à 20:40:29    

:wahoo:  
 
Je constate également que lorsque l'on ouvre le fichier AAA.xls, Excel ne demande pas de mettre ou non les liaisons à jour... alors que dans le cas des formules de liaison classiques (exemple ='C:\TEST\[AA.xls]Feuil1'!$A$1 ), Excel le demande...


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 23-11-2008 à 22:49:10    

Apres, si tes fichiers sont TOUJOURS au meme endroit on peut jouer avec les liaisons d'Excel en effet.
 
Il faut que tu ouvres tes deux fichiers, tu fais references a l'un comme au debut. Dans ta cellule tu as donc un truc du style ='C:\Test\[AA.xls]Feuil1'!$A$1
Saisi cette macro :

Citation :

Sub Macro1()
     
'Regarde les liens existant dans le fichier (la je n'ai prevu que pour un lien externe)
Liens = ActiveWorkbook.LinkSources(xlExcelLinks)
Liens = Liens(1)
 
'Calcule le chemin et le nom du fichier
Fichier1 = InStr(1, Liens, "\" )
Chemin = Left(Liens, Fichier1)
Fichier1 = Right(Liens, Len(Liens) - Fichier1)
 
'Regarde le fichier la ou tu es positionné, il faut donc que tu sois positionné sur la _
cellule qui contient AA ou AAA ou BB, bref les noms de tes fichiers. _
Tu peux aussi remplacer ActiveCell par une reference fixe de type Sheets(1).Cells(1,1)
Fichier2 = ActiveCell.Value & ".xls"
 
'S'ils sont differents il met a jour les liens en fonction du nom du fichier de la cellule _
sur laquelle tu es positionné
If Fichier1 <> Fichier2 Then
    ChDir Chemin
    ActiveWorkbook.ChangeLink Name:=Fichier1, NewName:=Chemin & Fichier2, Type:=xlExcelLinks
End If
 
End Sub


 
Tu te mets sur ta cellule contenant le nom de ton fichier externe, dans le dernier exemple c'etait A2 et tu lances la macro.
 
Ex en A2 tu as AA, donc dans ta cellule qui va chercher la valeur (par ex en B1) tu as ='C:\Test\[AA.xls]Feuil1'!$A$1
Tu te mets en A2, tu tapes BB, tu valides, tu te mets sur A2 et tu lances la macro
Tu verras qu'en B1 il met tout seul : ='C:\Test\[BB.xls]Feuil1'!$A$1
 
Voila... C'est aussi une autre solution. L'inconvenient, si tu fais reference a A1 de la feuil1 de AA.xls, il fera obligatoirement reference a A1 de la feuil1 de BB.xls
 
Cordialement


Message édité par SuppotDeSaTante le 23-11-2008 à 22:56:56

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-11-2008 à 11:34:25    

Merci encore.
La fonction répond parfaitement à ce que je voulais... ;)
C'est sans doute plus rapide que les macros pour aller chercher des infos dans d'autres classeurs...
 :p


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 26-11-2008 à 10:39:23    

:??:  
 
Je reviens sur ce topic car j'ai un petit souci avec la fonction que dje69r m'a gentiment donnée.
 
Voici mon problème :
Dans mon fichier AAA.xls, j'ai saisi la fonction dans un nouveau module et ai tapé dans une cellule la formule magique.
En colonne A :  
A1 : C:\Test\     (chemin vers ton fichier)  
A2 : AA             (nom du classeur sans l'extension)  
A3 : Feuil1         (Nom de l'onglet)  
A4 : A1             (cellule dont tu veux retourner la valeur)  
B1 : =schf(A1;A2;A3;A4)
 
Et B1 me donne bien la valeur présente dans la cellule A1 de la Feuil1 du classeur AA.xls qui se trouve dans le répertoire C:\Test\ .
Jusque là tout va bien et si je modifie la cellule A4 par BB, la valeur en B1 change bien par la valeur de A1 de la Feuil1 du fichier BB.xls.
Pour le moment, je laisse AA.
 
Ensuite, j'enregistre et ferme mon classeur AAA.xls.
J'ouvre AA.xls et modifie la valeur en A1 et enregistre et ferme.
Quand je rouvre AAA.xls, je suis obligé de ressaisir AA en A2 pour que la valeur en B1 se recalcule...
 
En fait, si je modifie des éléments dans mes fichiers source, les valeurs ne mettent pas à jour dans le fichier qui centralise les résultats...
 
Quelqu'un a une idée ???
 
;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 26-11-2008 à 12:04:25    

bonjour,
 
est ce qu'avec ce petit code ca marche ?
 

Code :
  1. Private Sub Workbook_Open()
  2. Application.Calculate
  3. End Sub


 
OU
 

Code :
  1. Private Sub Workbook_Open()
  2. ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
  3. End Sub


 
a mettre dans thisworkbook et non pas dans un module

Message cité 1 fois
Message édité par ingenieurcesi33 le 26-11-2008 à 12:05:08
Reply

Marsh Posté le 26-11-2008 à 16:35:12    

ingenieurcesi33 a écrit :

bonjour,
 
est ce qu'avec ce petit code ca marche ?
 

Code :
  1. Private Sub Workbook_Open()
  2. Application.Calculate
  3. End Sub


 
OU
 

Code :
  1. Private Sub Workbook_Open()
  2. ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
  3. End Sub


 
a mettre dans thisworkbook et non pas dans un module


 
Je vais essayer... ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 26-11-2008 à 16:44:46    

Non, ça ne marche pas...
En plus, comme j'ai plusieurs niveaux de remontés de valeurs.
Une valeur du classeur RF3 qui remonte vers RF2, un calcul s'effectue, puis la valeur calculée de RF2 remonte vers RF1.
Pour le moment, je suis obligé d'ouvrir chacun des classeurs, de copier la cellule qui contient le nom du classeur en-dessous et de le coller au même emplacement... et la mise à jour s'effectue... évidemment, j'ai mis ce copier/coller dans Workbook_Open.  :o  
Mais je dois ouvrir tous les fichiers, les sauvegader puis les fermer...
 
Moi qui pensait que la valeur modifiée dans RF3 remonte dans RF2 et que RF1 se modifie de lui même... :(


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 26-11-2008 à 16:46:30    

Il y a un truc qui me turlupine quand même.
Quand mes 3 classeurs sont ouverts, si je modifie dans RF3 la valeur qui doit remonter dans RF2, RF2 ne se met pas à jour...  :??:  
Je capte pas là........


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 26-11-2008 à 17:01:15    

Je vous embête mais il y a un autre truc qui me gêne dans cette fonction.
Les valeurs à récupérer sont des nombres à 2 virgules (montants).
Dès qu'une valeur a des chiffres après la virgule, la fonction affiche #VALEUR! .
Pour palier à cela, je suis obligé de modifier dans les Options / International le séparateur de décimales pour que ce soit un point (.) et non une virgule.
Et là, ça fonctionne...
 
N'y a-t-il pas moyen d'éviter cela car mes tableaux doivent être utilisés par d'autres personnes ? et je n'ai pas envie de leurs faire changer leurs options d'Excel.
 
;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 08-12-2008 à 11:10:04    

UP


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 09-12-2008 à 14:20:08    

Bonjour
 
Il suffit d'utiliser l'autre syntaxe que je t'avais mise dans le code :

Citation :

  'et la renvoie  
  'SchF = Application.Clean(RcdSet(0))  
 'autre syntaxe possible
  SchF=Application.Clean(RcdSet.GetString(NumRows:=1))


 
Cordialement


Message édité par SuppotDeSaTante le 09-12-2008 à 14:21:55

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed