Fichier paramétré-Import depuis fichier fermé-Macro auto

Bonjour à tous

1:

voila deja qqs jours 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)
  • ensuite, 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 doivent etre mis en

classeur caché

ou module

ou thisworkbook

pouvez vous m'aider ? merci d'avance

2:

par ailleurs j'ai essayé divers méthodes:

*** 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)

**** 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 d'avance pour votre aide

Bonsoir,

dans ton code, 2 petites erreurs :

. Tu as oublié le "\" entre le sous-répertoire et le fichier

. Il vaut mieux mettre la référence sous le type R1C1 que A1

Donc, essaie avec :

Private Function GetValue(A, B, C, D)
Dim Chemin As String
Chemin = "'" & A & "[" & B & "]" & C & "'!" & D
GetValue = ExecuteExcel4Macro(Chemin)
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 = "R5C2"
Repertoire = ActiveWorkbook.Path & "\"
Nom_Fich = "bilan-" & Annee - 1 & "essai.xls"
Valeur = GetValue(Repertoire, Nom_Fich, Feuille, Cellule)
End Sub

Si cela fonctionne....

Bonjour

merci pour ton aide Félix

j'ai fait les modifs que tu as préconisées

ca ne marche toujours pas : j'ai une erruer dans la ligne :

GetValue = ExecuteExcel4Macro(Chemin)

serait ce parce que j'ai mis:

Private Function GetValue(A, B, C, D)

et

Private Sub Workbook_open()

dans ThisWorbook et dans cet ordre ?

car je ne vois pas où est l'erreur.

Merci pour votre aide

Bonjour,

je pense que l'erreur vient de ton nom d'onglet...

tu as "résultat de l'année" avec une quote ( ' ) entre l et année...

Enlève le dans le code et sur ton nom d'onglet, et re-essaye

Super Félix

merci pour cette subtile mais fondamentale observation

ca marche.... merci 1000 fois

j'ai mis ces deux fonctions dans thisworkbook pour une execution automatique

les 2 doivent elles etre dans thisworkbook ou seulement Private Sub Workbook_open()

a ce moment la est ce que je mets Private Function GetValue(A, B, C, D)

D'autre part dois je prendre des précautions sur le classeur dans lequel il va chercher

la données que je veux: ouvert/fermé avant/après l'importation de la donnée?

dernières question: comment lui faire demander a l'utilisateur une année que la macro utilsera apres?

merci encore pour l'aide précieuse que vous m'apportez

Re-,

1/ Tu peux laisser les deux codes dans cette feuille

2/ Pas besoin d'ouvrir l'autre classeur, la valeur de la cellule est prise par le code

3/ Essaie en remplaçant Annee = 2008 par Annee = Year(Date) si tu veux les classeurs de l'année en cours

Sinon, par un inputbox :

exemple :

Annee = Val(InputBox("Entrez l'année désirée sous la forme 2008"))

MerCi Félix

1)

mais j'ai une erreur sur la ligne

Annee = Val(InputBox("Entrez l'année désirée sous la forme 2008"))

==> erreur de compilation , tableau attendu

que je declare annee en integer ou double

2) ca marche que le fichier dont j'importe des données soit ouvert ou fermé ?pas de precaution a prendre ?

3) pour un autre code :

Range("A1").Address(, , xlR1C1) <==== ca je pije pas?

tu peux m'éclairer ?

merci pour tes lumières ainsi que la rapidité et la justesse de tes réponses

rebonjour

erreur de ma part pour le 1)

j'avais une variable appelée Val que j'ai donc renommée et ca marche

Peut -on controler l'entrée ed l'année pour quelle soit sous le forme 2008 afin d'eviter toute erreur de saisie ?

peut on egalement controler l'existence du fichier auquel on fait appel et s'il n'existe pas mettre un message l'indiquant?

merci et desolé pour le 1) ...

Re-,

Oups, tu viens de répondre, j'allai te demander ton code entier.....

Attention, ne jamais mettre un nom propre à VBA comme variable

Si tu ne les connais pas tous ( ), lorsque tu tapes une variable, tu fais F1 dessus, et si tu as de l'aide, change de nom.....

pour l'année saisie, et l'existence du fichier, adapte le code suivant :

Private Sub Workbook_open()
Dim Annee As Double
Dim Repertoire As String
Dim Nom_Fich As String
Dim Feuille As String
Dim Cellule As String
Dim Valeur As Double
debut:
Annee = Val(InputBox("Entrez l'année désirée sous la forme 2008"))
If Len(Annee) <> 4 And Annee < 1900 Then
MsgBox "Format non valide"
GoTo debut
End If
Feuille = "Résultat de l'année"
Cellule = "R5C2"
Repertoire = ActiveWorkbook.Path & "\"
Nom_Fich = "bilan-" & Annee - 1 & "essai.xls"
With Application.FileSearch
        .LookIn = Repertoire
        .Filename = Nom_Fich
        .MatchTextExactly = True
    If .Execute() = 0 Then MsgBox "Fichier inexistant, Recommencez": GoTo debut
End With
Valeur = GetValue(Repertoire, Nom_Fich, Feuille, Cellule)
End Sub
22arrivee-depart.rar (136.89 Ko)

Rebonjour

ca semble si simple quand ont lit ce que tu écris ....

merci encore

par contre:

2) ca marche que le fichier dont j'importe des données soit ouvert ou fermé ?pas de precaution a prendre ?

3) pour un autre code :

Range("A1").Address(, , xlR1C1) <==== ca je pije pas?

peux tu m'eclairer ?

merci encore pour ton aide??

Re-,

1/ Fais des essais, tu verras.....qu'il soit fermé ou ouvert, pas de souci, il faut qu'il existe, c'est tout

2/ ce code te donne l'adresse A1 en R1C1

donc A6 te donne R6C1

regarde l'aide, en cliquant dans Address, et tapes sur F1

Edit : R signifie Row donc ligne, et C : Column

donc R6C1 veut dire la cellule de la ligne 6 et de la colonne 1, soit A6

Tu peux vérifier, en mettant dans Outils/Options, onglet Général, coche sur "Style de référence L1C1", et tu n'auras plus les A, B, C....mais 1, 2, 3.....

Rechercher des sujets similaires à "fichier parametre import ferme macro auto"