Récupération données d'un onglet sur un autre [résolu]

Ludo58

XLDnaute Nouveau
Voici ma demande : Je souhaite automatiser certains calculs d'heures et ainsi éviter de le faire manuellement.

Dans l'onglet "Saisie manuelle", je saisie le nom des personnes ayant travaillé et leur horaires de début et fin de poste.

Dans l'onglet "Calcul auto", je souhaiterai que les zones en rouge soient renseignées automatiquement, donc que :
1) les différents cycles horaires notés dans l'onglet "Saisie manuelle" soient repertoriés à partir de B4 et C4
2) le nombre de personnes ayant effectué le cycle horaire renseigné en B + C soit indiqué dans la colonne A ("Nombre de personnes")

J'exploite ensuite les données de l'onglet "Calcul auto".

J'ai déjà réusi à avancer mais quand j'ai un cycle horaire avec la même heure de début et une heure de fin différente, il me note que le premier.

J'espère avoir été assez clair dans mes explications. Si vous voulez d'autres renseignements, n'hésitez pas à les demander.

Le fichier est joint.

Merci par avance de votre aide

Ludo58
 

Pièces jointes

  • Demande de Ludo V002.xlsx
    12.3 KB · Affichages: 46
  • Demande de Ludo V002.xlsx
    12.3 KB · Affichages: 38
  • Demande de Ludo V002.xlsx
    12.3 KB · Affichages: 38
Dernière édition:

Ludo58

XLDnaute Nouveau
Re : Récupération données d'un onglet sur un autre

Bonjour François,

Cela n'ira pas, c'est un peu compliqué. Je vais refaire un fichier que ma sercretaire a déjà en partie renseigné pour que tu comprennes mieux e que je veux.

Merci

Ludo58
 

job75

XLDnaute Barbatruc
Re : Récupération données d'un onglet sur un autre

Bonjour Ludo58, bienvenue sur XLD,

Avec ce genre de problème on se prend vite la tête avec des formules.

Par VBA c'est relativement simple à comprendre.

La macro dans le code de la 1ère feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Activate()
Dim tablo, d As Object, i As Long, t As String, a, b, R(), s
With Feuil2 'CodeName de la feuille
  tablo = .Range("B4:C" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
  t = tablo(i, 1) & " " & tablo(i, 2)
  d(t) = d(t) + 1 'comptage
Next
a = d.keys: b = d.items
ReDim R(d.Count - 1, 2) 'base 0
For i = 0 To d.Count - 1
  s = Split(a(i))
  R(i, 0) = b(i)
  R(i, 1) = s(0)
  R(i, 2) = s(1)
Next
[A4].Resize(d.Count, 3) = R
[B4].Resize(d.Count, 2).Replace ",", "."
Range("A" & d.Count + 4 & ":C" & Rows.Count).ClearContents
End Sub
Elle se lance quand on active la feuille.

Fichier joint.

Edit : bonjour Gardien de phare, je ne t'avais pas vu.

A+
 

Pièces jointes

  • Dictionary(1).xlsm
    20.4 KB · Affichages: 32
  • Dictionary(1).xlsm
    20.4 KB · Affichages: 33
  • Dictionary(1).xls
    45.5 KB · Affichages: 31
Dernière édition:

job75

XLDnaute Barbatruc
Re : Récupération données d'un onglet sur un autre

Re,

On peut bien sûr trier le tableau obtenu, par exemple sur H début :

Code:
[A4].Resize(d.Count, 3).Sort [B4], Header:=xlNo 'tri sur H début
Fichier (2).

A+
 

Pièces jointes

  • Dictionary(2).xls
    46 KB · Affichages: 30
  • Dictionary(2).xlsm
    20.6 KB · Affichages: 32

job75

XLDnaute Barbatruc
Re : Récupération données d'un onglet sur un autre

Re,

Une variante, avec calcul de la durée :

Code:
Private Sub Worksheet_Activate()
Dim tablo, d As Object, i As Long, t As String, a, b, R(), s
With Feuil2 'CodeName de la feuille
  tablo = .Range("B4:C" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
  t = Replace(tablo(i, 1) & " " & tablo(i, 2), ",", ".")
  d(t) = d(t) + 1 'comptage
Next
a = d.keys: b = d.items
ReDim R(d.Count - 1, 3) 'base 0, 4 colonnes
For i = 0 To d.Count - 1
  s = Split(a(i))
  R(i, 0) = b(i)
  R(i, 1) = s(0)
  R(i, 2) = s(1)
  R(i, 3) = Val(s(1)) - Val(s(0)) 'Durée
Next
Application.ScreenUpdating = False 'fige l'écran
[A4].Resize(d.Count, 4) = R
[A4].Resize(d.Count, 4).Sort [B4], , [C4], Header:=xlNo 'tri sur H début et H fin
Range("A" & d.Count + 4 & ":D" & Rows.Count).ClearContents
End Sub
Fichier (3).

Remarque : il est plus classique d'utiliser le format "heure" : 13:30 au lieu de 13,5.

La macro fonctionnera sans problème avec ce format.

A+
 

Pièces jointes

  • Dictionary(3).xls
    39.5 KB · Affichages: 40
  • Dictionary(3).xlsm
    21 KB · Affichages: 31
Dernière édition:

Ludo58

XLDnaute Nouveau
Re : Récupération données d'un onglet sur un autre

Bonjour à tous,

Merci pour vos lumières, j'ai trouvé mon bonheur avec le fichier de job75. Je n'ai pas encore tout compris dans la macro mais j'ai déjà réussi à la transposer dans le fichier cible. Je vais bosser maintenant pour comprendre le code et les fonctions utilisées :)

En tout cas, merci à job75 pour sa trouvaille mais aussi à Gardien de phare pour ses avancées.

A bientôt peut être.

Cordialement

Ludo58
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T