Macro - Prise d'informations sur autre Classeur
Mesdames, Messieurs Bonsoir,
Je me permets de venir vers vous car cela fait plusieurs jours que j'essaie de mettre en lien 2 classeurs et je n'y arrive pas.
Les fonctions RechercheV ou Indirect ne peuvent m'aider à faire ce que je veux.
Je m'explique:
J'ai actuellement 2 Classeurs.
Sur le 1er classeur, que j'appellerai Pilotage 1, je souhaiterai que les cellules "E5", "E6" et "E7" se remplissent toutes seules en prenant l'information sur un autre fichier.
Cet autre fichier, que j'appellerai Horaires 2, est un planning horaire basique dans lequel je viens remplir les horaires effectués jour après jour (par secteur) et qui me calcule automatiquement les horaires réalisés sur toute la semaine (là encore par secteur).
L'objectif est donc que la cellule qui calcule les HEURES TOTALES (Cellule T30) aillent directement alimenter la cellule "E6" (Planning de la salle dans cet exemple).
J'aimerai donc créer un bouton "IMPORTS" - et dès que je clique sur ce bouton, les informations de la cellule T30 du Classeur 2 (Horaires) s'importent dans la cellule que je souhaite...(soit la E6 dans l'exemple).
J'espère avoir été clair.
Merci à toutes les personnes qui pourraient m'aider.
Beben.
Bonjour
Un essai à tester.
La mise à jour se fait à partir de n’importe quelle feuille active, que ce soit depuis un fichier ‘’horaires’’ ou depuis le fichier ‘’Pilotage’’
Il suffit de taper simultanément sur les touches Ctrl et i
Cela te convient-il ?
Bye !
A première vue c'est impeccable.
J'essaie de l'intégrer à mon "gros fichier" et je te fais un retour.
Grand Merci, c'est vraiment cool.
En revanche Deux questions:
1.Je souhaite sur le fichier "Pilotage" multiplier un nombre "standard" (12 dans l'exemple) par la cellule qu'on est allés chercher dans l'autre fichier (horaire) qui est "une heure"..Sauf que la multiplication n'est pas correcte, cela à cause du format de la cellule.
Soit le format est correct (en heure) mais la multiplication n'est pas bonne...ou si je mets en format "standard" cela ne correspond pas au réel montant...je ne sais pas si j'ai été très clair?
2. Il y aura à synchroniser plusieurs "cellules" dans le fichier pilotage: Salle / Cuisine / Animation et il y aura donc dans le fichier "Horaires" plusieurs feuilles d'horaires correspondant aux différents secteurs (par semaine).
Est-ce que la macro que tu as crée permet de différencier les différents secteurs et que chaque cellule s'importe dans les bons secteurs?
Là encore j'espère avoir été clair.
beben37 a écrit :Soit le format est correct (en heure) mais la multiplication n'est pas bonne...
L’opération sera correcte si la macro tien compte du bon format des heures : [h] :mm
Est-ce que la macro que tu as crée permet de différencier les différents secteurs et que chaque cellule s'importe dans les bons secteurs?
Il faudra l'adapter aux bons fichiers…
Bye !
J'ai essayé de l'intégrer à mon fichier.
Impossible.
La synchronisation ne se fait pas.
J'ai poutant copié collé la macro
Dans celle-ci j'ai "simplement" modifié la cellule "R5" qui correspond à l'endroit où doit s'importer les horaires.
Dois-je modifier autre chose?
Option Explicit
Dim sem, fdest, f, w
Sub Import()
If UCase(Left(ActiveWorkbook.Name, 8)) = "PILOTAGE" Then
sem = ActiveSheet.Name
Set fdest = ActiveSheet
For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
For Each f In w.Worksheets
If Split(f.Name, " ")(0) = sem Then
fdest.Range("R5") = f.Range("T30")
Exit For
End If
Next f
End If
Next w
ElseIf UCase(Left(ActiveWorkbook.Name, 8)) = "HORAIRES" Then
sem = Split(ActiveSheet.Name, " ")(0)
For Each w In Workbooks
If UCase(Left(w.Name, 8)) = "PILOTAGE" Then
For Each f In w.Worksheets
If f.Name = sem Then
f.Range("R5") = Range("T30")
Exit For
End If
Next f
End If
Next w
End If
End Sub
Sans le fichier, il m'est difficile de faire l'adaptation.
Désolé.
Bye !
Merci pour tes réponses.
Voici le fichier.
Si tu peux juste m'expliquer les modifs que tu as faits que je sache le faire une prochaine fois.
Merci encore.
Nouvelle version à tester.
Pour les modif, , il te suffit de comparer les 2 versions...
En revanche, tu as tout intérêt à faire attention :
La macro a besoin d’itentifier le fichier à partir duquel elle est lancée. L’un doit commencer par ‘’PILOTAGE’’ (8 premières lettres de son nom) et l’autre par ‘’horaire’’ (7 premières lettres de son nom).
S’ils s’appellent’’ PILOTAGE 2015’’ et ‘’horaire test’’, ce sera OK
Mais s’ils s’appellent ‘’Test PILOTAGE’’ ou ‘’test horaire’’, ça va buguer
Les noms que l’on retrouve dans les feuilles du fichier Pilote aux cellules O5, O6 et O7 doivent se retrouver dans le nom des feuilles du fichier horaire. La macro va buguer si au lieu de feuilles ‘’S39 CUISINE’’ elle ne trouve que la feuille ‘’S39 CUSINE’’ (sans le i).
OK ?
Bye !
Tout est impeccable et bien compris!
Bon j'ai voulu faire le malin et rajouter un autre lien sur la cellule L9 du fichier pilotage pour aller chercher une autre information sur un autre fichier excel (qui se prénomme Achat cette fois-ci).
J'ai voulu modifier toute ta macro...mais je pense m'être planté, pourtant j'y ai cru!
Je mets alors le fichier achat...
Désolé...
Merci
La modif (en gras)
Option Explicit
Dim sem, fdest, f, w, wh
Sub Import()
If UCase(Left(ActiveWorkbook.Name, 8)) = "PILOTAGE" Then
sem = ActiveSheet.Name
Set fdest = ActiveSheet
For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
On Error GoTo PasDeFeuille
fdest.Range("R5") = w.Sheets(sem & " CUISINE").Range("T30")
fdest.Range("R6") = w.Sheets(sem & " SALLE").Range("T30")
fdest.Range("R7") = w.Sheets(sem & " ANIMATION").Range("T30")
Exit For
End If
Next w
ElseIf UCase(Left(ActiveWorkbook.Name, 8)) = "PILOTAGE" Then
sem = ActiveSheet.Name
Set fdest = ActiveSheet
For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
On Error GoTo PasDeFeuille
fdest.Range("L9") = w.Sheets(sem & "ACHAT").Range("D31")
Exit For
End If
Next w
ElseIf UCase(Left(ActiveWorkbook.Name, 7)) = "HORAIRE" Then
Set wh = ActiveWorkbook
sem = Split(ActiveSheet.Name, " ")(0)
For Each w In Workbooks
If UCase(Left(w.Name, 8)) = "PILOTAGE" Then
On Error GoTo PasDeFeuille
Set f = w.Sheets(sem)
f.Range("R5") = wh.Sheets(sem & " " & "CUISINE").Range("T30")
f.Range("R6") = wh.Sheets(sem & " " & "SALLE").Range("T30")
f.Range("R7") = wh.Sheets(sem & " " & "ANIMATION").Range("T30")
Exit For
End If
Next w
ElseIf UCase(Left(ActiveWorkbook.Name, 5)) = "ACHAT" Then
Set wh = ActiveWorkbook
sem = Split(ActiveSheet.Name, " ")(0)
For Each w In Workbooks
If UCase(Left(w.Name, 8)) = "PILOTAGE" Then
On Error GoTo PasDeFeuille
Set f = w.Sheets(sem)
f.Range("L9") = wh.Sheets(sem & " " & "ACHAT").Range("D31")
Exit For
End If
Next w
End If
Exit Sub
PasDeFeuille:
MsgBox "L'une des feuilles est introuvable.", 16
Resume Next
End Sub
Un grand merci @gmb de m'avoir accordé du temps et de m'avoir aidé (pour pas dire.."tout fait").
Merci.
Je me permets de revenir vers vous car j'ai fait quelques modifications sur ce fameux fichier (avec un peu plus de macro).
Tout fonctionne parfaitement.
Sauf que voilà..je tombe face à un problème.
J'ai créer un nouvel onglet
"Novembre CE"
Dans cet onglet j'aimerai que les Frais de personnel soient directement alimentés (qu'il aille prendre l'info sur un autre fichier).
Ce fichier s'appelle "Frais de Personnel" et chaque Onglet comporte un mois de l'année (dans notre exemple Novembre).
Je n'arrive pas à faire le lien entre les deux..autant avant tout était liée au numéro de semaine...là tout est lié à un mois de l'année.
Je n'arrive donc pas.
L'idée est que la cellule "J28" du fichier "Frais de personnel" (Onglet Novembre) aille directement alimenter la cellule "G10" dans le fichier "Pilotage" (Onglet Novembre CE).
Je vous joins les fichiers XLS.
J'espère avoir été clair.
Merci encore..