Synthèse de données

luke3300

XLDnaute Impliqué
Bonjour tout le monde,

me revoici après quelques temps avec un problème que je ne sais pas résoudre seul. Il est vrai que le forum m'apporte beaucoup de réponses et m'aide précieusement ... toutefois j'ai encore besoin de vous. :)

Mon problème est le suivant:

En 2008, mon équipe savait accomplir des tâches précises. En 2009, une réorganisation a mélangé et restructuré toutes leurs tâches. J'ai donc besoin maintenant de faire une synthèse des tâches que chacun pourra effectuer en 2009 sans devoir être formé dessus et ce sur base de ce qu'ils savaient faire en 2008.
Pour être plus clair, j'ai fais un fichier d'exemple (Il comprend le même fichier en version 2003 et 2007).

D'avance un énorme merci à vous tous et une très bonne journée.
 

Pièces jointes

  • Taches.zip
    29.7 KB · Affichages: 37
  • Taches.zip
    29.7 KB · Affichages: 38
  • Taches.zip
    29.7 KB · Affichages: 41

mromain

XLDnaute Barbatruc
Re : Synthèse de données

bonjour luke3300,

voici le code modifié:
Code:
Sub Test()
'
' Test Macro
' Etabli la synthèse de concordance entre les services de Géo 2 et 3,
'
' Touche de raccourci du clavier: Ctrl+y
'
Dim nom As Integer, tachesNouvelles As Integer, tacheAncienne As Range, i As Integer, flagCap As Boolean
Dim colTache As Range, ligneNom As Range, estCapable As Integer, firstAddress As String, noLigne As Integer


For nom = 26 To ThisWorkbook.Sheets("Distribution2").Cells(ThisWorkbook.Sheets("Distribution2").Rows.Count, 4).End(xlUp).Row
    If ThisWorkbook.Sheets("Distribution2").Range("D" & nom).Value <> vbNullString Then
        For tachesNouvelles = 10 To 109
            estCapable = 1
            Set tacheAncienne = ThisWorkbook.Sheets("Distribution2").Cells(10, tachesNouvelles)
            With ThisWorkbook.Sheets("Distribution")
                While tacheAncienne.Row < 26
                    If tacheAncienne.Value <> vbNullString Then
                        Set colTache = .Rows(9).Find(what:=tacheAncienne.Value, LookIn:=xlValues, lookat:=xlWhole)
                        Set ligneNom = .Columns(4).Find(what:=ThisWorkbook.Sheets("Distribution2").Range("D" & nom).Value, LookIn:=xlValues, lookat:=xlWhole)
                        If ligneNom Is Nothing Then
                            estCapable = 0
                        Else
                            firstAddress = ligneNom.Address
                            noLigne = 0
                            Do
                                If ligneNom.Offset(0, 3).Value = ThisWorkbook.Sheets("Distribution2").Range("G" & nom).Value Then noLigne = ligneNom.Row
                                Set ligneNom = .Columns(4).FindNext(ligneNom)
                            Loop Until ligneNom.Address = firstAddress
                            If noLigne = 0 Then
                                estCapable = 0
                            Else
                                If Not colTache Is Nothing Then
                                    estCapable = estCapable * IIf(.Cells(noLigne, colTache.Column).Value = 1, 1, 0)
                                End If
                            End If
                        End If
                    End If
                    Set tacheAncienne = tacheAncienne.Offset(1, 0)
                Wend
            End With
            flagCap = False
            For i = 10 To 25
                If ThisWorkbook.Sheets("Distribution2").Cells(i, tachesNouvelles).Value <> vbNullString Then flagCap = True
            Next i
            If Not flagCap Then estCapable = 0
            ThisWorkbook.Sheets("Distribution2").Cells(nom, tachesNouvelles).Value = IIf(estCapable = 1, 1, "")
        Next tachesNouvelles
    End If
Next nom
End Sub

ça a l'air de fonctionner, par contre, la macro est assez longue (5-10 secondes).

a+
 

luke3300

