Excel et nom de fichier paramétré
Sarl
-
Sarl -
Sarl -
Bonjour,
J'ai un tableau excel (bilan_N.xls) où je rentre l'année N (ici N=2008)
je souhaite q'il aille chercher la valeur (de la case L2C2 par exemple) se trouvant dans un fichier
dont le nom depend de N
par exemple si j'ai rentré N=2008 ( je suis alors dans le fichier bilan_2008.xls), je voudrais qu'il aille chercher la valeur de la case L2C2 du fichier bilan_2007.xls
En fait si je suis dans le fichier bilan_N.xls je veux qu'il aille chercher des données dans bilan_N-1.xls
comment est ce possible.
merci
J'ai un tableau excel (bilan_N.xls) où je rentre l'année N (ici N=2008)
je souhaite q'il aille chercher la valeur (de la case L2C2 par exemple) se trouvant dans un fichier
dont le nom depend de N
par exemple si j'ai rentré N=2008 ( je suis alors dans le fichier bilan_2008.xls), je voudrais qu'il aille chercher la valeur de la case L2C2 du fichier bilan_2007.xls
En fait si je suis dans le fichier bilan_N.xls je veux qu'il aille chercher des données dans bilan_N-1.xls
comment est ce possible.
merci
A voir également:
- Excel et nom de fichier paramétré
- Fichier bin - Guide
- Fichier epub - Guide
- Word et excel gratuit - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
12 réponses
Bonjour,
Utilise une formule du genre :
=[bilan2007.xls]Feuil1!$A$1
qui renvoi dans la cellule ou tu la tape la case A1 de la feuille 1 du document bilan2007.xls
Utilise une formule du genre :
=[bilan2007.xls]Feuil1!$A$1
qui renvoi dans la cellule ou tu la tape la case A1 de la feuille 1 du document bilan2007.xls
Bonjour,
sait pas si j'ai bien compris ?
A+
sait pas si j'ai bien compris ?
Sub Ouvre()
Dim Fich As String
N = 2008
Fich = "bilan" & N - 1 & ".xls"
Workbooks.Open (Fich)
ActiveWorkbook.Sheets("Feuil1").Select
End Sub
A+
tu met tout dans un module
tu peu ainsi appeller les macros de n'importe où, mais change N par Annee,
N c'est trop simple pour une variable globale
public Fich As String
Public Annee as string
Sub Ouvre()
'si tu vient de la feuille.....
Annee = val(Right(activesheet.Name,4))
'si pas dans le même répertoir, ajouter le path
Fich = "bilan" & Annee - 1 & ".xls"
'RECTIFICATION
Workbooks (Fich).Open
ActiveWorkbook.Sheets("Feuil1").Select
End Sub
Sub Fermer()
'si le classeur a déjà été fermer
On error resume Next
Workbooks (Fich).Close
End Sub
tu peu ainsi appeller les macros de n'importe où, mais change N par Annee,
N c'est trop simple pour une variable globale
rebonjour à tous
1:
voila deja qqs heures que je planche sur mes macros et j'ai besoin de vos lumières:
je récapépette :
- j'ouvre un fichier excel 'bilan'ou une fenetre me demande de rentrer une année N ( ex 2008)
- de manière automatique il doit aller chercher les valeurs des cellules B5 et D7 de la feuille 'annexe' du fichier 'bilan_N-1'(donc ici 'bilan_2007') pour les mettre dans les cases C8 et E9 de la feuille 'resultat' du fichier bilan (si possible sans ouvrir le fichier 'bilan_2007')
- Demander si on veut faire une sauvegarde ( sous le nom 'bilan_N' donc ici 'bilan_2008)
D'autre part certains modules ou fonctions de la macro doivente etre mis en
classeur caché
module
ou thisworkbook
pouvez vous m'aider ? merci d'avance
2:
par ailleurs j'ai essayé:
Private Function GetValue(A, B, C, D)
'Récupération d'une valeur dans un fichier fermé
Dim Chemin As String
Chemin = "'" & A & "[" & B & "]" & C & "'!" & D
'Crée l'argument de la fonction XL4
GetValue = ExecuteExcel4Macro (Chemin)
'Exécute la macro XLM
End Function
Private Sub Workbook_open()
Dim Annee As String
Dim Repertoire As String
Dim Nom_Fich As String
Dim Feuille As String
Dim Cellule As String
Dim Valeur As Double
Annee = 2008
Feuille = "Résultat de l'année"
Cellule = "B5"
Repertoire = ActiveWorkbook.Path
Nom_Fich = "bilan-" & Annee - 1 & "essai.xls"
Valeur = GetValue(Repertoire, Nom_Fich, Feuille, Cellule)
End Sub
j'ai essayé plusieurs choses mais j'ai toujours un pb avec la syntaxe au niveau de ExecuteExcel4Macro (Chemin)
3: comment faire une fonction qui retourene une chaine de caractères (je m'en servirai pour le chemin d'autres valeurs qu'il me faudra chercher)
J'espère que j'ai été clair dans mes explications... merci pour votre aide
1:
voila deja qqs heures que je planche sur mes macros et j'ai besoin de vos lumières:
je récapépette :
- j'ouvre un fichier excel 'bilan'ou une fenetre me demande de rentrer une année N ( ex 2008)
- de manière automatique il doit aller chercher les valeurs des cellules B5 et D7 de la feuille 'annexe' du fichier 'bilan_N-1'(donc ici 'bilan_2007') pour les mettre dans les cases C8 et E9 de la feuille 'resultat' du fichier bilan (si possible sans ouvrir le fichier 'bilan_2007')
- Demander si on veut faire une sauvegarde ( sous le nom 'bilan_N' donc ici 'bilan_2008)
D'autre part certains modules ou fonctions de la macro doivente etre mis en
classeur caché
module
ou thisworkbook
pouvez vous m'aider ? merci d'avance
2:
par ailleurs j'ai essayé:
Private Function GetValue(A, B, C, D)
'Récupération d'une valeur dans un fichier fermé
Dim Chemin As String
Chemin = "'" & A & "[" & B & "]" & C & "'!" & D
'Crée l'argument de la fonction XL4
GetValue = ExecuteExcel4Macro (Chemin)
'Exécute la macro XLM
End Function
Private Sub Workbook_open()
Dim Annee As String
Dim Repertoire As String
Dim Nom_Fich As String
Dim Feuille As String
Dim Cellule As String
Dim Valeur As Double
Annee = 2008
Feuille = "Résultat de l'année"
Cellule = "B5"
Repertoire = ActiveWorkbook.Path
Nom_Fich = "bilan-" & Annee - 1 & "essai.xls"
Valeur = GetValue(Repertoire, Nom_Fich, Feuille, Cellule)
End Sub
j'ai essayé plusieurs choses mais j'ai toujours un pb avec la syntaxe au niveau de ExecuteExcel4Macro (Chemin)
3: comment faire une fonction qui retourene une chaine de caractères (je m'en servirai pour le chemin d'autres valeurs qu'il me faudra chercher)
J'espère que j'ai été clair dans mes explications... merci pour votre aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
re
une derniere question: je ne comprends pas la syntaxe de :
' Reconstitue le chemin complet qui conduit à la cellule cible
Cible = "'" & Chemin & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Range("A1").Address(, , xlR1C1)
en particulier : Range(Cellule).Range("A1").Address(, , xlR1C1)
merci pour votre aide
Bsr
une derniere question: je ne comprends pas la syntaxe de :
' Reconstitue le chemin complet qui conduit à la cellule cible
Cible = "'" & Chemin & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Range("A1").Address(, , xlR1C1)
en particulier : Range(Cellule).Range("A1").Address(, , xlR1C1)
merci pour votre aide
Bsr
ces fonctions ne viennent pas de ce topic, et comme tu ne les comprend pas, je suppose qu'elle viennent d'ailleur
Reconstitue le chemin complet qui conduit à la cellule cible
Cible = "'" & Chemin & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Range("A1").Address(, , xlR1C1)
en particulier : Range(Cellule).Range("A1").Address(, , xlR1C1)
Reconstitue le chemin complet qui conduit à la cellule cible
Cible = "'" & Chemin & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Range("A1").Address(, , xlR1C1)
en particulier : Range(Cellule).Range("A1").Address(, , xlR1C1)
Rebonjour
toutes mes escuses, je t'avais remercié mais j'ai pas commenté ta solution proposée.
Pour la réponse de Thanahthaus : ca ne va pas car ' =[bilan2007.xls]Feuil1!$A$1 ' doit dépendre de ANNEE et non de 2007. Merci quand même
Pour lermite222 :
public Fich As String
Public Annee as string
Sub Ouvre()
'si tu vient de la feuille.....
Annee = val(Right(activesheet.Name,4)) <=== ca je n'ai pas compris ce que cela faisait
'si pas dans le même répertoir, ajouter le path
Fich = "bilan" & Annee - 1 & ".xls"
'RECTIFICATION
Workbooks (Fich).Open
ActiveWorkbook.Sheets("Feuil1").Select
End Sub
²
Sub Fermer()
'si le classeur a déjà été fermer
On error resume Next
Workbooks (Fich).Close
End Sub
En fait cela ouvre le classeur pour y recuperer la feuille si j'ai bien compreis
Donc merci pour cette info
Toutefois maintenant j'aimerais essayer de faire cela le classeur fermé
J'ai donc farfouiller et j'ai trouvé le code que j'ai envoyé dans le message 7
mais je bloque sur la fonction ExecuteExcel4Macro sui me renoye une erreur 1004
( meme en ayant corrigé un \ sui semblait manquer)
De plus je ne comprends pas dans :
Range(Cellule).Range("A1").Address(, , xlR1C1)
l'utilité du .Address(, , xlR1C1)
Merci pour votre aide et désolé pour ma maladresse lermitte222 ...mille excuses
toutes mes escuses, je t'avais remercié mais j'ai pas commenté ta solution proposée.
Pour la réponse de Thanahthaus : ca ne va pas car ' =[bilan2007.xls]Feuil1!$A$1 ' doit dépendre de ANNEE et non de 2007. Merci quand même
Pour lermite222 :
public Fich As String
Public Annee as string
Sub Ouvre()
'si tu vient de la feuille.....
Annee = val(Right(activesheet.Name,4)) <=== ca je n'ai pas compris ce que cela faisait
'si pas dans le même répertoir, ajouter le path
Fich = "bilan" & Annee - 1 & ".xls"
'RECTIFICATION
Workbooks (Fich).Open
ActiveWorkbook.Sheets("Feuil1").Select
End Sub
²
Sub Fermer()
'si le classeur a déjà été fermer
On error resume Next
Workbooks (Fich).Close
End Sub
En fait cela ouvre le classeur pour y recuperer la feuille si j'ai bien compreis
Donc merci pour cette info
Toutefois maintenant j'aimerais essayer de faire cela le classeur fermé
J'ai donc farfouiller et j'ai trouvé le code que j'ai envoyé dans le message 7
mais je bloque sur la fonction ExecuteExcel4Macro sui me renoye une erreur 1004
( meme en ayant corrigé un \ sui semblait manquer)
De plus je ne comprends pas dans :
Range(Cellule).Range("A1").Address(, , xlR1C1)
l'utilité du .Address(, , xlR1C1)
Merci pour votre aide et désolé pour ma maladresse lermitte222 ...mille excuses
Bonjour,
Excuser moi de m'imposer dans votre topic, mais j'ai une routine en VBA qui permet de récupérer dans un fichier Excel fermé la valeur d'une cellule et de la copier dans le classeur actif. La voilà :
Il faut cocher dans Outils -> Références -> "Microsoft ActiveX Data Objects x.x Library" ainsi que "Microsoft ADO ext x.x for DLL and Security".
Il suffit de passer en paramètre : le chemin et le nom du fichier (ex: "C:\monProjet\monFichier.xls"), le nom de la feuille du fichier fermé qui contient la cellule à copier (ex: "Feuil1") et enfin la cellule qui contient la donnée (ex: "B2:B2").
Bon courage
;o)
polux
Excuser moi de m'imposer dans votre topic, mais j'ai une routine en VBA qui permet de récupérer dans un fichier Excel fermé la valeur d'une cellule et de la copier dans le classeur actif. La voilà :
Il faut cocher dans Outils -> Références -> "Microsoft ActiveX Data Objects x.x Library" ainsi que "Microsoft ADO ext x.x for DLL and Security".
Public Sub SearchWorkbookClose(ByVal fichier As String, ByVal feuille As String, ByVal cellule As String)
Dim cnx As ADODB.Connection
Dim query As String
Dim rs As ADODB.Recordset
Dim cnxCde As ADODB.Command
'Ne pas oublier le $ après le nom de la feuille
feuille = feuille & "$"
Set cnx = New ADODB.Connection
cnx.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
Set cnxCde = New ADODB.Command
With cnxCde
.ActiveConnection = cnx
.CommandText = "SELECT * FROM [" & feuille & cellule & "]"
End With
Set rs = New ADODB.Recordset
rs.Open cnxCde, , adOpenKeyset, adLockOptimistic
Set rs = cnx.Execute("[" & feuille & cellule & "]")
'affichage du résultat dans le classeur actif
ThisWorkbook.Worksheets(2).Range("A2").CopyFromRecordset rs
'fermeture connexion
rs.Close
cnx.Close
Set cnx = Nothing
Set rs = Nothing
Set cnxCde = Nothing
End Sub
Il suffit de passer en paramètre : le chemin et le nom du fichier (ex: "C:\monProjet\monFichier.xls"), le nom de la feuille du fichier fermé qui contient la cellule à copier (ex: "Feuil1") et enfin la cellule qui contient la donnée (ex: "B2:B2").
Bon courage
;o)
polux
Bonjour lermite222
Je ne l'ai pas inventé ... :o) ... en fait c'est des copier/coller de plusieurs bouts de code pris dans des exemples soi dans l'aide en ligne, soi sur des codes existant que j'ai adapté. Mais je pense que cette routine doit exister sur d'autres forum, je n'ai pas vérifié.
Elle fonctionne puisque je l'utilise.
Par contre, j'ai remarqué qu'il y avait beaucoup de demandes concernant les connexions Access en VB ou VBA. Je pourrai peut être proposer en astuce le module que j'ai fait et qui permet de se connecter, passer des requêtes et naviguer dans un recordset.
Je vais y penser.
@+
;o)
polux
Je ne l'ai pas inventé ... :o) ... en fait c'est des copier/coller de plusieurs bouts de code pris dans des exemples soi dans l'aide en ligne, soi sur des codes existant que j'ai adapté. Mais je pense que cette routine doit exister sur d'autres forum, je n'ai pas vérifié.
Elle fonctionne puisque je l'utilise.
Par contre, j'ai remarqué qu'il y avait beaucoup de demandes concernant les connexions Access en VB ou VBA. Je pourrai peut être proposer en astuce le module que j'ai fait et qui permet de se connecter, passer des requêtes et naviguer dans un recordset.
Je vais y penser.
@+
;o)
polux
Rebonjour merci pour vos reponses
----------------------------------------------------------------------------------------------------
lermite222 j'ai pas compris ta reponse ( je suis vraiment novice ) :)
1) Je connaissais pas non plus, mais en tapant la formule dans une sub, sélectionné Address et F1 <====?
2) j'ai toujours pas compris l'utilité de Address(, , xlR1C1) dans Range(Cellule).Range("A1").Address(, , xlR1C1)
car je pensais que la variable Chemin que j'avais créée me donnait la cellule à aller chercher alors pourquoi ce code?
Range(Cellule).Range("A1").Address(, , xlR1C1) et non pas seulement Range(Cellule) ???
merci pour tes lumieres
----------------------------------------------------------------------------------------------------
polux31
Il faut cocher dans Outils -> Références -> "Microsoft ActiveX Data Objects x.x Library" ainsi que "Microsoft ADO ext x.x for DLL and Security".
je ne trouve pas dans outils '-> Références ' (j'ai excel 2003 peut etre est ce pour cela ????)
j'aurais portant aimé tester ta méthode
--------------------------------------------------------------------------------------------------
Merci pour votre aide
----------------------------------------------------------------------------------------------------
lermite222 j'ai pas compris ta reponse ( je suis vraiment novice ) :)
1) Je connaissais pas non plus, mais en tapant la formule dans une sub, sélectionné Address et F1 <====?
2) j'ai toujours pas compris l'utilité de Address(, , xlR1C1) dans Range(Cellule).Range("A1").Address(, , xlR1C1)
car je pensais que la variable Chemin que j'avais créée me donnait la cellule à aller chercher alors pourquoi ce code?
Range(Cellule).Range("A1").Address(, , xlR1C1) et non pas seulement Range(Cellule) ???
merci pour tes lumieres
----------------------------------------------------------------------------------------------------
polux31
Il faut cocher dans Outils -> Références -> "Microsoft ActiveX Data Objects x.x Library" ainsi que "Microsoft ADO ext x.x for DLL and Security".
je ne trouve pas dans outils '-> Références ' (j'ai excel 2003 peut etre est ce pour cela ????)
j'aurais portant aimé tester ta méthode
--------------------------------------------------------------------------------------------------
Merci pour votre aide
>> Range(Cellule).Range("A1").Address(, , xlR1C1) et non pas seulement Range(Cellule) ??? <<
Je vais finir par comprendre -D
Cellule est un nom de plage que tu peu remplacer par ex: Range("A1")...
c'est dans CETTE CELLULE qu'est mis la valeur de la dernière ligne renseignée sur la feuille (initialisée)
Là on ne prend pas la valeur de cellule mais ont y met une valeur.
c'est comme qui dirais... Variable = Range("A1") , le N° de la dernière ligne
équivalent plus parlant.. et plus simple
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Compris ?
Je vais finir par comprendre -D
Cellule est un nom de plage que tu peu remplacer par ex: Range("A1")...
c'est dans CETTE CELLULE qu'est mis la valeur de la dernière ligne renseignée sur la feuille (initialisée)
Là on ne prend pas la valeur de cellule mais ont y met une valeur.
c'est comme qui dirais... Variable = Range("A1") , le N° de la dernière ligne
équivalent plus parlant.. et plus simple
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Compris ?
Rebonjour
J'ai aussi excel 2003. Dans l'éditeur Visual Basic, dans la barre de menu il y à "Outils -> Références ..."
je cherchais dans excel :)
merci je vais essayer
J'ai aussi excel 2003. Dans l'éditeur Visual Basic, dans la barre de menu il y à "Outils -> Références ..."
je cherchais dans excel :)
merci je vais essayer
reBonjour
merci pour la rapidité de vos réponses :)
J'ai toujours pas tout compris , desolé et merci de ta patience llermite222
Range("A1") ca renvoi la valeur qu'il y a dans A1?
Range("A1").Address(, , xlR1C1) <==== ca je pije toujours pas?
et plus particulièrement cela : Address(, , xlR1C1)
De plus :
Private Function GetValue(A, B, C, D) 'Récupération d'une valeur dans un fichier fermé
Dim Chemin As String
Chemin = "'" & A & "[" & B & "]" & C & "'!" & D 'Crée l'argument de la fonction XL4
LA, LE CHEMIN SEMBLE BON
GetValue = ExecuteExcel4Macro (Chemin) 'Exécute la macro XLM
End Function
Private Sub Workbook_open()
Dim Annee As String
Dim Repertoire As String
Dim Nom_Fich As String
Dim Feuille As String
Dim Cellule As String
Dim Valeur As Double
Annee = 2008
Feuille = "Résultat de l'année"
Cellule = "B5"
Repertoire = ActiveWorkbook.Path
Nom_Fich = "bilan-" & Annee - 1 & "essai.xls"
Valeur = GetValue(Repertoire, Nom_Fich, Feuille, Cellule)
End Sub
je ne comprends pas son dysfonctionnement au niveau de GetValue = ExecuteExcel4Macro (Chemin)
merci encore
je teste au fur et a mesure et je prends ds notes, si si si...
merci pour la rapidité de vos réponses :)
J'ai toujours pas tout compris , desolé et merci de ta patience llermite222
Range("A1") ca renvoi la valeur qu'il y a dans A1?
Range("A1").Address(, , xlR1C1) <==== ca je pije toujours pas?
et plus particulièrement cela : Address(, , xlR1C1)
De plus :
Private Function GetValue(A, B, C, D) 'Récupération d'une valeur dans un fichier fermé
Dim Chemin As String
Chemin = "'" & A & "[" & B & "]" & C & "'!" & D 'Crée l'argument de la fonction XL4
LA, LE CHEMIN SEMBLE BON
GetValue = ExecuteExcel4Macro (Chemin) 'Exécute la macro XLM
End Function
Private Sub Workbook_open()
Dim Annee As String
Dim Repertoire As String
Dim Nom_Fich As String
Dim Feuille As String
Dim Cellule As String
Dim Valeur As Double
Annee = 2008
Feuille = "Résultat de l'année"
Cellule = "B5"
Repertoire = ActiveWorkbook.Path
Nom_Fich = "bilan-" & Annee - 1 & "essai.xls"
Valeur = GetValue(Repertoire, Nom_Fich, Feuille, Cellule)
End Sub
je ne comprends pas son dysfonctionnement au niveau de GetValue = ExecuteExcel4Macro (Chemin)
merci encore
je teste au fur et a mesure et je prends ds notes, si si si...
justement
il faudrait avoir la ligne =[bilan2007.xls]Feuil1!$A$1 mais en remplacant 2007 par N
c'est a dire que le nom du fichier depende de N
et je fais varier mon N d'une année a l'autre
et ca ... je sais pas faire
quelqu'un sait il?
merci