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

Chemin d'accès indiqué dans une cellule à ajouter dans une formule

8 réponses
Avatar
Serkanao
Bonjour =E0 tous..

Voici mon probl=E8me :

J'ai plusieurs classeurs nomm=E9s A, B, C, ... Ils ont tous le m=EAme
format, les m=EAmes onglets avec les m=EAmes noms. Leur chemin d'acc=E8s es=
t
C:\Dossiers\Tableaux\A.xls ; C:\Dossiers\Tableaux\B.xls; C:\Dossiers
\Tableaux\C.xls

J'ai =E9galement un dernier classeur nomm=E9 "R=E9capitulatif". Celui-ci a
un tableau regroupant les r=E9sumant les r=E9sultats.
Par exemple;
dans la cellule A1 j'ai le r=E9sultat de la cellule X2 de l'onglet
"Onglet" du classeur A ( =3D'C:\Dossiers\Tableaux\[A.xls]Onglet'!$X$2)
dans la cellule A2 j'ai le r=E9sultat de la cellule X2 de l'onglet
"Onglet" du classeur B( =3D'C:\Dossiers\Tableaux\[B.xls]Onglet'!$X$2)
dans la cellule A3 j'ai le r=E9sultat de la cellule X2 de l'onglet
"Onglet" du classeur C( =3D'C:\Dossiers\Tableaux\[C.xls]Onglet'!$X$2)
...
Normalement cette formule ne marche que si le classeur de r=E9f=E9rence
est ouvert mais avec la formule SOMMEPRODUIT j'arrive =E0 contourner =E7a.
( SOMMEPRODUIT('C:\Dossiers\Tableaux\[B.xls]Onglet'!$X$2)*1)

Dans la colonne B j'ai justement les chemins d'acc=E8s de chaque
classeur. Mon but serait de savoir comment ins=E9rer les chemins d'acc=E8s
de cette colonne dans les cellules contenant les formules.

C=E0D :

A1 =3DSOMMEPRODUIT(B1)*1
A2 =3DSOMMEPRODUIT(B2)*1
A3 =3DSOMMEPRODUIT(B3)*1

Je ne sais pas comment faire r=E9f=E9rence aux cellules de la colonne B.
J'ai essay=E9 : (" '&B1&'") et d'autres variantes mais j'ai toujours
l'erreur #VALEUR qui apparait..

Je ne sais pas si mon explication est assez claire. J'esp=E8re en tout
cas que certains auront le courage de m'aider :)

Merci d'avance.

Salutations

8 réponses

Avatar
isabelle
bonjour Serkanao,

regarde sur http://xcell05.free.fr/pages/telecharge/index.html#Morefunc
la fonction INDIRECT.EXT pour les classeurs fermés elle fait parti de :
Morefunc.xll :66 fonctions complémentaires de feuille de calcul -
version 5.01

isabelle


isabelle

Serkanao a écrit :
Bonjour à tous..

Voici mon problème :

J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
format, les mêmes onglets avec les mêmes noms. Leur chemin d'accès est
C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
TableauxC.xls

J'ai également un dernier classeur nommé "Récapitulatif". Celui-ci a
un tableau regroupant les résumant les résultats.
Par exemple;
dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
...
Normalement cette formule ne marche que si le classeur de référence
est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça.
( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

Dans la colonne B j'ai justement les chemins d'accès de chaque
classeur. Mon but serait de savoir comment insérer les chemins d'accès
de cette colonne dans les cellules contenant les formules.

CàD :

A1 =SOMMEPRODUIT(B1)*1
A2 =SOMMEPRODUIT(B2)*1
A3 =SOMMEPRODUIT(B3)*1

Je ne sais pas comment faire référence aux cellules de la colonne B.
J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
l'erreur #VALEUR qui apparait..

Je ne sais pas si mon explication est assez claire. J'espère en tout
cas que certains auront le courage de m'aider :)

Merci d'avance.

Salutations



Avatar
Serkanao
Bonjour Isabelle. Merci tout d'abord pour ta réponse.

Je connais ce fichier et cette fonction INDIRECT.EXT mais
malheureusement elle demande bcp de temps pour effectuer les calculs
et surtout est bloquée par le système de sécurité de l'entreprise d ans
laquelle je travaille :)

