Calcul sur deux fichiers différents

Fermé
Cided - 31 mai 2018 à 09:05
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 5 juin 2018 à 09:52
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
31 mai 2018 à 09:25
Bonjour,

Tu devrais essayer :
=SOMME(INDIRECT("'C:\Users\MonNom\Desktop\"&A1&"\NomSoc.xlsx]Feuil1'&!B45"))
0
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
31 mai 2018 à 10:12
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
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
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
Modifié le 31 mai 2018 à 11:58
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
1 juin 2018 à 11:42
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
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
4 juin 2018 à 13:54
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
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
5 juin 2018 à 09:52
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