renvoyer la valeur d'une cellule d'un autre classeur

estivill

XLDnaute Nouveau
bonjour,

je souhaiterai renvoyer la valeur d'un autre classeur dans une cellule...... trop facile ? ..... j'aimerai que la formule aille cherche le nom du classeur en colonne A
et c'est là que j'ai besoin de vous...
j'ai essayé avec
=INDIRECT("\["&A3&".xlsm]"&G1&"'!$H$46";VRAI)
mais il me marque #REF

Si vous avez une idée...

merci d'avance
 

Pièces jointes

  • FICHIER EN LIGNE.xlsm
    24.5 KB · Affichages: 5

estivill

XLDnaute Nouveau
bonjour,
oui ce fichier est fermé,
je me suis servi d'INDIRECT sur un classeur semblable pour aller fouiller dans mes différentes feuilles alors je pensais pouvoir l'adapter ici

je met en pj le modèle de classeur où il va chercher les infos, enfin où j'aimerai qu'il aille chercher l'info
 

Pièces jointes

  • ISABELLE - pointage.xlsm
    146.4 KB · Affichages: 9

Eric_angers

XLDnaute Nouveau
Bonjour,

Voici ma méthode :

Classeur_Actuel=ActiveWorkbook.Name ' Sauve le nom de l'actuel classeur
Classeur_Source=cells(...) ' cellule où se trouve le nom du classeur (avec chemin)
Workbooks.Open Filename:=Classeur_Source ' Ouvre le classeur source (erreur si absent) et l'active

Workbooks(Classeur_Actuel).Activate ' repasse dans le classeur actuel
' Affecte la valeur
Cells(?,?) = Workbooks(Classeur_Source).Worksheets("Nom de la feuille").Cells(?,?).Value

' Referme le classeur source sans sauvegarde
Workbooks(Classeur_Source).Close SaveChanges:=False


Remplacer les ? par les références des cellules d'origine et de destination

Bonne journée
 

Eric_angers

XLDnaute Nouveau
Je suppose qu'il y a un classeur par agent ?

Dans ce cas il faut renseigner plusieurs cellules avec les noms des classeurs et faire une boucle For/next sur cette liste.

Comme ceci : (les noms de classeurs sont dans les cellules A1 à Annn)
une cellule vide détermine la fin de liste

Classeur_Actuel=ActiveWorkbook.Name ' Sauve le nom de l'actuel classeur

dim i as integer
for i=1 to 65000 ' on sortira avant !
Classeur_Source=cells(i,1) ' Nom du classeur (avec chemin)
if Classeur_Source="" then exit for ' Fin si cellule vide
Workbooks.Open Filename:=Classeur_Source ' Ouvre le classeur source
Workbooks(Classeur_Actuel).Activate ' repasse dans le classeur actuel
' Affecte la valeur
Cells(?,?) = Workbooks(Classeur_Source).Worksheets("Nom de la feuille").Cells(?,?).Value
' Referme le classeur source sans sauvegarde
Workbooks(Classeur_Source).Close SaveChanges:=False
next i

Cet exemple montre la méthode, mais si le nombre de salariés est important, il faudra se tourner
vers une application plus pointue.

Bon courage à vous.
 

estivill

XLDnaute Nouveau
re,
je bloque sur la partie rouge, erreur de compile n°9.....

Sub traqueur_de_données()
'
' traqueur_de_données Macro
'
Classeur_Actuel = ActiveWorkbook.Name ' Sauve le nom de l'actuel classeur

Dim i As Integer
For i = 7 To 13 ' boucle de test
Classeur_Source = Workbooks(Classeur_Actuel).Worksheets("RECAPITULATIF").Cells(i, 1) ' Nom du classeur (avec chemin)
If Classeur_Source = "" Then Exit For ' Fin si cellule vide
Workbooks.Open Filename:=Classeur_Source ' Ouvre le classeur source
Workbooks(Classeur_Actuel).Activate ' repasse dans le classeur actuel
' Affecte la valeur
Workbooks(Classeur_Actuel).Sheets("RECAPITULATIF").Range("E7") = Workbooks(Classeur_Source).Sheets("JANVIER").Range("H45").Value
' Referme le classeur source sans sauvegarde
Workbooks(Classeur_Source).Close SaveChanges:=False
Next i
'
End Sub

