Liaison données vers feuille de données excel

Fermé
goldrigger - 15 janv. 2008 à 21:19
 Goldrigger 61 - 16 févr. 2008 à 19:40
Bonjour,

J'ai créer une feuille dans lequel je stock des données. Ces données sont stockées en fonction des jours. Par exemple, le 01/01/2008 , il y a X heure de travail.
Comme cette feuille stock les données de toute l'année, j'ai créer une feuille pour les utilisateurs inscrivent l'heure travaillée par jour. (comme ca ils ne s'embetent pas à rechercher le jour et noter les heures dans la feuille de données).

Dans la nvelle feuille, il y a la date du jour, le nom des personnes et les heures que doivent inscrire les personnes.
Mais le problème c'est que je n'arrive pas à stocker les données inscrites le jour 'J'(dans la feuille d'utilisateur) dans la feuille de données dans la ligne du jour 'J'.
A voir également:

52 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
15 janv. 2008 à 21:32
bonjour

Ton problème est bien exposé mais comme tu ne fourni pas beaucoup d'informations sur la structure que tu as adoptée c'est difficile de te fournir une piste.

Tu as probablement une feuille de saisie journalière et une récap par utilisateur mais quel lien est-il possible ?
0
Salut gbinforme,

En fait j'ai deux feuilles dans le classeur: - 1 feuille ou je stock les données
- 1 feuille de saisie par l'utilisateur

Dans la feuille de stockage il y a - 1 colonne ou je met les jours du mois (01/01/08 à 31/01/2008)
- 1 colonne pour les heures travaillées (ex: 8H pour le 01/01/2008)

Dans la feuille de saisie j'ai: - le jour ( formule aujourdhui())
- le nom de la personne
- les heures travaillées ( ex 8 H pour le jour d'aujourd'hui)

Et donc je veux que les heures inscrits dans la feuille de saisie , soit transférer dans la colonne des heures (dans la feuille de stockage) dans la ligne de la date du jour.

Peut -etre que l'on peut se servir de recherchev() ?
Si le jour (dans la feuille de saisie) est égale à jour (dans la feuille de stockage) , alors inscrire heures travaillé dans la (colonne +1).
Je sais pas si ca peut marcher.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
15 janv. 2008 à 22:51
bonjour

La formule aujourdhui() est difficilement utilisable avec recherchev car elle est volatille et le lendemain est un autre jour.

Dans la feuille de stockage que devient le nom de la personne ?

Il manque pas mal de données pour faire le bon choix, même si a priori je pense que le mieux serait d'utiliser une macro événementielle : lorsque tu saisis les heures, en fonction du jour et de la personne on reporte dans le stockage.
Cela me parait le plus adapté mais il faudrait connaître le nombre de personnes concernées et la façon de saisir : sur un poste unique ou en réseau ?
0
Re bonsoir Gbinforme,

Je vais mettre ce fichier sur en réseau mais partons du principe que c sur un poste unique (si ca peut simplifier)

Seulement deux personnes sont concernés: X et Y

En effet, dans la feuille de stockage y'aura 3 colonnes: 1 pour les jours, 1 pour X (heures travaillé pour X) et 1 pour Y (heure travaillée pour Y).

Dans la feuille de saisie j'ai: - le jour ( formule aujourdhui())
- les noms (sur 2 lignes: pour X et Y)
- les heures travaillées ( ex 8 H pour le jour d'aujourd'hui) sur 1 colonne

Ton idée de macro évenementielle me paraît bonne.
Mais je vois pas trop comment faire. (je débute en excel)
0

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

Posez votre question
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
16 janv. 2008 à 01:00
bonjour

Comme un exemple est toujours plus parlant, il est ici : https://www.cjoint.com/?bqa76Mlk3g
0
Salut gbinforme,

Merci pour ton exemple.

Ca correspond bien dans l'ensemble à ce que je voulais faire.
Mais en fait dans la feuille recap, j'ai tout les jours du mois . C'est pas un problème pour un mois mais comme en plus j'ai tout les mois de l'années sur les colonne qui suivent , il faudrai que je puisse décider du lieu d'écriture du jour.

J'ai analysé ton programme mais c'est un peu trop compliqué pour moi.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 janv. 2008 à 20:45
Bonjour Goldrigger,

Désolé d'intervenir dans ce post mais excuses moi de t'avoir propsé une solution qui te convenait pas dans ce post:

http://www.commentcamarche.net/forum/affich 4661807 recup de donnees depuis un claseur excel#dernier

Sinon, tu aurais aurais fait un coucou de remerciements, pas vrai ?
0
Salut michel_m

en fait j'ai toutjours pas tester ta solution, c'est parce que je suis en train de travailler sur un programme complet et je réfléchi à plusieurs choses et parfois j'en oubli d'autres.
Une fois que je l'est tester je te ferai signe ne t'inquiète pas . Bien sûr je comptais te remercier!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 janv. 2008 à 21:24
OK, Merci bonne soirée et bon courage pour ton appli

Cordialement,
Michel
0
Bonjour à tous,

gbinforme, j'ai analysé ton programme mais je comprend pas tout.

En fait dans la feuille recap, j'ai tout les jours du mois . C'est pas un problème pour un mois mais comme en plus j'ai tout les mois de l'année sur les colonnes qui suivent , il faudrai que je puisse décider du lieu d'écriture du jour.

Peux-tu m'indiquer la partie de ce code qui a cette fonction et peut-tu commenter les lignes de ce code:

Private Sub Worksheet_Change(ByVal sel As Range)
If sel.Column <> 3 Then Exit Sub
Dim w2 As Worksheet
Dim c As Integer
Dim l As Long
Set w2 = Worksheets("recap")
For l = 1 To w2.Cells(65536, 1).End(xlUp).Row + 1
If w2.Cells(l, 1).Value = Date Then Exit For
Next l
For c = 1 To w2.Cells(1, 256).End(xlToLeft).Column + 1
If w2.Cells(1, c).Value = Cells(sel.Row, 1).Value Then Exit For
Next c
w2.Cells(l, 1).Value = Date
w2.Cells(l, c).Resize(1, 3).Value = Cells(sel.Row, 2).Resize(1, 3).Value
'w2.Cells(l, c).Value = Cells(sel.Row, 2).Value
End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
17 janv. 2008 à 10:29
bonjour

Private Sub Worksheet_Change(ByVal sel As Range)
If sel.Column <> 3 Then Exit Sub 'test de la colonne saisie déclenchant le report
Dim w2 As Worksheet 'feuille report
Dim c As Integer 'colonne
Dim l As Long 'ligne
Set w2 = Worksheets("recap") 'feuille report
For l = 1 To w2.Cells(65536, 1).End(xlUp).Row + 1 'recherche ligne date
If w2.Cells(l, 1).Value = Date Then Exit For 'date présente
Next l 'si plusieurs colonnes faire varier la colonne
For c = 1 To w2.Cells(1, 256).End(xlToLeft).Column + 1 'recherche colonne employé
If w2.Cells(1, c).Value = Cells(sel.Row, 1).Value Then Exit For
Next c
w2.Cells(l, 1).Value = Date 'date mise en place
w2.Cells(l, c).Resize(1, 3).Value = Cells(sel.Row, 2).Resize(1, 3).Value 'heures mise en place
'w2.Cells(l, c).Value = Cells(sel.Row, 2).Value 'employé mis en place
End Sub

Si sur les colonnes tu fait alterner les dates, les heures et les employés tu vas créer un peu le bazar où on trouve tout et pas forcément ce que l'on cherche.
0
Salut,

Oui en fait je veux faire ça parce que je veux pas créer 12 feuilles dans un classeur excel.
Je pense que si je fais une bonne mise en page ça posera pas de problème:

1 colonne pour les jours,
3 colonnes pour chaque personne,
et puis la colonne d'aprés les jours du mois prochain et ainsi de suite.

Qu'en penses -tu?
0
salut gbinforme,

en fait je voudrais rajouter des colonnes pour chaque personne (il y en a 3 actuellement)
qu'est ce que je dois modif pour que ca marche , cette ligne?


If sel.Column <> 3 Then Exit Sub
0
j'arrive pas à rajouter des colonnes.
j'en ai rajouté mais lorsque je saisi des heures , ces données se retrouvent 4 colonnes aprés.

Si quelqu'un pouvait me donner l'algorithme en français de ce code, ca me dépannerai.
Parce que la, je comprend pas les boucles for, if.

Set w2 = Worksheets("recap") 'feuille report
For l = 1 To w2.Cells(65536, 1).End(xlUp).Row + 1 'recherche ligne date
If w2.Cells(l, 1).Value = Date Then Exit For 'date présente

Next l 'si plusieurs colonnes faire varier la colonne
For c = 1 To w2.Cells(1, 256).End(xlToLeft).Column + 1 'recherche colonne employé
If w2.Cells(1, c).Value = Cells(sel.Row, 1).Value Then Exit For
Next c
w2.Cells(l, 1).Value = Date 'date mise en place
w2.Cells(l, c).Resize(1, 4).Value = Cells(sel.Row, 2).Resize(1, 4).Value 'heures mise en place
w2.Cells(l, c).Value = Cells(sel.Row, 2).Value 'employé mis en place
End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
17 janv. 2008 à 20:15
bonjour

Je ne sais pas si j'ai tout compris mais je t'ai fait une nouvelle version qui tiens compte :
- j'ai mis 5 cellules récupérées par saisie.
- j'ai fait en sorte que l'on recherche les mois en recap.
- toute la feuille recap est générée automatiquement.
- on peut saisir autant d'employés que l'on veux.
- tout est paramétrable facilement.
- le mois et les employés sont en ligne 1 : s'il existent on les utilise sinon on les crée.
- les dates sont en lignes : si elles existent on les utilise sinon on les crée.

Voilà le fichier : https://www.cjoint.com/?brupmPMLLB

Si quelqu'un pouvait me donner l'algorithme en français de ce code, ca me dépannerai.
Je veux bien mais c'est plus long à faire que de t'expliquer si tu ne connais pas un peu les objets utilisés :
essaie de demander ce que tu ne comprends pas j'essaierais de franciser.
0
Bonjour,

Vraiment merci pour ton travail gbinforme!!
C'est vraiment bien fait.

Oui en fait, je voudrais comprendre ces lignes:

If sel.Column <> 5 Then Exit Sub -> 5 pour le nombre de colonne?

For col = 1 To w2.UsedRange.Columns.Count ' recherche colonne mois
If w2.Cells(1, col).Value = Format(jour, "mmmm") Then Exit For ' mois présent
Next col
If w2.Cells(1, col).Value = "" Then
w2.Cells(1, col).Value = Format(jour, "mmmm") ' création mois
End If

"Pour col de 1 à ???
"Si valeur ????= ????
"Ensuite(next?) col ; Pourquoi ca?

For col = col To w2.UsedRange.Columns.Count ' recherche colonne employé
If w2.Cells(1, col).Value = Cells(sel.Row, 1).Value Then Exit For
Next col
If w2.Cells(1, col).Value = "" Then
w2.Cells(1, col).Value = Cells(sel.Row, 1).Value ' création employé
End If

For c = 0 To 4 ' mise en place heures : 5 cellules
w2.Cells(lig, col + c).Value = _
Format(Cells(sel.Row, c + 2).Value, "hh:mm")
Next c

"Pour c de 0 à 4
"?????
"????

En fait je vais intégere ces deux feuilles dans un classeur . Y-a-t-il des choses à modifier?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
17 janv. 2008 à 22:09
bonjour

Quelques explications mais si tu veux des compléments n'hésite pas c'est fait pour cela un forum :
se faire aider mais pour comprendre et progresser soi-même.

If sel.Column <> 5 Then Exit Sub -> 5 pour le nombre de colonne?

Il me semble qu'il y avait l'explication : ' test de la colonne saisie déclenchant le report
Tant que sur la feuille "saisie" on ne touche pas la colonne E (5) fin de journée, on ne fait pas de modif.

"Pour col de 1 à ??? : le nombre de colonnes utilisées dans la feuille

"Si valeur ????= ????
si la cellule de la première ligne est égale au libellé du mois, il est présent.

"Ensuite(next?) col ; Pourquoi ca?
C'est ce que l'on nomme une boucle, on regarde successivement toutes les cellules de la ligne 1 et next ajoute 1 à la variable col.


For c = 0 To 4 ' mise en place heures : 5 cellules

"Pour c de 0 à 4
"?????
on fait progresser de 0 à 5 pour récupérer les 5 cellules saisies
si l'on veux en récupérer 2 de plus, il suffit de changer 4 par 6.

Il faut savoir que c'est de la programmation et comme toute chose, il y a bien sûr des bases à acquérir.
0
bonsoir,

oui gbinforme, la programmation quand on y connait pas grand chose, c'est un peu comme du chinois.
C'est comme une nouvelle langue à apprendre. Il faut pratiquer pour y arriver et se faire aider (merci pour ton aide).

je voudrais comprendre certaines expressions que tu utilises:

w2.Cells(1, col): ' c'est la cellule 1 de la colonne col de la feuille 2 ?

w2.UsedRange.Columns.Count : ' ...

w2.Cells(65536, col).End(xlUp).Row : ' que signifie' End(xlUp).Row' ?

Cells(sel.Row, c + 2).Value: ' ....
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
17 janv. 2008 à 22:44
bonjour


w2.Cells(1, col): ' c'est la cellule 1 de la colonne col de la feuille 2 ?

c'est la cellule de la ligne 1 de la colonne col (oui) de la feuille 2 (non mais de la feuille définie précédemment : Set w2 = Worksheets("recap") 'feuille report.

w2.UsedRange.Columns.Count : ' ...

le nombre (count) de colonnes (columns) utilisées dans la feuille définie précédemment : Set w2 = Worksheets("recap")


w2.Cells(65536, col).End(xlUp).Row : ' que signifie' End(xlUp).Row' ?

c'est la dernière (end) ligne (row) utilisée en remontant (xlUp) à partir de la ligne 65536 (maximum lignes d'une feuille avant 2007) sur la colonne col.
Cela permet de connaitre la dernière ligne utilisée sur cette colonne.

Cells(sel.Row, c + 2).Value: ' ....

C'est la valeur (Value) de la cellule (Cells) de la ligne saisie (sel.Row) à partir de la colonne 2 + la valeur de c qui varie de 0 à 4 :
on récupère les valeurs de la ligne saisie sur les colonnes B (2) à F (2+4).

Bonne intégration et @+
0
Ok, c'est déjà plus clair pour moi.

A+ , je continue à apprendre.
0