fractionnement et redistribution de données

rastafouette

XLDnaute Junior
Bonjour à tous,

J'aurais encore besoin de vos lumières.
Je vous joins un exemple simplifié de mon fichier.
J'ai donc réussi à mettre les commentaires voulu, formatés comme je veux dans mes cellules. (commentaires en couleurs)
Sachant que les commentaires sont de la forme "xxxx-yyyy-zz" ou "xxxx-yyyy-zz/xxxx-yyyy-zz" avec zz qui fait 40 maximumnombre d'heures, par ex, mickey a fait 39h durant la semaine n°15, divisées en 9h sur l'affaire 1266-6000 et 30h sur l'affaire 1265-9000 ; loulou a ,lui, fait 14h sur l'affaire 1266-6000, xxxx qui correspond aux "affaires" en rouge gras, et yyyy qui correspond aux "codes" de chaque affaires.
(J'ai mis des couleurs, pour que ce soit plus compréhensble, j'explique pas toujours bien bien....)
Je voudrais, par colonne( ie par semaineici, pour l'ex, la colonne jaune)), faire une addition, dans chaque binome "affaire/code" (1264-4000) des heures faites par chaque personnage(30h par riri)c'est à dire, retrouver dans la cell correspondant à 1266-6000 (C21), le total des heures faites par tous pour le code 1266-6000, c'est à dire, ici, la somme des 14h de loulou et des 9h de mickey(en G21). ex : on retrouve les 5h de riri en 1266-4000 dans la cell jaune G20.
Et ça dans une macro.
Je pense qu'il faudrait mettre tous mes commentaires dans un tableau "interne" à la macro, puis le trier, faire les sous-totaux et redistribuer les données dans les bonnes cellules de la même colonne. Enfin qqch comme ça ??:confused:
Je saurais fractionner mes commentaires avec des formules (Gauche, droite, nbcar, etc...) mais dans les macros, je ne sais pas faire. Une idée ??:confused
Et aussi, comment redistribuer dans chaque cellule ??:confused:

Merci beaucoup d'avance !!
 

Pièces jointes

  • Classeur2.xls
    26.5 KB · Affichages: 80
  • Classeur2.xls
    26.5 KB · Affichages: 79
  • Classeur2.xls
    26.5 KB · Affichages: 75
Dernière édition:

rastafouette

XLDnaute Junior
Re : fractionnement et redistribution de données

Bonjour à tous,

Je reviens encore avec une question.
J'ai donc maintenant cette fonction-ci qui fonctionne très bien (elle me ralentit pas mal mon fichier, car je l'ai dans bcp de cell, mais on peut pas tout avoir. c'est pas grave) :

Code:
Function SommeHeures(ByVal A As Variant, ByVal B As Variant, ByVal Col As Integer, ByVal ldeb As Integer, lfin As Integer) As Integer
    Dim S, i As Integer
    Dim Champs As Range
    Dim G As Range
    Dim V As String
    Dim Commentaire As String   
    Application.Volatile
               
    V = A & "-" & B
    Set Champs = Range(Cells(ldeb, Col), Cells(lfin, Col))
    S = 0
        
    For Each G In Champs
        If Not G.Comment Is Nothing Then
            tabv = Split(G.Comment.Text, "/")
            For i = 0 To UBound(tabv)
                tabt = Split(tabv(i), "-")
                If V = tabt(0) & "-" & tabt(1) Then
                    S = S + Val(tabt(2))
                End If
            Next i
        End If       
    Next G
SommeHeures = S

End Function


Avec qqch comme ça (peut-être) qui me recupère la Value de la 12ème cellule à gauche de ma cellule G :
Code:
initiale_du_nom = Cells(G.Row, (G.Column - 12)).Value
je voudrais pouvoir ajouter dans la cellule de destination de ma somme S, un commentaire qui concatenerait tous les "initiale_du_nom" rencontrés dans mes cellules G.

Je suis peut-être obligée de ne plus passer par une fonction ?

Merci d'avance de votre aide.
 

rastafouette

XLDnaute Junior
Re : fractionnement et redistribution de données

Arrgghh !!! Help !!
Plus j'avance, plus je recule !!

Voilà, sur un onglet, ma fonction SommesHeures ci-dessus fonctionne très bien (onglet "PROJETE").
Seulement, j'ai eu besoin de 2 onglets quasi identiques. J'ai donc copié mon onglet "PROJETE" en "ESSAI". Et j'y ai changé mes données de départ dans les commentaires (partie haute du doc), les cellules contenant la formule sommesheures étant strictement identiques sur les deux onglets(aux même places).

Seulement les résulats sont les même sur les 2 onglets, alors même que leurs donées de départs sont différentes.
Je m'explique :
Je valide le 1er onglet. Quand je vais sur le second, j'y vois les valeurs du 1er. Je rentre dans une des cell contenant la formule, je valide, les cell prennent leur nouvelle (et bonne) valeur (en raport avec les données de départ du second onglet). Là, je retourne sur le 1er onglet et les cell contenant la formule ont pis les valeurs des cell du second onglet (la BR56 du 1er onglet a pris la valeur de la BR56 du second) !!

Donc, systematiquement, 1 des 2 onglets n'est pas bon !
Pourquoi ?
Pourtant la formule a des valeurs d'entrée situées dans l'onglet et non dans les autres onglets...
Ze comprends pas....

Please help !
 

smotty

XLDnaute Occasionnel
Re : fractionnement et redistribution de données

Bonjour à tous!!

j'en connais un qui va être content.

En fait, dans la fonction, le range dans lequel elle va chercher les données est toujours sur la même feuille. J'ai donc modifié légèrement la fonction:

1) je fait passer non pas en valeur mais en référence la première variable, ce qui me permet de déterminer avec ".parent" quelle est la feuille concernée.