Merci tout de même.

On 25 août, 15:01, isabelle wrote:
bonjour Serkanao,

regarde surhttp://xcell05.free.fr/pages/telecharge/index.html#Morefunc
la fonction INDIRECT.EXT pour les classeurs fermés elle fait parti de :
Morefunc.xll   :66 fonctions complémentaires de feuille de calcul -
version 5.01

isabelle

isabelle

Serkanao a écrit :

> Bonjour à tous..

> Voici mon problème :

> J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
> format, les mêmes onglets avec les mêmes noms. Leur chemin d'accè s est
> C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
> TableauxC.xls

> J'ai également un dernier classeur nommé "Récapitulatif". Celui-c i a
> un tableau regroupant les résumant les résultats.
> Par exemple;
> dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
> dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
> dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
> ...
> Normalement cette formule ne marche que si le classeur de référence
> est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça.
> ( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

> Dans la colonne B j'ai justement les chemins d'accès de chaque
> classeur. Mon but serait de savoir comment insérer les chemins d'acc ès
> de cette colonne dans les cellules contenant les formules.

> CàD :

> A1 =SOMMEPRODUIT(B1)*1
> A2 =SOMMEPRODUIT(B2)*1
> A3 =SOMMEPRODUIT(B3)*1

> Je ne sais pas comment faire référence aux cellules de la colonne B .
> J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
> l'erreur #VALEUR qui apparait..

> Je ne sais pas si mon explication est assez claire. J'espère en tout
> cas que certains auront le courage de m'aider :)

> Merci d'avance.

> Salutations


Avatar
MichDenis
Bonjour Serkanao,

Tu peux utiliser une fonction personnalisée si tu veux extraire
seulement la valeur d'une cellule dans un fichier fermé.


La fonction suivante doit être placé dans un module standard.
Tu dois ajouter une référence à ton projet.
Pour ce faire, à partir du menu de la fenêtre de l'éditeur de code
Outils / Références / Et Tu coches :
"Microsoft Activex Data Objects 2.8 Librairy"

Pour appeler cette fonction à partir de ta feuille de calcul
Exemple : dans les cellule suivantes, tu as l'information suivante:
: Chemin et nom du fichier
En A1 : C:UsersDMDocumentsExemple TDC.xls
En A2 : Feuil1 'Nom de l'onglet de la feuille dans le classeur
où tu veux
En A3 : A2 'L'adresse de la cellule à extraire dans la Feuil1

La ligne de commande s'écrit comme suit dans la cellule :
­o(A1;A2:A3)

Que le classeur soit ouvert ou fermé, cela devrait fonctionner
sauf si au même moment quelqu'un est en train de modifier
le contenu de la cellule dont tu veux importer !
'----------------------------------------
Function Ado(File As Range, NomFeuille As Range, Cellule As Range)
Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Plg As String

Plg = Range(Cellule.Value).Address(0, 0)
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File.Value & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

Requete = "SELECT * From [" & NomFeuille.Value & "$]" & Plg & ""
Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
Ado = Rst(0).Value
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'----------------------------------------



"Serkanao" a écrit dans le message de groupe de discussion :

Bonjour à tous..

Voici mon problème :

J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
format, les mêmes onglets avec les mêmes noms. Leur chemin d'accès est
C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
TableauxC.xls

J'ai également un dernier classeur nommé "Récapitulatif". Celui-ci a
un tableau regroupant les résumant les résultats.
Par exemple;
dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
...
Normalement cette formule ne marche que si le classeur de référence
est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça.
( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

Dans la colonne B j'ai justement les chemins d'accès de chaque
classeur. Mon but serait de savoir comment insérer les chemins d'accès
de cette colonne dans les cellules contenant les formules.

CàD :

A1 =SOMMEPRODUIT(B1)*1
A2 =SOMMEPRODUIT(B2)*1
A3 =SOMMEPRODUIT(B3)*1

Je ne sais pas comment faire référence aux cellules de la colonne B.
J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
l'erreur #VALEUR qui apparait..

Je ne sais pas si mon explication est assez claire. J'espère en tout
cas que certains auront le courage de m'aider :)

Merci d'avance.

Salutations
Avatar
Serkanao
J'ai essayé mais pas vraiment réussi.. Je vais y travailler dessus
merci quand même..

Mais donc c'est impossible sans macro ? Parce que j'arrive à avoir mes
résultats sans que les fichiers ne soient ouverts. Je veux juste
m'éviter le travail manuel d'écrire les chemins d'accès pour chaque
classeur..

On Aug 25, 4:14 pm, "MichDenis" wrote:
Bonjour Serkanao,

Tu peux utiliser une fonction personnalisée si tu veux extraire
seulement la valeur d'une cellule dans un fichier fermé.

La fonction suivante doit être placé dans un module standard.
Tu dois ajouter une référence à ton projet.
Pour ce faire, à partir du menu de la fenêtre de l'éditeur de code
Outils / Références / Et Tu coches :
"Microsoft Activex Data Objects 2.8 Librairy"

Pour appeler cette fonction à partir de ta feuille de calcul
Exemple : dans les cellule suivantes, tu as l'information suivante:
            : Chemin et nom du fichier
En A1 :  C:UsersDMDocumentsExemple TDC.xls
En A2 :  Feuil1  'Nom de l'onglet de la feuille dans le classeur
                           où tu veux
En A3 :  A2   'L'adresse de la cellule à extraire dans la Feuil1

La ligne de commande s'écrit comme suit dans la cellule :
o(A1;A2:A3)

Que le classeur soit ouvert ou fermé, cela devrait fonctionner
sauf si au même moment quelqu'un est en train de modifier
le contenu de la cellule dont tu veux importer !
'----------------------------------------
Function Ado(File As Range, NomFeuille As Range, Cellule As Range)
Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Plg As String

Plg = Range(Cellule.Value).Address(0, 0)
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & File.Value & ";" & _
    "Extended Properties=""Excel 8.0;HDR=NO;"""

Requete = "SELECT * From [" & NomFeuille.Value & "$]" & Plg & ""
Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
Ado = Rst(0).Value
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'----------------------------------------

"Serkanao" a écrit dans le message de groupe de discussion :

Bonjour à tous..

Voici mon problème :

J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
format, les mêmes onglets avec les mêmes noms. Leur chemin d'accès est
C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
TableauxC.xls

J'ai également un dernier classeur nommé "Récapitulatif". Celui-ci a
un tableau regroupant les résumant les résultats.
Par exemple;
dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
...
Normalement cette formule ne marche que si le classeur de référence
est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça .
( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

Dans la colonne B j'ai justement les chemins d'accès de chaque
classeur. Mon but serait de savoir comment insérer les chemins d'accè s
de cette colonne dans les cellules contenant les formules.

CàD :

A1 =SOMMEPRODUIT(B1)*1
A2 =SOMMEPRODUIT(B2)*1
A3 =SOMMEPRODUIT(B3)*1

Je ne sais pas comment faire référence aux cellules de la colonne B.
J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
l'erreur #VALEUR qui apparait..

Je ne sais pas si mon explication est assez claire. J'espère en tout
cas que certains auront le courage de m'aider :)

Merci d'avance.

Salutations


Avatar
MichDenis
Tu as ma fonction ou tu dois écrire le chemin en dur dans tes formules.
Indirect() ne s'applique pas dans un classeur fermer. Et l'autre version
de la fonction Indirect.ext(), tu ne peux pas l'utiliser.

Ma fonction peut être modifié selon la manière dont tu aimerais
renseigner les paramètres de celle-ci !


"Serkanao" a écrit dans le message de groupe de discussion :

J'ai essayé mais pas vraiment réussi.. Je vais y travailler dessus
merci quand même..

Mais donc c'est impossible sans macro ? Parce que j'arrive à avoir mes
résultats sans que les fichiers ne soient ouverts. Je veux juste
m'éviter le travail manuel d'écrire les chemins d'accès pour chaque
classeur..

On Aug 25, 4:14 pm, "MichDenis" wrote:
Bonjour Serkanao,

Tu peux utiliser une fonction personnalisée si tu veux extraire
seulement la valeur d'une cellule dans un fichier fermé.

La fonction suivante doit être placé dans un module standard.
Tu dois ajouter une référence à ton projet.
Pour ce faire, à partir du menu de la fenêtre de l'éditeur de code
Outils / Références / Et Tu coches :
"Microsoft Activex Data Objects 2.8 Librairy"

Pour appeler cette fonction à partir de ta feuille de calcul
Exemple : dans les cellule suivantes, tu as l'information suivante:
: Chemin et nom du fichier
En A1 : C:UsersDMDocumentsExemple TDC.xls
En A2 : Feuil1 'Nom de l'onglet de la feuille dans le classeur
où tu veux
En A3 : A2 'L'adresse de la cellule à extraire dans la Feuil1

La ligne de commande s'écrit comme suit dans la cellule :
­o(A1;A2:A3)

Que le classeur soit ouvert ou fermé, cela devrait fonctionner
sauf si au même moment quelqu'un est en train de modifier
le contenu de la cellule dont tu veux importer !
'----------------------------------------
Function Ado(File As Range, NomFeuille As Range, Cellule As Range)
Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Plg As String

Plg = Range(Cellule.Value).Address(0, 0)
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File.Value & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

Requete = "SELECT * From [" & NomFeuille.Value & "$]" & Plg & ""
Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
Ado = Rst(0).Value
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'----------------------------------------

"Serkanao" a écrit dans le message de groupe de discussion :

Bonjour à tous..

Voici mon problème :

J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
format, les mêmes onglets avec les mêmes noms. Leur chemin d'accès est
C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
TableauxC.xls

J'ai également un dernier classeur nommé "Récapitulatif". Celui-ci a
un tableau regroupant les résumant les résultats.
Par exemple;
dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
"Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
...
Normalement cette formule ne marche que si le classeur de référence
est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça.
( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

Dans la colonne B j'ai justement les chemins d'accès de chaque
classeur. Mon but serait de savoir comment insérer les chemins d'accès
de cette colonne dans les cellules contenant les formules.

CàD :

A1 =SOMMEPRODUIT(B1)*1
A2 =SOMMEPRODUIT(B2)*1
A3 =SOMMEPRODUIT(B3)*1

Je ne sais pas comment faire référence aux cellules de la colonne B.
J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
l'erreur #VALEUR qui apparait..

Je ne sais pas si mon explication est assez claire. J'espère en tout
cas que certains auront le courage de m'aider :)

Merci d'avance.

Salutations


Avatar
Serkanao
Je pense pouvoir mieux expliquer ma requête de cette manière :

Les deux formules suivantes me donnent le même résultat, c'est-à-dire
ce qui est dans la cellule B1 du classeur A.xls

=SOMMEPRODUIT('C:DossiersTableaux[A.xls]Onglet'!$B$1)*1 -->
classeur A.xls fermé
=SOMMEPRODUIT(INDIRECT(""&D1&""))*1 ----> D1='C:DossiersTableaux
[A.xls]Onglet'!$B$1 --> classeur A.xls ouvert

Mon but est donc de pouvoir utiliser ce qui se trouve dans la colonne
D dans la première formule sans passer par la formule INDIRECT.

Dois-je obligatoirement passer par une macro ou une fonction VBA ?


Merci encore

On Aug 25, 6:05 pm, "MichDenis" wrote:
Tu as ma fonction ou tu dois écrire le chemin en dur dans tes formules.
Indirect() ne s'applique pas dans un classeur fermer. Et l'autre version
de la fonction Indirect.ext(), tu ne peux pas l'utiliser.

Ma fonction peut être modifié selon la manière dont tu aimerais
renseigner les paramètres de celle-ci !

"Serkanao" a écrit dans le message de groupe de discussion :

J'ai essayé mais pas vraiment réussi.. Je vais y travailler dessus
merci quand même..

Mais donc c'est impossible sans macro ? Parce que j'arrive à avoir mes
résultats sans que les fichiers ne soient ouverts. Je veux juste
m'éviter le travail manuel d'écrire les chemins d'accès pour chaque
classeur..

On Aug 25, 4:14 pm, "MichDenis" wrote:

> Bonjour Serkanao,

> Tu peux utiliser une fonction personnalisée si tu veux extraire
> seulement la valeur d'une cellule dans un fichier fermé.

> La fonction suivante doit être placé dans un module standard.
> Tu dois ajouter une référence à ton projet.
> Pour ce faire, à partir du menu de la fenêtre de l'éditeur de cod e
> Outils / Références / Et Tu coches :
> "Microsoft Activex Data Objects 2.8 Librairy"

> Pour appeler cette fonction à partir de ta feuille de calcul
> Exemple : dans les cellule suivantes, tu as l'information suivante:
>             : Chemin et nom du fichier
> En A1 :  C:UsersDMDocumentsExemple TDC.xls
> En A2 :  Feuil1  'Nom de l'onglet de la feuille dans le classeur
>                            où tu veux
> En A3 :  A2   'L'adresse de la cellule à extraire dans la Feuil1

> La ligne de commande s'écrit comme suit dans la cellule :
> o(A1;A2:A3)

> Que le classeur soit ouvert ou fermé, cela devrait fonctionner
> sauf si au même moment quelqu'un est en train de modifier
> le contenu de la cellule dont tu veux importer !
> '----------------------------------------
> Function Ado(File As Range, NomFeuille As Range, Cellule As Range)
> Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
> Dim Requete As String, Plg As String

> Plg = Range(Cellule.Value).Address(0, 0)
> Set Conn = New ADODB.Connection
> Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
>     "Data Source=" & File.Value & ";" & _
>     "Extended Properties=""Excel 8.0;HDR=NO;"""

> Requete = "SELECT * From [" & NomFeuille.Value & "$]" & Plg & ""
> Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
> Ado = Rst(0).Value
> Rst.Close: Conn.Close
> Set Rst = Nothing: Set Conn = Nothing
> End Function
> '----------------------------------------

> "Serkanao" a écrit dans le message de groupe de discussion :
>
> Bonjour à tous..

> Voici mon problème :

> J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
> format, les mêmes onglets avec les mêmes noms. Leur chemin d'accè s est
> C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
> TableauxC.xls

> J'ai également un dernier classeur nommé "Récapitulatif". Celui-c i a
> un tableau regroupant les résumant les résultats.
> Par exemple;
> dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
> dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
> dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
> ...
> Normalement cette formule ne marche que si le classeur de référence
> est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça.
> ( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

> Dans la colonne B j'ai justement les chemins d'accès de chaque
> classeur. Mon but serait de savoir comment insérer les chemins d'acc ès
> de cette colonne dans les cellules contenant les formules.

> CàD :

> A1 =SOMMEPRODUIT(B1)*1
> A2 =SOMMEPRODUIT(B2)*1
> A3 =SOMMEPRODUIT(B3)*1

> Je ne sais pas comment faire référence aux cellules de la colonne B .
> J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
> l'erreur #VALEUR qui apparait..

> Je ne sais pas si mon explication est assez claire. J'espère en tout
> cas que certains auront le courage de m'aider :)

> Merci d'avance.

> Salutations


Avatar
MichDenis
| Dois-je obligatoirement passer par une macro ou une fonction VBA ?
***Pour ne pas à avoir à saisir les adresses en dur, oui ! jusqu'à preuve
du contraire... et cela pourrait arriver ! En attendant, je te propose ceci:

Tu copies ceci dans un module standard,
et dans ta cellule où tu veux obtenir le résultat
tu écris : = Ado(D1)
et tu peux recopier la formule sur la colonne.
la fonction Split() requiert Excel 2000 ou plus récent

'-------------------------------
Function Ado(Chaine As Range)
Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, File As String
Dim NomFeuille As String, Adresse As String

Extraire Chaine.Value, File, NomFeuille, Adresse
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

Requete = "SELECT * From [" & NomFeuille & "$]" & Adresse & ""
Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
Ado = Rst(0).Value
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'-------------------------------
Function Extraire(Chaine As String, File As String, _
NomFeuille As String, Adresse As String)
Dim A As Variant, B As Variant
A = Split(Chaine, "]")
File = Replace(A(0), "[", "", xlPart)
B = Split(A(1), "'")
NomFeuille = B(0)
Adresse = Replace(B(1), "!", "", xlPart)
End Function
'-------------------------------



"Serkanao" a écrit dans le message de groupe de discussion :

Je pense pouvoir mieux expliquer ma requête de cette manière :

Les deux formules suivantes me donnent le même résultat, c'est-à-dire
ce qui est dans la cellule B1 du classeur A.xls

=SOMMEPRODUIT('C:DossiersTableaux[A.xls]Onglet'!$B$1)*1 -->
classeur A.xls fermé
=SOMMEPRODUIT(INDIRECT(""&D1&""))*1 ----> D1='C:DossiersTableaux
[A.xls]Onglet'!$B$1 --> classeur A.xls ouvert

Mon but est donc de pouvoir utiliser ce qui se trouve dans la colonne
D dans la première formule sans passer par la formule INDIRECT.

Dois-je obligatoirement passer par une macro ou une fonction VBA ?


Merci encore

On Aug 25, 6:05 pm, "MichDenis" wrote:
Tu as ma fonction ou tu dois écrire le chemin en dur dans tes formules.
Indirect() ne s'applique pas dans un classeur fermer. Et l'autre version
de la fonction Indirect.ext(), tu ne peux pas l'utiliser.

Ma fonction peut être modifié selon la manière dont tu aimerais
renseigner les paramètres de celle-ci !

"Serkanao" a écrit dans le message de groupe de discussion :

J'ai essayé mais pas vraiment réussi.. Je vais y travailler dessus
merci quand même..

Mais donc c'est impossible sans macro ? Parce que j'arrive à avoir mes
résultats sans que les fichiers ne soient ouverts. Je veux juste
m'éviter le travail manuel d'écrire les chemins d'accès pour chaque
classeur..

On Aug 25, 4:14 pm, "MichDenis" wrote:

> Bonjour Serkanao,

> Tu peux utiliser une fonction personnalisée si tu veux extraire
> seulement la valeur d'une cellule dans un fichier fermé.

> La fonction suivante doit être placé dans un module standard.
> Tu dois ajouter une référence à ton projet.
> Pour ce faire, à partir du menu de la fenêtre de l'éditeur de code
> Outils / Références / Et Tu coches :
> "Microsoft Activex Data Objects 2.8 Librairy"

> Pour appeler cette fonction à partir de ta feuille de calcul
> Exemple : dans les cellule suivantes, tu as l'information suivante:
> : Chemin et nom du fichier
> En A1 : C:UsersDMDocumentsExemple TDC.xls
> En A2 : Feuil1 'Nom de l'onglet de la feuille dans le classeur
> où tu veux
> En A3 : A2 'L'adresse de la cellule à extraire dans la Feuil1

> La ligne de commande s'écrit comme suit dans la cellule :
> ­o(A1;A2:A3)

> Que le classeur soit ouvert ou fermé, cela devrait fonctionner
> sauf si au même moment quelqu'un est en train de modifier
> le contenu de la cellule dont tu veux importer !
> '----------------------------------------
> Function Ado(File As Range, NomFeuille As Range, Cellule As Range)
> Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
> Dim Requete As String, Plg As String

> Plg = Range(Cellule.Value).Address(0, 0)
> Set Conn = New ADODB.Connection
> Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=" & File.Value & ";" & _
> "Extended Properties=""Excel 8.0;HDR=NO;"""

> Requete = "SELECT * From [" & NomFeuille.Value & "$]" & Plg & ""
> Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
> Ado = Rst(0).Value
> Rst.Close: Conn.Close
> Set Rst = Nothing: Set Conn = Nothing
> End Function
> '----------------------------------------

> "Serkanao" a écrit dans le message de groupe de discussion :
>
> Bonjour à tous..

> Voici mon problème :

> J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
> format, les mêmes onglets avec les mêmes noms. Leur chemin d'accès est
> C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
> TableauxC.xls

> J'ai également un dernier classeur nommé "Récapitulatif". Celui-ci a
> un tableau regroupant les résumant les résultats.
> Par exemple;
> dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
> dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
> dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
> ...
> Normalement cette formule ne marche que si le classeur de référence
> est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça.
> ( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

> Dans la colonne B j'ai justement les chemins d'accès de chaque
> classeur. Mon but serait de savoir comment insérer les chemins d'accès
> de cette colonne dans les cellules contenant les formules.

> CàD :

> A1 =SOMMEPRODUIT(B1)*1
> A2 =SOMMEPRODUIT(B2)*1
> A3 =SOMMEPRODUIT(B3)*1

> Je ne sais pas comment faire référence aux cellules de la colonne B.
> J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
> l'erreur #VALEUR qui apparait..

> Je ne sais pas si mon explication est assez claire. J'espère en tout
> cas que certains auront le courage de m'aider :)

> Merci d'avance.

> Salutations


Avatar
MichDenis
Après test, ce qui suit apporte quelques légers correctifs :

Si D1 contient ce type d'information :
'C:DossiersTableaux[A.xls]Onglet'!$B$1
Pour extraire la donnée, il suffit de saisir
dans une cellule ­O(D1)
'--------------------------------------------
Function Ado(Chaine As Range)
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String, File As String
Dim NomFeuille As String, Adresse As String

Extraire Chaine.Value, File, NomFeuille, Adresse
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

Requete = "SELECT * From [" & NomFeuille & "$]" & Adresse & ""
Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
Ado = Rst(0).Value
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'--------------------------------------------
Function Extraire(Chaine As String, File As String, _
NomFeuille As String, Adresse As String)
Dim A As Variant, B As Variant
A = Split(Chaine, "]")
File = Replace(A(0), "[", "")
B = Split(A(1), "'")
NomFeuille = B(0)
Adresse = Replace(B(1), "!", "", xlPart)
Adresse = Replace(B(1), "$", "", xlPart)
End Function
'--------------------------------------------




"MichDenis" a écrit dans le message de groupe de discussion :
#
| Dois-je obligatoirement passer par une macro ou une fonction VBA ?
***Pour ne pas à avoir à saisir les adresses en dur, oui ! jusqu'à preuve
du contraire... et cela pourrait arriver ! En attendant, je te propose ceci:

Tu copies ceci dans un module standard,
et dans ta cellule où tu veux obtenir le résultat
tu écris : = Ado(D1)
et tu peux recopier la formule sur la colonne.
la fonction Split() requiert Excel 2000 ou plus récent

'-------------------------------
Function Ado(Chaine As Range)
Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, File As String
Dim NomFeuille As String, Adresse As String

Extraire Chaine.Value, File, NomFeuille, Adresse
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

Requete = "SELECT * From [" & NomFeuille & "$]" & Adresse & ""
Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
Ado = Rst(0).Value
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'-------------------------------
Function Extraire(Chaine As String, File As String, _
NomFeuille As String, Adresse As String)
Dim A As Variant, B As Variant
A = Split(Chaine, "]")
File = Replace(A(0), "[", "", xlPart)
B = Split(A(1), "'")
NomFeuille = B(0)
Adresse = Replace(B(1), "!", "", xlPart)
End Function
'-------------------------------



"Serkanao" a écrit dans le message de groupe de discussion :

Je pense pouvoir mieux expliquer ma requête de cette manière :

Les deux formules suivantes me donnent le même résultat, c'est-à-dire
ce qui est dans la cellule B1 du classeur A.xls

=SOMMEPRODUIT('C:DossiersTableaux[A.xls]Onglet'!$B$1)*1 -->
classeur A.xls fermé
=SOMMEPRODUIT(INDIRECT(""&D1&""))*1 ----> D1='C:DossiersTableaux
[A.xls]Onglet'!$B$1 --> classeur A.xls ouvert

Mon but est donc de pouvoir utiliser ce qui se trouve dans la colonne
D dans la première formule sans passer par la formule INDIRECT.

Dois-je obligatoirement passer par une macro ou une fonction VBA ?


Merci encore

On Aug 25, 6:05 pm, "MichDenis" wrote:
Tu as ma fonction ou tu dois écrire le chemin en dur dans tes formules.
Indirect() ne s'applique pas dans un classeur fermer. Et l'autre version
de la fonction Indirect.ext(), tu ne peux pas l'utiliser.

Ma fonction peut être modifié selon la manière dont tu aimerais
renseigner les paramètres de celle-ci !

"Serkanao" a écrit dans le message de groupe de discussion :

J'ai essayé mais pas vraiment réussi.. Je vais y travailler dessus
merci quand même..

Mais donc c'est impossible sans macro ? Parce que j'arrive à avoir mes
résultats sans que les fichiers ne soient ouverts. Je veux juste
m'éviter le travail manuel d'écrire les chemins d'accès pour chaque
classeur..

On Aug 25, 4:14 pm, "MichDenis" wrote:

> Bonjour Serkanao,

> Tu peux utiliser une fonction personnalisée si tu veux extraire
> seulement la valeur d'une cellule dans un fichier fermé.

> La fonction suivante doit être placé dans un module standard.
> Tu dois ajouter une référence à ton projet.
> Pour ce faire, à partir du menu de la fenêtre de l'éditeur de code
> Outils / Références / Et Tu coches :
> "Microsoft Activex Data Objects 2.8 Librairy"

> Pour appeler cette fonction à partir de ta feuille de calcul
> Exemple : dans les cellule suivantes, tu as l'information suivante:
> : Chemin et nom du fichier
> En A1 : C:UsersDMDocumentsExemple TDC.xls
> En A2 : Feuil1 'Nom de l'onglet de la feuille dans le classeur
> où tu veux
> En A3 : A2 'L'adresse de la cellule à extraire dans la Feuil1

> La ligne de commande s'écrit comme suit dans la cellule :
> ­o(A1;A2:A3)

> Que le classeur soit ouvert ou fermé, cela devrait fonctionner
> sauf si au même moment quelqu'un est en train de modifier
> le contenu de la cellule dont tu veux importer !
> '----------------------------------------
> Function Ado(File As Range, NomFeuille As Range, Cellule As Range)
> Dim Conn As New ADODB.Connection, Rst As New ADODB.Recordset
> Dim Requete As String, Plg As String

> Plg = Range(Cellule.Value).Address(0, 0)
> Set Conn = New ADODB.Connection
> Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=" & File.Value & ";" & _
> "Extended Properties=""Excel 8.0;HDR=NO;"""

> Requete = "SELECT * From [" & NomFeuille.Value & "$]" & Plg & ""
> Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic
> Ado = Rst(0).Value
> Rst.Close: Conn.Close
> Set Rst = Nothing: Set Conn = Nothing
> End Function
> '----------------------------------------

> "Serkanao" a écrit dans le message de groupe de discussion :
>
> Bonjour à tous..

> Voici mon problème :

> J'ai plusieurs classeurs nommés A, B, C, ... Ils ont tous le même
> format, les mêmes onglets avec les mêmes noms. Leur chemin d'accès est
> C:DossiersTableauxA.xls ; C:DossiersTableauxB.xls; C:Dossiers
> TableauxC.xls

> J'ai également un dernier classeur nommé "Récapitulatif". Celui-ci a
> un tableau regroupant les résumant les résultats.
> Par exemple;
> dans la cellule A1 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur A ( ='C:DossiersTableaux[A.xls]Onglet'!$X$2)
> dans la cellule A2 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur B( ='C:DossiersTableaux[B.xls]Onglet'!$X$2)
> dans la cellule A3 j'ai le résultat de la cellule X2 de l'onglet
> "Onglet" du classeur C( ='C:DossiersTableaux[C.xls]Onglet'!$X$2)
> ...
> Normalement cette formule ne marche que si le classeur de référence
> est ouvert mais avec la formule SOMMEPRODUIT j'arrive à contourner ça.
> ( SOMMEPRODUIT('C:DossiersTableaux[B.xls]Onglet'!$X$2)*1)

> Dans la colonne B j'ai justement les chemins d'accès de chaque
> classeur. Mon but serait de savoir comment insérer les chemins d'accès
> de cette colonne dans les cellules contenant les formules.

> CàD :

> A1 =SOMMEPRODUIT(B1)*1
> A2 =SOMMEPRODUIT(B2)*1
> A3 =SOMMEPRODUIT(B3)*1

> Je ne sais pas comment faire référence aux cellules de la colonne B.
> J'ai essayé : (" '&B1&'") et d'autres variantes mais j'ai toujours
> l'erreur #VALEUR qui apparait..

> Je ne sais pas si mon explication est assez claire. J'espère en tout
> cas que certains auront le courage de m'aider :)

> Merci d'avance.

> Salutations