Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeur

dj-spirit

XLDnaute Nouveau
Bonjour,

Je suis inscrit depuis longtemps sur votre forum, je n'avais pas eu de soucis jusqu'à ce jour :cool: , je seche totalement .
Je vous explique mon problème.
J'ai comme OS : vista et xp
Version d'office 2003 à 2007

J'ai un classeur qui s'apelle heures à recuperer là ou je vais trouver un onglet récapitulatif de toutes les heures à devoir ou que les personnes doivent et un onglet par personnes là ou je rentres les valeur.
Et une 2eme recap jour.
Je voudrais , lorsque je rentre dans ce classeur, que pour x ou y personne, si la date rentré correspond à celle du jour( dans mon classeur recap jour) cela le remplisse automatique dans la case nom et que le temps en plus ou en moins se mettent dans la bonne colonne.
Est-ce vaisable.
J'aimerais bien que cela reste sous forme de deux classeurs car j'ai d'autres choses à coté.
Si cela doit etre sous le même classeur pourquoi pas, à voir ?
Je seche totalement .
je vous remercie par avance de votre aide.
 

Pièces jointes

  • recap jour.xls
    25.5 KB · Affichages: 104
  • heure à recuperer test.xls
    28.5 KB · Affichages: 120

job75

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Bonjour dj-spirit,

On peut faire la recap du jour dans un autre fichier ou dans le même c'est du même acabit.

Mais avant de se lancer dans la macro, deux questions :

- dans le fichier recap jour.xls, pourquoi 2 tableaux Nom et prénom/Temps/Motifs ??

- dans l'autre fichier, je ne vois pas de Motifs ??

A+
 

dj-spirit

XLDnaute Nouveau
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Bonjour dj-spirit,

On peut faire la recap du jour dans un autre fichier ou dans le même c'est du même acabit.

Mais avant de se lancer dans la macro, deux questions :

- dans le fichier recap jour.xls, pourquoi 2 tableaux Nom et prénom/Temps/Motifs ??

- dans l'autre fichier, je ne vois pas de Motifs ??

A+
Pourquoi 2 tableau : Si tu veux l'element que tu as représente une partie seulement de mon document final excel, je ne peux pas depasser autant de hauteur pour ma mise en page.
Alors là tu as 8 lignes, mais dans certains tableau je peux en avoir plus .

Le motifs je le rentre mois même en liste déroulante car il peut y avoir plusieurs motifs .

Cela répond t-il à tes questions?
Merci
 

job75

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Bonjour dj-spirit,

Voir le fichier recap jour(1) ci-joint.

1) Formule matricielle en B18, à valider par Ctrl+Maj+Entrée :

Code:
=SOMME(SI(MOD(COLONNE(DECALER(A10:A17;;;;140));7)=4;DECALER(A10:A17;;;;140)-DECALER(A10:A17;;1;;140)))

Elle permet de travailler sur 20 tableaux accolés de 7 colonnes.

2) La macro dans Module1 (Alt+F11) est conséquente :cool:

Code:
Option Explicit

Sub Recuperation()
Dim nomfichier$, chemin$, tablo As Range, ligne1 As Byte, colPlus As Byte
Dim h As Byte, L As Byte, lig As Byte, ouv As Boolean, w As Worksheet, i As Long
Application.ScreenUpdating = False
'---à adapter éventuellement---
nomfichier = "heure à recuperer test.xls"
chemin = ThisWorkbook.Path & "\" & nomfichier
With ThisWorkbook.Sheets("Stat")
  Set tablo = .[A6:G6].Resize(.[A200].End(xlUp).Row - 6)
End With
ligne1 = 5 '1ère ligne de tablo à remplir
colPlus = 4 'colonne "Plus"
'---initialisation---
h = tablo.Rows.Count
L = tablo.Columns.Count
lig = ligne1
tablo.Rows(lig & ":" & h).ClearContents 'effacement des données
tablo.Offset(, L).Resize(, 133).Clear 'pour 19 tableaux de 7 colonnes...
'---ouverture du fichier s'il n'est pas ouvert---
On Error Resume Next
If IsError(Workbooks(nomfichier).Name) Then
  If IsError(Workbooks.Open(chemin)) Then _
    MsgBox "'" & nomfichier & "' est introuvable !", 48: Exit Sub
  ouv = True 'repère
End If
On Error GoTo 0
'---étude des feuilles du fichier et transferts---
Application.Calculation = xlManual 'évite le recalcul des formules
For Each w In Workbooks(nomfichier).Worksheets
  If w.Name <> "Général" Then
    For i = 2 To w.Cells(65536, 1).End(xlUp).Row - 1
      If w.Cells(i, 1) = Date Then
        If lig > h Then 'extension du tableau
          tablo.Copy tablo.Offset(, L)
          Set tablo = tablo.Offset(, L)
          lig = ligne1
          tablo.Rows(lig & ":" & h).ClearContents
        End If
        tablo.Cells(lig, 1) = w.Name
        tablo.Cells(lig, colPlus) = w.Cells(i, "B")
        tablo.Cells(lig, colPlus + 1) = w.Cells(i, "E")
        lig = lig + 1
      End If
    Next
  End If
Next
Application.Calculation = xlAutomatic
'---fermeture du fichier s'il a été ouvert---
If ouv Then Workbooks(nomfichier).Close False
End Sub

Pour cette macro, transférer les 2 fichiers zippés dans le même dossier.

A+
 