2) je redéfinis le range dans lequel sont les données par rapport au .parent

Voici la partie du code à modifier:

Function SommeHeures(ByRef A As Range, ByVal B As Variant, ByVal Col As Integer, _
ByVal ldeb As Integer, lfin As Integer) As Integer
Dim S, i As Integer
Dim Champs As Range
Dim G As Range
Dim V As String
Dim Commentaire As String
Dim sh As Worksheet

Application.Volatile
V = A.Value & "-" & B

Set sh = A.Parent
With sh
Set Champs = .Range(.Cells(ldeb, Col), .Cells(lfin, Col))
End With

Je te laisse l'adapter.

A+

smotty
 

rastafouette

XLDnaute Junior
Re : fractionnement et redistribution de données

Merci encore bcp smotty !!
Je l'ai adaptée et ça marche impec.
Entretemps hier, j'avais adapté ta fonction dans une Sub qui fonctionne aussi.
Comme j'ai beaucoup de données à traiter, je verrai à la fin de pon projet la solution la plus rapide en temps de traitement.

Merci encore
 

rastafouette

XLDnaute Junior
Re : fractionnement et redistribution de données

Si tu veux, voici ce que j'ai adapté hier de qqch trouvé sur le forum pour calculer le temps de la macro :

Code:
Sub toto_calcul()

Dim nb As Integer
    Form_Patienter.Show 0
    DoEvents
    Dim elapsedTime(2)
    Application.ScreenUpdating = False
    ' mes entrées : 
startTime = Time
    ' mon traitement...
stopTime = Time
elapsedTime(2) = (stopTime - startTime) * 24 * 60 * 60
Application.ScreenUpdating = True
MsgBox "Elapsed time, screen updating on: " & elapsedTime(1) & _
        " sec." & Chr(13) & _
        "Elapsed time, screen updating off: " & elapsedTime(2) & _
        " sec."

Unload Form_Patienter
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 213
Messages
2 086 302
Membres
103 174
dernier inscrit
OBUTT