histogramme avec condition sur les colonnes

nintendo

XLDnaute Nouveau
Bonjour à tous,

Je me permets de resolliciter votre aide car je voudrais faire une macro s’appliquant sur des colonnes déjà créées.

En fait, j’ai 3 colonnes, une avec des dates de la forme j/m/aaaa, une deuxième avec des noms mais on saura leur nombre et leur « valeur » à l’avance. Pour l’exemple de la macro appelons les toto1 et toto2. La troisième colonne donnera des durées.
Je voudrais que pour chaque jour entre la première et dernière date (en enlevant les samedis et dimanches) que l’on calcule la durée totale durant une journée pour une personne.

Et ensuite exprimer ces résultats sous forme de graphiques, un par personne. Dans l’exemple ça fera 2 graphiques.
Pour chaque personne, je voudrais donc tracer un graphique (histogramme ?) qui donne son temps journalier avec les dates en abscisse , je voudrais aussi comparer ce temps avec la somme de toutes les durées de toutes les personnes, donc faire une colonne donnant le temps d’une personne et une autre donnant le temps pour toutes les personnes et cela pour tous les jours.

J’espère avoir été clair.
Je ne sais pas trop comment débuter...

Merci d’avance pour toute l’aide que vous m’apporterait :)
 

nintendo

XLDnaute Nouveau
Re : histogramme avec condition sur les colonnes

Bonjour Julberto,

désolé de ne répondre que si tardivement mais je n'avais pas vu ton message.

J'ai d'abord essayé de créer une macro qui additionne tous les temps quelle que soit la personne pour les différentes dates présentes dans la colonne date.

J'ai une erreur de compilation, overflow. J'ai du faire des erreurs dans mes boucles mais je ne vois pas trop.
Dans mon fichier excel, j'ai la colonne A qui contient des dates de la forme jj/mm/aaaa Dans la colonne C j'ai des temps et je voudrais inscrire la date dans la colonne D et la durée correspondante dans la colonne E

voici le code que j'ai fait:


Option Explicit

Sub temps()
Dim Nb As Integer
Dim duree As Integer
Dim i As Integer
Dim j As Integer
Nb = Range("A65000").End(xlUp).Row
duree = Range("C2").Value

For i = 2 To Nb
If Range("A" & i).Value = Range("A" & i + 1).Value Then
duree = duree + Range("A" & i + 1).Value

Else
For j = 1 To Range("D65000").End(xlUp).Row
If ActiveCell.Value = "" Then
Range("D" & j).Value = Range("A" & i).Value
Range("E" & j).Value = duree


Else
Selection.Offset(1, 0).Select
End If
Next j

End If
Next i
End Sub

Merci d'avance pour votre aide :)
 
Dernière édition:

julberto

XLDnaute Occasionnel
Re : histogramme avec condition sur les colonnes

Bonjour nitendo,

Il y avait plusieurs erreurs dans TA macro. Je l'ai conservée telle quelle en la modifiant pour qu'elle fonctionne.
VB:
Sub temps()
Dim Nb As Integer
Dim duree As Integer
Dim i As Integer
Dim j As Integer
Set dest1 = Worksheets("Synthèse").Range("A65000").End(xlUp).Offset(1, 0)
Set dest2 = Worksheets("Récap").Range("A65000").End(xlUp).Offset(1, 0)
With Worksheets("Détails")
Nb = .Range("A65000").End(xlUp).Row
For i = 2 To Nb
     duree = duree + .Range("C" & i).Value
 If .Range("A" & i).Value <> .Range("A" & i + 1).Value Then
    dest1.Value = .Range("A" & i).Value
    dest2.Value = .Range("A" & i).Value
    dest1.Offset(0, 1).Value = duree
    duree = 0
    Set dest1 = dest1.Offset(1, 0)
    Set dest2 = dest2.Offset(1, 0)
  End If
Next i
End With
End Sub

Concernant :
Je voudrais que pour chaque jour entre la première et dernière date (en enlevant les samedis et dimanches) que l’on calcule la durée totale durant une journée pour une personne.
Je pense qu'il n'est pas utile de faire une macro pour cela. La formula nécessaire devrait être :
=SOMME.SI.ENS(Détails!$C$2:$C$100;Détails!$A$2:$A$100;Récap!$A2;Détails!$B$2:$B$100;Récap!B$1)
A tirer vers la droite et vers le bas.
Tu trouveras cette formule dans l'onglet "Récap" du fichier joint.

cordialement
 

Pièces jointes

  • nitendo.xlsm
    18.9 KB · Affichages: 77
  • nitendo.xlsm
    18.9 KB · Affichages: 81
  • nitendo.xlsm
    18.9 KB · Affichages: 84

nintendo

XLDnaute Nouveau
Re : histogramme avec condition sur les colonnes

Merci beaucoup pour ton aide!
Cependant il me reste un tout petit problème: en effet dans mon idées les durées sont du type hh:mm et la somme de tous les temps dans une journée peut dépasser 24.

