Excel et nom de fichier paramétré

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
A voir également:

12 réponses

Thanahthaus Messages postés 140 Statut Membre 27
 
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
0
Sarl
 
hélas non... ca je sais faire
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
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+
0
Sarl
 
Bonjour, oui et non ...
le N , je le rentre en dhors de la macro ....
et je ne sais pas quand ni ou ecrire cette macro car j'aimerais qu'une fois lesdonnées importées , le fichier bilan qui a ete ouvert se referme
merci
0
Sarl
 
Re Bonjour
pourquoi lermite222 ?
cela prolonge les reponses que j'ai dejà eues?
ou je me suis trompé quelque part ?
Merci pour votre aide
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
tu met tout dans un module

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
0
Sarl
 
Merci
je vais essayer de regarder ca mais , macro,module c du chinois pour moi donc fo vraiment que je prenne tout a la base
+
0
Sarl
 
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
0

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

Posez votre question
Sarl
 
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Tu t'est trompé de topic ou de forum...
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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)
0
Sarl
 
Rebonjour
tu supposes bien
comme je t'ai dit je cherche depuis quelques jours et don sur ggogle entre autre
j'esaye de comprendre mais suis novice donc je demande sur ce forum
Je pensais que c'était un de ses buts ?
Merci
0
lermite222 Messages postés 9042 Statut Contributeur 1 191 > Sarl
 
Bien entendu que c'est le but d'aider, et le mien aussi d'ailleur.
Mais tu pourrais avoir la politesse, avant de REPOSER TA QUESTION avec un code venu dailleur de commenter la réponse QUE J'AI PRIS LE TEMPS DE TE PROPOSER.
0
Sarl
 
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Je connaissais pas non plus, mais en tapant la formule dans une sub, sélectionné Address et F1... et voilou.
A+
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
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".
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour Polux,
Si tu n'a pas fait un copier coller d'un autre forum.
Si tu a tester cette fonction et qu'elle fonctionne impec.
Tu pourrait faire une proposition d'astuce dans Suggestion..
J'ai vérifié, ca existe pas encore.
A+
0
Polux31 Messages postés 7219 Statut Membre 1 204 > lermite222 Messages postés 9042 Statut Contributeur
 
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191 > Polux31 Messages postés 7219 Statut Membre
 
J'ai pas parler de l'inventer, mais de copier/coller, si tu l'a adapter en piquant des bouts un peu partout et qu'ont ne la retrouve pas mots pour mots c'est nickel.
A+
0
Sarl
 
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
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
J'ai aussi excel 2003. Dans l'éditeur Visual Basic, dans la barre de menu il y à "Outils -> Références ..."

;o)
0
lermite222 Messages postés 9042 Statut Contributeur 1 191 > Polux31 Messages postés 7219 Statut Membre
 
Par hazard.. t'aurais pas un VB6 ou autre..
0
Polux31 Messages postés 7219 Statut Membre 1 204 > lermite222 Messages postés 9042 Statut Contributeur
 
Oui j'ai aussi VB6 ...
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
>> 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 ?
0
lermite222 Messages postés 9042 Statut Contributeur 1 191 > Polux31 Messages postés 7219 Statut Membre
 
M'en doutait et me demande si ADO n'est pas exclusif à VB..
Bien que si ont l'a, ont peu l'employer en VBA.
0
Sarl
 
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
0
Sarl
 
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...
0