Calcul sur deux fichiers différents
Cided
-
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Calcul sur deux fichiers différents
- Comment faire deux colonnes sur word - Guide
- Calcul moyenne excel - Guide
- Deux ecran pc - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
2 réponses
Bonjour,
Tu devrais essayer :
Tu devrais essayer :
=SOMME(INDIRECT("'C:\Users\MonNom\Desktop\"&A1&"\NomSoc.xlsx]Feuil1'&!B45"))
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.
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.
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 !
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 !
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
« É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.
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.
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 :
puis tu effaces A1 et cela donne
En A1 tu mets
Mais dans A1 tu viens rajouter le répertoire
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.
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
\[NomSocce 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.
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 ?
Normal, ;-)
il restait une coquille dans ma formule :
mais tu n'as pas besoine de SOMME :
tu auras le même résultat
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 ?
=SOMME("'C:\Users\MonNom\Desktop\"&C1&"\[NomSoc.xlsx]Feuil1'!"&B39:B40)
J'obtiens un #valeur! ... Dois-je recourir à une fonction Recherche ?
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é :
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.