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

luke3300

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

Bonjour et merci de t'intérresser à mon problème mais la solution n'est pas celle que je recherche.

J'ai oublié de préciser qu'il y a déjà une mise en forme d'appliquée sur les cases concernées. Lorsque le chiffre 1 est entré dans une case, elle se met en vert.

Ce que je recherche ici, c'est une formule ou un code qui pourrait faire en sorte que suivant les n°s de tâches que j'introduis dans les lignes 5 à 11 (colonnes B à AJ), une synthèse de correspondance se fait et indique automatiquement un "1" dans la/les cases en regard des noms.

Comme j'ai indiqué dans le fichier en exemple, si Louis savait faire les tâches 1 à 6, alors j'aimerais qu'automatiquement, le fichier détecte et indique au moyen d'un "1" les nouvelles tâches qu'il pourra faire et qui sont composées maintenant d'extrait de ses anciennes tâches.

Je ne sais pas si je suis clair? N'hésitez pas à demander et merci d'avance.
 

mromain

XLDnaute Barbatruc
Re : Synthèse de données

bonjour luke3300, swifty

je te propose ce code :
Code:
Sub test()
Dim nom As Integer, tachesNouvelles As Integer, tacheAncienne As Range
Dim colTache As Range, ligneNom As Range, estCapable As Integer
For nom = 12 To 17
    For tachesNouvelles = 2 To 36
        estCapable = 1
        Set tacheAncienne = ThisWorkbook.Sheets("NOUVEAU").Cells(5, tachesNouvelles)
        With ThisWorkbook.Sheets("ANCIEN")
            While tacheAncienne.Row < 12
                If tacheAncienne.Value <> vbNullString Then
                    Set colTache = .Rows(4).Find(what:=tacheAncienne.Value, LookIn:=xlValues, lookat:=xlWhole)
                    Set ligneNom = .Columns(1).Find(what:=ThisWorkbook.Sheets("NOUVEAU").Range("A" & nom).Value, LookIn:=xlValues, lookat:=xlWhole)
                    If Not (colTache Is Nothing Or ligneNom Is Nothing) Then
                        estCapable = estCapable * IIf(.Cells(ligneNom.Row, colTache.Column).Value = 1, 1, 0)
                    End If
                End If
                Set tacheAncienne = tacheAncienne.Offset(1, 0)
            Wend
        End With
        ThisWorkbook.Sheets("NOUVEAU").Cells(nom, tachesNouvelles).Value = IIf(estCapable = 1, 1, "")
    Next tachesNouvelles
Next nom
End Sub

à tester

a+
 

luke3300

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

Bonjour mromain et le forum,

merci pour ton code, je vais le mettre en application aujourd'hui et je ne manquerais pas de te donner des nouvelles.

Bonne journée à tous et encore merci à vous mromain et swifty.
 

luke3300

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

Juste une question, y-a-t'il moyen de faire en sorte que lorsqu'il n'y a rien comme nom ou données, il n'indique pas le "1" par défaut mais le "0"? Comme ça, les cases restent en blanc plutôt que de se mettre sous la MFC.

Merci d'avance.
 

mromain

XLDnaute Barbatruc
Re : Synthèse de données

salut luke3300

voici le code modifié :
Code:
Sub test()
Dim nom As Integer, tachesNouvelles As Integer, tacheAncienne As Range
Dim colTache As Range, ligneNom As Range, estCapable As Integer
For nom = 12 To 17
    For tachesNouvelles = 2 To 36
        estCapable = 1
        Set tacheAncienne = ThisWorkbook.Sheets("NOUVEAU").Cells(5, tachesNouvelles)
        With ThisWorkbook.Sheets("ANCIEN")
            While tacheAncienne.Row < 12
                If tacheAncienne.Value <> vbNullString Then
                    Set colTache = .Rows(4).Find(what:=tacheAncienne.Value, LookIn:=xlValues, lookat:=xlWhole)
                    Set ligneNom = .Columns(1).Find(what:=ThisWorkbook.Sheets("NOUVEAU").Range("A" & nom).Value, LookIn:=xlValues, lookat:=xlWhole)
                    If ligneNom Is Nothing Then
                        estCapable = 0
                    Else
                        If Not colTache Is Nothing Then
                            estCapable = estCapable * IIf(.Cells(ligneNom.Row, colTache.Column).Value = 1, 1, 0)
                        End If
                    End If
                End If
                Set tacheAncienne = tacheAncienne.Offset(1, 0)
            Wend
        End With
        ThisWorkbook.Sheets("NOUVEAU").Cells(nom, tachesNouvelles).Value = IIf(estCapable = 1, 1, "")
    Next tachesNouvelles
