Changer un nom de fichier automatiquement par une variable

Résolu/Fermé
robbybasch
Messages postés
89
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
21 septembre 2017
- 28 déc. 2014 à 17:08
robbybasch
Messages postés
89
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
21 septembre 2017
- 30 déc. 2014 à 14:41
Bonjour
Je travail sur excel 2010 et je réalise un classeur de comptabilité pour une association.
1- Mon problème :
Dans le bilan de compta, je réalise un écart entre l'année actuelle et l'année -1. je vais donc chercher des données dans le classeur de l'an dernier dont le nom de fichier est : '[2013_comptabilité.xlsm]bilan'E10. Dans cette feuille j'ai 30 fois cette formule. Lorsque la nouvelle année arrive, je change dans ma feuille "données" l'année d'exercice dans une cellule que j'ai nommée année_dexercice.
2- Question :
Est-il possible de placer "année_dexercice" en variable afin de remplacer automatiquement la formule de l'année précédente dans le nom de fichier (par ex [année_dexercice_comptabilité.xlsm]bilan'E10 afin de m'éviter de recopier en changeant l'année, toutes les formules pour les écarts dans le bilan et également dans la feuille compte de résultat ou j'ai la même formule.
Je pense que par une fonction, ce n'est pas possible (du moins je n'ai pas trouvé), serait ce possible par une macro VBA. je ne connais le langage, si quelqu'un peut me booster un peu de ce coté là, cela serait super..
Je vous remercie par avance de vos suggestions
Robby

6 réponses

via55
Messages postés
13593
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
20 mai 2022
2 400
Modifié par via55 le 29/12/2014 à 00:41
Bonsoir

C'est possible avec la fonction INDIRECT à condition que le classeur source soit ouvert en même temps que le classeur cible :

- Mettre la variable année dans une cellule, par exemple en B1
- Remplacer la formule par :
=INDIRECT("'[" & B1 & "_comptabilité.xlsm]bilan'!E10")

Bien sûr B1 peut être nommée et c'est ce nom qui sera alors mis dans la formule (utile surtout si on veut placer la donnée B1 dans un autre onglet)

Cdlmnt

"L'imagination est plus importante que le savoir." A. Einstein
0
robbybasch
Messages postés
89
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
21 septembre 2017

29 déc. 2014 à 10:33
Bonjour
merci de votre réponse qui fonctionne parfaitement. Mais comme vous le dites dans le post, il est nécessaire d'ouvrir le fichier de l'année précédente. La comptable qui va utiliser ce fichier ne pensera pas forcement à ouvrir les deux documents en même temps, c'est là que cela risque de bloquer. C'est pour cela que je m'orientais vers une macro et que j'ai fait appel à la liste car je ne connais pas le langage.
Néanmoins c'est super sympa d'avoir répondu si rapidement, je vous remercie encore via55. Je ne connaissais pas la fonction indirect que j'ai ajoutée de suite à mon répertoire de connaissance.
CDL
Robby
0
robbybasch
Messages postés
89
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
21 septembre 2017

29 déc. 2014 à 10:59
Excusez moi, c'est encore moi... je suis en train de penser (dans l'info on n'arrête pas de penser même la nuit), par la fonction indirect j'ouvre mes deux fichiers une 1ère fois en fin d'année, je mets à jour l'année suivante par cette fonction et là... il faudrait une macro qui permettent de garder dans la cellule année-1 le contenu donnée par la fonction indirect, cela pourrait même être à coté de la cellule. Je masquerai la colonne ou se trouve la fonction indirect. Y aurait-il une âme dévouée pour me faire cela en macro ???
CDL
Robby
0
via55
Messages postés
13593
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
20 mai 2022
2 400
29 déc. 2014 à 12:14
Bonjour

Pour pouvoir lire dans un classeur fermé il faut indiquer le chemin complet du fichier dans la formule mais avec le chemin complet la fonction INDIRECT ne fonctionne pas
Une autre solution consisterait à indiquer le chemin complet dans la référence d'un nom défini et d'utiliser ce nom dans les formules. Pour changer d'année il suffira de changer l'année dans la référence du nom.
voir ici : https://www.commentcamarche.net/faq/32961-vba-excel-lire-dans-un-classeur-ferme

Cdlmnt
0
robbybasch
Messages postés
89
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
21 septembre 2017
> via55
Messages postés
13593
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
20 mai 2022

29 déc. 2014 à 12:22
merci
J'essaie tout cela demain.. et vous tiens au courant.
CDL
Robby
0
michel_m
Messages postés
16568
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 mai 2022
3 280
Modifié par michel_m le 29/12/2014 à 14:03
Vonjour

Une méthode à adapter
Macro dite de Walkenbach

