Calcul sur deux fichiers différents

Cided -  
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je vous explique mon problème, j'ai différents documents sur mon bureau qui contiennent des fichiers excel. Sur une feuille de calcul (à part), je souhaiterais pouvoir choisir via une liste déroulante avec les noms des documents (et le nom du fichier excel concerné à l'intérieur qui porte le même nom).
La formule fonctionne lorsque je tape :
=SOMME('C:\Users\MonNom\Desktop\NomSoc\[NomSoc.xlsx]Feuil1'!B45)

Maintenant j'aimerais que ce "NomSoc" change en fonction du nom dans la lsite déroulante.

J'utilise la fonction INDIRECT mais peut être que je me trompe ?

Je vous joint mon fichier pour que vous puissiez mieux comprendre.
https://www.cjoint.com/c/HEFhdjF3MHy

Je vous remercie.

A voir également:

2 réponses

gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Tu devrais essayer :
=SOMME(INDIRECT("'C:\Users\MonNom\Desktop\"&A1&"\NomSoc.xlsx]Feuil1'&!B45"))
0
Cided
 
Bonjour,

Même problème j'obtiens un #ref! ...

Je pense que cela proviens du dernier guillemet ", ne gêne-t-il pas la fonction somme pour le calcul ?
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Normal, ;-)
il restait une coquille dans ma formule :
=SOMME(INDIRECT("'C:\Users\MonNom\Desktop\"&A1&"\NomSoc.xlsx]Feuil1!B45"))

mais tu n'as pas besoine de SOMME :
=INDIRECT("'C:\Users\MonNom\Desktop\"&A1&"\NomSoc.xlsx]Feuil1!B45")

tu auras le même résultat
0
Cided
 
Il me semble qu'il manque un: ' avant le !

Mais même en le rajoutant j'ai un #ref!

En effet ici la fonction somme n'est pas utile, mais dans une autre cellule j'utilise une somme donc le B45 est un B39:B45.

J'ai vérifié le nom de mes documents et les deux documents sont ouverts (mon fichier où je calcul et le fichier où sont les données)

Je ne vois pas d'où viens le problème car par exemple:
=SOMME('C:\Users\MonNom\Desktop\NomSoc\[NomSoc.xlsx]Feuil1'!B39:B40) fonctionne

Peut-être que la fonction indirect n'est pas la plus appropriée ? Mais alors comment récupérer le nom figurant dans la liste déroulante ?
0
Cided
 
En essayant :
=SOMME("'C:\Users\MonNom\Desktop\"&C1&"\[NomSoc.xlsx]Feuil1'!"&B39:B40)

J'obtiens un #valeur! ... Dois-je recourir à une fonction Recherche ?
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
il me semble qu'il manque un: ' avant le !
non il est de trop avant car il n'est utile qu'avec des espaces dans le nom des feuilles
les deux documents sont ouverts
Dans ce cas tu n'as pas besoin du chemin et ceci devrait fonctionner, j'ai testé :
=SOMME(INDIRECT("[NomSoc.xlsx]Feuil1!B39:B45"))

D'ailleurs INDIRECT ne fonctionne pas avec un classeur fermé.
Si tu veux le faire il faut passer en VBA et générer la formule dynamiquement lors de la modification de ta liste déroulante : c'est tout à fait possible.
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Voici donc ton classeur où les formules vertes devraient donc fonctionner chez toi.

J'ai rajouté les macros VBA pour changer les formules si tu modifies le répertoire dans A1.
Dans le code l'adresse A1 peut être changée de position pour une meilleure présentation de la feuille.

https://www.cjoint.com/c/HFbjJRQtHwl

Si tu es satisfait du résultat, il ne te restera qu'à copier le code dans ton classeur réel sur la feuille concernée.
Le suffixe du classeur .xlsx doit être modifié en .xlsm pour sauvegarder le code et il faut autoriser les macros dans les options excel.

Je reste bien sûr à ton écoute pour répondre à tes questions.
0
Cided
 
Salut,

Merci, en effet les formules changent lorsque je modifie maintenant. J'ai essayé de comprendre un peu ce que tu as fais.

Dans ton codage VBA (je ne sais pas si ca s'appelle comme ça!), tu mets:
cel.Formula = Replace(cel.Formula, "\" & avant & "\", "\" & sel.Value & "\")

Ce qui modifie dans la formule le texte en gras:
=SOMME('C:\Users\MonNom\Desktop\Nom_Soc\[NomSoc.xlsx]Feuil1'!B45)

Comment Excel sait-il qu'il doit modifier Nom_Soc et non pas Desktop par exemple qui est aussi entre "\"..."\" ?

Car en l’occurrence j'aimerais modifier cette formule pour que ces deux(en gras) se modifient en fonction de la cellule A1:
=SOMME('C:\Users\MonNom\Desktop\Nom_Soc\[NomSoc.xlsx]Feuil1'!B45)

J'ai pensé rajouter un :
And cel.Formula = Replace(cel.Formula, "[" & avant & ".xlsx", "[" & sel.Value & ".xslx")

Merci pour ton aide !
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Tu n'as rien à modifier en VBA, il te suffit de mettre "Nom_Soc\[NomSoc" en A1.
Lorsque tu sélectionnes A1, la valeur présente est récupérée dans la variable "avant" et lorsque tu valides la saisie en A1 (qui peut être faite par liste déroulante), la procédure change ce qui était par ce que tu as saisis.
Si tu as "Nom_Soc\[NomSoc" en A1 et que tu saisis "papamaman" ta formule (fausse !) deviendra
=SOMME('C:\Users\MonNom\Desktop\papamaman.xlsx]Feuil1'!B45)
et si tu remplaces en A1 par "Nom_Soc\[NomSoc" ta formule est rétablie.

« Élémentaire, mon cher Watson », si tu installes une liste déroulante positionnée où tu choisis ainsi que dans la macro, tu devrais avoir tous tes chiffres en un clic.

Bon après-midi.
0
Cided
 
Bonjour,

J'ai ce message qui apparait lorque je rentre Nom_Soc\[NomSoc en A1:
Erreur d’exécution '1004'
Erreur définie par l'application ou l'objet


Je ne comprends pas l'erreur.

Bonne journée
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Au temps pour moi, je n'avais pas regardé mon code que j'avais essayé de sécuriser à tord ^-^
Tu commences par simplifier ainsi le code :
                If InStr(cel.Formula, avant) Then   ' on vérifie si la précédente valeur est dans la formule
                    cel.Formula = Replace(cel.Formula, avant, sel.Value)
                End If                              ' les formules qui avaient l'ancienne valeur prennent la nouvelle

puis tu effaces A1 et cela donne
=SOMME('C:\Users\MonNom\Desktop\\[NomSoc.xlsx]Feuil1'!B45)

En A1 tu mets
\[NomSoc
ce qui ne change rien
Mais dans A1 tu viens rajouter le répertoire
Nom_Soc\[NomSoc

Et ensuite tu peux modifier toutes tes cellules en rajoutant un répertoire ou le supprimant comme tu veux.

Le classeur modifié : https://www.cjoint.com/c/HFfhXIWWN4l

Désolé je ne me souvenais plus que j'avais limité la modification au répertoire.
0