Next nom
End Sub

a+
 

luke3300

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

Salut mromain et le forum,

génial j'y vois déja plus de blanc. :)

Cependant, lorsque les lignes 5 à 11 de l'onglet "NOUVEAU" (comprenant les anciennes tâches à comparer) ne contient rien, tout est tout de même en MFC.
N'y-a-t'il pas moyen de laisser toutes les cases blanches par défaut et que le code ne réagisse que quand il y a un nom dans la colonne "Noms" et des données dans les lignes 5 à 11 de l'onglet "NOUVEAU"?

Déjà un très grand merci pour ton aide, mon fichier se monte grâce à toi.
Bon fin de journée.
 

mromain

XLDnaute Barbatruc
Re : Synthèse de données

re-salut,

à tester:
Code:
Sub test()
Dim nom As Integer, tachesNouvelles As Integer, tacheAncienne As Range
Dim colTache As Range, ligneNom As Range, estCapable As Integer
For nom = 12 To 17
    For tachesNouvelles = 2 To 36
        estCapable = 1
        Set tacheAncienne = ThisWorkbook.Sheets("NOUVEAU").Cells(5, tachesNouvelles)
        With ThisWorkbook.Sheets("ANCIEN")
            While tacheAncienne.Row < 12
                If tacheAncienne.Value <> vbNullString Then
                    Set colTache = .Rows(4).Find(what:=tacheAncienne.Value, LookIn:=xlValues, lookat:=xlWhole)
                    Set ligneNom = .Columns(1).Find(what:=ThisWorkbook.Sheets("NOUVEAU").Range("A" & nom).Value, LookIn:=xlValues, lookat:=xlWhole)
                    If ligneNom Is Nothing Then
                        estCapable = 0
                    Else
                        If Not colTache Is Nothing Then
                            estCapable = estCapable * IIf(.Cells(ligneNom.Row, colTache.Column).Value = 1, 1, 0)
                        End If
                    End If
                End If
                Set tacheAncienne = tacheAncienne.Offset(1, 0)
            Wend
        End With
        If ThisWorkbook.Sheets("NOUVEAU").Cells(5, tachesNouvelles).Value = vbNullString Then estCapable = 0
        ThisWorkbook.Sheets("NOUVEAU").Cells(nom, tachesNouvelles).Value = IIf(estCapable = 1, 1, "")
    Next tachesNouvelles
Next nom
End Sub

a+
 

luke3300

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

Bonjour mromain et le forum,

Nickel, merci beaucoup! :)

Sans vouloir abuser, j'ai encore quelques questions ...

Pour perfectionner un peu ce fichier (car j'ai adapté le code sur mon fichier réel qui est bien sur plus long), peut-on éviter qu'il fasse le contrôle sur des lignes où il n'y a pas de nom d'inscrit?
Pour m'expliquer ... mon vrai fichier va jusque la ligne 125 au lieu de 17 et jusque la colonne DE qui est je crois la 109 ème, mais je n'utilise pas toutes les lignes. Il y a des noms jusqu'à la ligne 52 mais je veux laisser l'option de pouvoir en ajouter sans devoir adapter le code chaque fois. Dés lors serait-il pas possible qu'il ne fasse le contrôle que sur les lignes ou un nom est indiqué dans la colonne "Noms"? De même que dans le vrai fichier, les prénoms sont séparés des noms (j'ai des membres de la même famille lollll), les noms commencent à la celulle D26 et les prénoms à la celulle G26.

Pour te situer, je vais te mettre mon vrai fichier en joint.

Déjà un grand merci et bon samedi à toi et au forum.
 

Pièces jointes

  • test-Matrice de concordance 2009.zip
    31.8 KB · Affichages: 28
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 454
Messages
2 088 557
Membres
103 881
dernier inscrit
malbousquet