Sub lire_ferme()
Dim chemin As String, milesime as integer
chemin = ThisWorkbook.Path ' A ADAPTER
milesime = ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R2C1") 'R2C1=A2, NOM DU CLASSEUR A ADAPTER
Msgbox "nomduclasseur" & milesime
End Sub

Michel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
robbybasch
Messages postés
89
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
21 septembre 2017

29 déc. 2014 à 17:57
Bonsoir Michel
Excuse moi, mais je suis complétement ignare sur les macros. Sur excel lui même sans macro je me débrouille mais je suis zéro pointé dans les macros. Donc si tu peux m'éclaircir le code cela me serait d'un grand secour. je vous donne les infos suivantes :
le chemin est : F:\Poney Club du Moulin\Comptabilité\
dans ce dossier j'ai l'actuelle compta : 2014_comptabilité.xlsm avec entre autres une feuille 'bilan' et une feuille 'compte de résultat' et le futur 2015_comptabilité.xlsm avec entre autres une feuille 'bilan' et une feuille 'compte de résultat' qui sont actuellement vides car l'année n'est pas encore commencée sauf que dans le fichier 2015 je dois lire les infos 2014 et les placer dans cette feuille 2015..
Merci par avance de votre aide
CDL
Robby
0
robbybasch
Messages postés
89
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
21 septembre 2017

30 déc. 2014 à 14:41
Bonjour
Ne connaissant pas grand chose au VBA, j'ai cherché, tatonné à partir de ce que mes deux profs m'ont indiqué, par ailleurs je les remercie grandement car sans eux je serai tjs en train de chercher et j'ai fini par trouver la bonne solution (à mes yeux, peut être y a t'il plus simple). Je vous la communique si quelqu'un d'autres est à la recherche du même problème que le mien.
CDL
Robby
Et un grand merci à via55 et michel_m


Sub ImporterDonneesSansOuvrir()

Dim Chemin As String, Fichier As String
Chemin = "F:\Poney Club du Moulin\Comptabilité\"
Fichier = "2014_Comptabilité Poney Club.xlsm"
'Plage D8 à D21
ThisWorkbook.Names.Add "plage", _
RefersTo:="='" & Chemin & "[" & Fichier & "]Compte de résultat général'!$C$8:$C$21"
With Sheets("Compte de résultat général")
.[D8:D21] = "=plage"
.[D8:D21].Copy
Sheets("Compte de résultat général").Range("$D$8:$D$21").PasteSpecial xlPasteValues
'.[D8:D21].Clear
End With

'Plage1 D27 à D55

ThisWorkbook.Names.Add "plage1", _
RefersTo:="='" & Chemin & "[" & Fichier & "]Compte de résultat général'!$C$27:$C$55"
With Sheets("Compte de résultat général")
.[D27:D55] = "=plage1"
.[D27:D55].Copy
Sheets("Compte de résultat général").Range("$D$27:$D$55").PasteSpecial xlPasteValues
' .[D27:D55].Clear
End With

'Plage2 D61 à D63

ThisWorkbook.Names.Add "plage2", _
RefersTo:="='" & Chemin & "[" & Fichier & "]Compte de résultat général'!$C$61:$C$63"
With Sheets("Compte de résultat général")
.[D61:D63] = "=plage2"
.[D61:D63].Copy
Sheets("Compte de résultat général").Range("$D$61:$D$63").PasteSpecial xlPasteValues
' .[D27:D55].Clear
End With

'Plage3 D69 à D76

ThisWorkbook.Names.Add "plage3", _
RefersTo:="='" & Chemin & "[" & Fichier & "]Compte de résultat général'!$C$69:$C$76"
With Sheets("Compte de résultat général")
.[D69:D76] = "=plage3"
.[D69:D76].Copy
Sheets("Compte de résultat général").Range("$D$69:$D$76").PasteSpecial xlPasteValues
' .[D27:D55].Clear
End With

'Plage4 D80 à D82
ThisWorkbook.Names.Add "plage4", _
RefersTo:="='" & Chemin & "[" & Fichier & "]Compte de résultat général'!$C$80:$C$82"
With Sheets("Compte de résultat général")
.[D80:D82] = "=plage4"
.[D80:D82].Copy
Sheets("Compte de résultat général").Range("$D$80:$D$82").PasteSpecial xlPasteValues
' .[D27:D55].Clear
End With

'Plage5 D90 à D98
ThisWorkbook.Names.Add "plage5", _
RefersTo:="='" & Chemin & "[" & Fichier & "]Compte de résultat général'!$C$90:$C$98"
With Sheets("Compte de résultat général")
.[D90:D98] = "=plage5"
.[D90:D98].Copy
Sheets("Compte de résultat général").Range("$D$90:$D$98").PasteSpecial xlPasteValues
' .[D27:D55].Clear
End With


End Sub
0