J'ai donc modifié la colonne durée avec des heures et minutes mais l'addition des durées ne marche pas, j'ai toujours des nombres à virgules dans le cumul des durées. J'ai pourtant changé le format des cellules.

Merci d'avance pour l'aide apportée.
 

nintendo

XLDnaute Nouveau
Re : histogramme avec condition sur les colonnes

Merci pour cette remarque mais j'ai toujours une erreur de compilation, j'ai mis des heures minutes et secondes mais ça ne marche pas.


Ci-joint voila le fichier que j'ai modifié.
J'ai aussi mis la 1e colonne au format temps: (37:30:55)

Merci d'avance pour l'aide
 

Pièces jointes

  • nitendo.xlsm
    18.8 KB · Affichages: 71
  • nitendo.xlsm
    18.8 KB · Affichages: 78
  • nitendo.xlsm
    18.8 KB · Affichages: 72

julberto

XLDnaute Occasionnel
Re : histogramme avec condition sur les colonnes

Bonjour nitendo,

retour du fichier. Seules modifs : insertion des format "heure" et "personnalisé".

cordialement
 

Pièces jointes

  • nitendo.xlsm
    18.6 KB · Affichages: 77
  • nitendo.xlsm
    18.6 KB · Affichages: 83
  • nitendo.xlsm
    18.6 KB · Affichages: 73

nintendo

XLDnaute Nouveau
Re : histogramme avec condition sur les colonnes

Bonjour,
J’aurais à nouveau besoin d’aide. Je me suis servi de la macro corrigée pour l’adapter afin de calculer la durée par jour. J’ai pris le cas de 3 utilisateurs avec nom1 nom2 et nom3. Je n’en aurais pas beaucoup plus donc je peux me permettre d’adapter les boucles à la main en cas d’ajout ou de supression d’utilisateurs.

Voici mon code :
Sub temps()

Set dest2 = Worksheets("Détails").Range("F65000").End(xlUp).Offset(1, 0)
Set dest3 = Worksheets("Détails").Range("G65000").End(xlUp).Offset(1, 0)
Set dest4 = Worksheets("Détails").Range("H65000").End(xlUp).Offset(1, 0)

With Worksheets("Détails")
Dim duree1 As Date
Dim duree2 As Date
Dim duree3 As Date

Nb = .Range("A65000").End(xlUp).Row
For i = 2 To Nb
If .Range("B" & i).Value = "nom1" Then
duree1 = duree1 + .Range("C" & i).Value

ElseIf .Range("B" & i).Value = "nom2" Then
duree2 = duree2 + .Range("C" & i).Value

ElseIf .Range("B" & i).Value = "nom3" Then
duree3 = duree3 + .Range("C" & i).Value

End If


If .Range("A" & i).Value <> .Range("A" & i + 1).Value Then

If .Range("B" & i).Value = "nom1" Then
dest2.Value = .Range("A" & i).Value
dest2.Offset(0, 1).Value = duree1
duree1 = 0
Set dest2 = dest2.Offset(1, 0)

ElseIf .Range("B" & i).Value = "nom2" Then
dest3.Value = .Range("A" & i).Value
dest3.Offset(0, 1).Value = duree2
duree2 = 0
Set dest3 = dest3.Offset(1, 0)

ElseIf .Range("B" & i).Value = "nom3" Then
dest4.Value = .Range("A" & i).Value
dest4.Offset(0, 1).Value = duree3
duree3 = 0
Set dest4 = dest4.Offset(1, 0)
End If

End If
Next i
End With

End Sub


Merci beaucoup pour votre aide.
 

julberto

XLDnaute Occasionnel
Re : histogramme avec condition sur les colonnes

Bonjour nintendo,

nintendo
Set dest2 = Worksheets("Détails").Range("F65000").End(xlUp).Offset(1, 0) '****
Set dest3 = Worksheets("Détails").Range("G65000").End(xlUp).Offset(1, 0) '****
Set dest4 = Worksheets("Détails").Range("H65000").End(xlUp).Offset(1, 0) '****
........................
Nb = .Range("A65000").End(xlUp).Row
For i = 2 To Nb
If .Range("B" & i).Value = "nom1" Then '*****
duree1 = duree1 + .Range("C" & i).Value****
Là où j'ai mis des **** les lignes sont erronées.
Si "B" & i porte sur la colonne alors "C" & i ne peut porter que sur une ligne (pas une colonne!).
Je n'ai pas été plus loin, c'est trop touffu surtout sans connaitre la structure de la feuille Excel sur laquelle porte ta macro.

Concernant ma macro tu disais :
nintendo

j'ai juste modifié le type de durée en date et ça marche.
Alors pourquoi en construire une autre ?

cordialement
 

Discussions similaires

Réponses
4
Affichages
194
Réponses
16
Affichages
526

Statistiques des forums

Discussions
312 241
Messages
2 086 523
Membres
103 242
dernier inscrit
Patoshick