merci
 

estivill

XLDnaute Nouveau
je mets les fichiers sur lesquels je travaille,
mon but est de faciliter la saisie de données de notre secrétaire.

chaque agent a un classeur nommé : "NOM Prénom - pointage"
le but est de venir dans ces classeurs récupérer certaines cellules et les renvoyer dans le fichier récap nommé : "000 - Récapitulatif Heures Mensuels - Modèle"

exemple pour janvier,
il devrait aller chercher dans le classeur des agents sur la feuille JANVIER les cellules
H45 de janvier de l'agent = E7 du récap
I45 de janvier de l'agent = F7 du récap
J45 de janvier de l'agent = I7 du récap

merci d'avance
 

Pièces jointes

  • 000 - Récapitulatif Heures Mensuels - Modèle.xlsm
    44.4 KB · Affichages: 4
  • DUPONT Marc - pointage.xlsm
    59.5 KB · Affichages: 4

Eric_angers

XLDnaute Nouveau
Bonjour,

En effet il y une petite erreur dans le code

Voici la correction : (une ligne à rajouter)

Sub traqueur_de_données()
'
' traqueur_de_données Macro
'
Classeur_Actuel = ActiveWorkbook.Name ' Sauve le nom de l'actuel classeur

Dim i As Integer
For i = 7 To 13 ' boucle de test
Classeur_Source = Workbooks(Classeur_Actuel).Worksheets("RECAPITULATIF").Cells(i, 1) ' Nom du classeur (avec chemin)
If Classeur_Source = "" Then Exit For ' Fin si cellule vide
Workbooks.Open Filename:=Classeur_Source ' Ouvre le classeur source et l'active

' Le classeur source est activé
Classeur_Source = ActiveWorkbook.Name ' Remplace le nom avec chemin par le nom du classeur sans chemin

Workbooks(Classeur_Actuel).Activate ' repasse dans le classeur actuel
' Affecte la valeur
Workbooks(Classeur_Actuel).Sheets("RECAPITULATIF").Range("E7") = Workbooks(Classeur_Source).Sheets("JANVIER").Range("H45").Value
' Referme le classeur source sans sauvegarde
Workbooks(Classeur_Source).Close SaveChanges:=False
Next i
'
End Sub

Pour ouvrir le classeur source, il faut le nom avec chemin, mais pour travailler avec, il faut juste le nom du classeur (sans chemin)

J'ai testé et cela fonctionne

Bonne journée
 

Eric_angers

XLDnaute Nouveau
Lorsque l'on travaille avec des fichiers, le chemin d'accès doit être en absolu.
L'instruction "Workbooks.Open Filename:=Classeur_Source" déclenchera une erreur si le fichier est absent. Il suffit de tester l'erreur, d'afficher un message et sortir de la procédure.

Exemple
If Classeur_Source = "" Then Exit For ' Fin si cellule vide
On Error Resume Next
Workbooks.Open Filename:=Classeur_Source ' err si absent
i0 = Err.Number
On Error GoTo 0
If i0<> 0 Then
' erreur :
If i0 = 1004 Then
MsgBox "Le classeur [" & Classeur_Source & "] n'existe pas ! ", vbCritical, "Anomalie"
i0 = -1 ' Pointeur pour test en sortie de la boucle for/next
Exit for
Else
Err.Raise i0 ' autre erreur envoie un message système et fin
End
End If
End If

....
next i
if i0=-1 then
MsgBox "Opération abandonnée", vbCritical, "Anomalie"
exit sub
end if

... Suite si tout est ok
 

Discussions similaires

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 821
dernier inscrit
hybroxis