Pièces jointes

  • recap jour(1).zip
    20.4 KB · Affichages: 71

dj-spirit

XLDnaute Nouveau
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Oula quel boulot!!!!!!
Chapeau :cool: , merci énormement .
je regarde ca aujourd'hui et je reviens vers toi si j'ai besoin, et je pense que j'aurais des questions à te poser :) .
 

dj-spirit

XLDnaute Nouveau
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Wahouuuuuuuuuuuuu je viens de tester, excellent , magnifique ce que tu as fais .
Faut vraiment que je me mettes à bosser sur les macros .

J'ai plusieurs petites questions pour toi si tu n'y vois pas d'inconvenients .
Là c'etait 2 classeurs simplifié .
Comment je fais pour déplacer et appliquer cette macro sur mes autres fichiers .
En gros j'ai 3 fichiers heures à recuperer avec 3 noms differents, cela induit que j'ai aussi 3 tableau récap du jour mais qui eux sont dans le même classeur. Cela posse t-il un probleme pour les macros?
Comment puis-je appliquer ceci?
Que dois-je modifier dans la macro les chemins d'acces ?

c'est idem pour ta formule en cellule B18: j'ai juste à la dupliquer sur mes autres tableaux ? par contre elle ne sera pas obligatoirement en B18 .
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Re,

Il suffit de paramétrer correctement la macro.

Dans le fichier recap jour(2).xls joint, on paramètre dans l'ordre :

- le nom du fichier étudié

- le nom de la feuille qui récupère ses données

- l'adresse du tableau initial.

Dans ThisWorkbook la macro Recuperation est exécutée 3 fois :

Code:
Private Sub Workbook_Open()
Recuperation "heure à recuperer test(1).xls", "Stat(1)", "A6:G17"
Recuperation "heure à recuperer test(2).xls", "Stat(2)", "A3:G14"
Recuperation "heure à recuperer test(3).xls", "Stat(3)", "A8:G19"
Me.Saved = True 'évite le message à la fermeture si pas d'autres modifications
End Sub

A+
 

Pièces jointes

  • recap jour(2).zip
    41.9 KB · Affichages: 41
  • recap jour(2).zip
    41.9 KB · Affichages: 46
  • recap jour(2).zip
    41.9 KB · Affichages: 52

dj-spirit

XLDnaute Nouveau
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Merci beaucoup^pour toutes tes réponses, je vais regarder ca ce jour.
je reviendrais vers toi si beosin.
encore un énorme merci de ton aide et tes explications.
:cool:
 

job75

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Re,

Une modification intéressante il me semble, quand les fichiers d'heures sont ouverts et modifiés.

La macro Recuperation est exécutée quand le fichier recap jour(3).xls est activé.

Dans ThisWorkbook :

Code:
Dim O As Boolean

Private Sub Workbook_Open()
O = True
End Sub

Private Sub Workbook_Activate()
Recuperation "heure à recuperer test(1).xls", "Stat(1)", "A6:G17"
Recuperation "heure à recuperer test(2).xls", "Stat(2)", "A3:G14"
Recuperation "heure à recuperer test(3).xls", "Stat(3)", "A8:G19"
If O Then Me.Saved = True 'évite le message à la fermeture si pas d'autres modifications
O = False
End Sub

Et à la fin de la macro Recuperation :

Code:
'---fermeture du fichier s'il a été ouvert---
If ouv Then
  Application.EnableEvents = False 'évite de lancer Workbook_Activate
  Workbooks(nomfichier).Close False
  Application.EnableEvents = True
End If

A+
 

Pièces jointes

  • recap jour(3).zip
    42.1 KB · Affichages: 45

dj-spirit

XLDnaute Nouveau
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

En fait là en gros pour apliquer ta macro à mes fichiers.
je les mets tous dans le même dossier.
Je recopie tes macros dans mon classeurs ou j'ai les recap, j'ai "juste" à modifier le ThisWorkbook
Par contre je dois aussi y mettre la matrice que tu as crée .
 

dj-spirit

XLDnaute Nouveau
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Niquel ta macro, par contre je seche sur quelques chose.
J'ai décallé en hauteur pour la mise à jour et voilà ce que ca me fait.
Cf piece jointe
Je ne voudrais pas faire de bétises :p
Il faut en gros que le tableau soit à cette ligne là .
Merci d'avance à toi de ta patience avec moi .

Ps: si tu as un tutorial, lien pour se mettre au macro je suis preneur ;) .
 

Pièces jointes

  • test envoyé.zip
    45 KB · Affichages: 59
Dernière édition:

job75

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs, remplissage du 2eme quand j'ecris dans le 1er classeu

Bonjour dj-spirit,

Vous avez été vacciné ? Alors une piqûre de rappel :

Il suffit de paramétrer correctement la macro.

Dans le fichier recap jour(2).xls joint, on paramètre dans l'ordre :

- le nom du fichier étudié

- le nom de la feuille qui récupère ses données

- l'adresse du tableau initial.

Donc dans ThisWorkbook, au lieu de cette ligne :

Recuperation "heure à recuperer test(1).xls", "Stat(1)", "A6:G17"

il faut bien sûr écrire :

Recuperation "heure à recuperer test(1).xls", "Stat(1)", "A27:G38"

Et pour bien progresser en VBA, 2 conseils :

- suivre des discussions sur XLD en faisant de son mieux pour comprendre

- quand un mot du code est inconnu, voir l'aide VBA (touche F1).

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 886
Membres
101 830
dernier inscrit
sonia poulaert