XLDnaute Impliqué
Re : Synthèse de données

Bonjour mromain et le forum,

désolé de ma réponse tardive, j'ai eu beaucoup de contretemps ces derniers jours. Je viens toutefois d'avoir le temps de tester ton code et visiblement il y a quelque chose qui cloche dedans. On voit que la macro travaille mais elle ne trouve rien.

Regarde dans l'exemple que je joins, j'ai complété des cases pour qu'il puisse trouver quelque chose mais là ... rien.

Encore merci pour ton aide précieuse et une excellente journée à tous.

Cijoint.fr - Service gratuit de dépôt de fichiers
 

mromain

XLDnaute Barbatruc
Re : Synthèse de données

bonjour,

il s'agit d'un petit soucis avec des cellules fusionnées (les colonnes D, E, F et G de tes 2 feuilles). voici le fichier modifié : Cijoint.fr - Service gratuit de dépôt de fichiers

a+
 

luke3300

XLDnaute Impliqué
Re : Synthèse de données

Bonjour mromain et le forum ... ou plutôt bonsoir :)

j'ai manqué à toutes mes bonnes manières en ne venant pas te remercier! Je suis impardonnable. Mais très sincèrement ... merci!
Tu m'as exactement donné la solution que je cherchais. J'ai eu le temps de tester et de me servir du fichier sous toutes ses formes et c'est nickel!!!

Alors encore un tout grand bravo à toi et au forum pour son existance, merci beaucoup pour l'aide précieuse que vous m'apportez à chaque fois et je vous souhaite à tous une excellente soirée.
 

luke3300

XLDnaute Impliqué
Re : Synthèse de données

Bonjour mromain, le forum,

après plusieurs années d'utilisations et de satisfaction de ton code, il m'est nécessaire de l'adapter. En effet, j'ai réorganisé le travail de mes collègues et maintenant j'aimerais qu'il puisse non plus m'indiquer des "1" dans l'onglet des nouvelles tâches mais plutôt une valeur en % selon la soustraction (de 100%) obtenue via le nouvel onglet "Données" et dans lequel sont repris en colonne G à I les valeurs à prendre en compte.
Pour exemple: la nouvelle tâche X1 comprend 75% de l'ancien X1 et 2% de l'ancien X3 donc ici, j'aimerais qu'au lieu du "1" repris dans chaque cellule correspondante de l'onglet "New", soit repris 100% si le collègue connaissait les 2 anciennes tâches et sinon 100% - la valeur de la/les tâche(s) qu'il ne connaît pas. Donc toujours dans l'exemple, si mon collègue ne connaissait pas X3 avant, il devrait être indiqué 98% (100%-2%).
Je ne sais pas si c'est assez clair ... voici donc un autre exemple:
Le nouveau X50 comprend 75% de l'ancien X50, 49% de l'ex X309, 19% de l'ex 312 et 10% de l'ex X313. Ici, si un collègue ne connaissait pas par exemple l'ancien X312, il devrait être renseigné 81% dans la cellule correspondante de l'onglet "New", soit 100% - 19%.
Pour certains, l'addition des anciennes tâches totalisent plus ou moins de 100% de la nouvelle tâche, Ce n'est pas grave, c'est juste une indication.
Si on regarde l'ensemble, pour obtenir le résultat voulu, la macro ne devrait plus tenir compte des données encodées dans les lignes 10 à 25 de l’onglet "New" mais uniquement des données reprises en colonnes G à I de l'onglet "Données".

Je planche là-dessus depuis plus d'une semaine mais mes connaissances quasi nulles en VBA ne me permettent pas d'y arriver. J'aurais donc grandement besoin de votre aide.

Un tout grand merci d'avance à tous et une excellente journée.

PS: je remets le fichier test que j'utilise actuellement pour tester tout ça.
 

Pièces jointes

  • TestFlex_1.xlsm
    152.6 KB · Affichages: 20
  • TestFlex_1.xlsm
    152.6 KB · Affichages: 26

Discussions similaires

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 643
dernier inscrit
adriano22