Améliorer un code (comparer deux feuilles d'un classeur)

Tempio

XLDnaute Occasionnel
Bonjour à tous, j'aurais besoin d'aide pour améliorer un script qui m'a été conçu par un développeur du forum assez sympa. Il se trouve que la personne est assez busy en ce moment et donc j'aurais bsoin de gens qui se connaissent en VBA svp.

Il s'agit de comparer les données de 2 feuilles excel et d'en ressortir les personnes nouvellement arrivées et celles qui sont parties. Entre temps parmis celles qui sont arrivées, j'aimerais savoir ceux qui sont en CDD et ceux en CDI. J'aimerais pouvoir faire d'autre comparaison de ce genre. Le script que j'ai est fonctionnel mais pas assez adapté aux requetes que je viens de citer. Merci d'avance à vous.
 

Pièces jointes

  • Modele2.xls
    43 KB · Affichages: 94
  • Modele2.xls
    43 KB · Affichages: 93
  • Modele2.xls
    43 KB · Affichages: 90

Modeste

XLDnaute Barbatruc
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Bonsoir Tempio,

J'ai beau regarder ton fichier, lire tes explications, je n'arrive pas à comprendre ce que tu souhaites. Dans ton fichier,
- tu donnes 3 chiffres en A7:A9 ... mais ces chiffres sont les mêmes que ceux qui sont repris dans ton tableau récapitulatif!? Pourquoi 2 calculs, alors?
- En C3:C7 tu mentionnes 5 calculs que tu aimerais réaliser, mais quel est le lien avec le fameux tableau récapitulatif?
- Ce que tu voudrais faire, à terme ce serait compléter le tableau qui se trouve en A24:M32? Est-ce de ça que tu parles quand tu évoques "pouvoir faire d'autre comparaisons de ce genre"

Dans ton message, tu dis vouloir
ressortir les personnes nouvellement arrivées et celles qui sont parties
... mais dans le classeur lui-même tu écris
le nombre d'agents EO mais en CDD (De la feuille Ancien)
donc les nouveaux, les partis ... et les anciens (tout le monde, en fin de compte):confused::confused:

Comme je ne vois qu'assez vaguement le rapport avec la première discussion que tu avais ouverte, ne penses-tu pas qu'il faudrait prendre du temps pour mettre à plat toutes tes envies et nous faire un "état des lieux" le plus précis et le plus détaillé possible?
 

Tempio

XLDnaute Occasionnel
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Salut à toi Modeste et merci de bien vouloir m'aider.

-En fait les chiffres en A7:A9 sont les résultats obtenus par le code qui est dans mon Module1 (Sauf que ce code ne me calcule que les personnes nouvellement arrivées "qui sont dans la feuille Nouveau et pas dans celle Ancien" / Il me donne également le nombre de nouveaux arrivés en classification IG / Puis le nombre de personnes parties "existant dans Ancien mais plus dans Nouveau.
-Tu comprends que je ne peux pas remplir tout mon tableau seulement avec ces quelques requêtes. Les chiffres présents en ce moment dans le tableau ne sont pas trop important (je voulais juste montrer 1 exemple de ce que je veux faire.
-Par contre j'aimerais pouvoir créer ces requêtes que j'ai mentionner en C3:C7 qui me serviront à remplir mon tableau qui se trouve en A24:M32.
-j'aimerais pouvoir après calcul du nombre de personnes nouvellement arrivées : Savoir combien sont des EO, combien sont des ATHQ, combien sont des ATS et combien y at'il de IG.
-En même temps aussi j'aimerais connaitre parmis ceux là (requete précédente) combien de ces EO sont en CDI, et combien sont en CDD. Même chose pour les autres classifications.
-Ca c'était pour ceux qui viennent d'arriver : Entre temps j'aimerais aussi connaitre combien parmis ceux qui sont partis : ceux qui étaient des EO, ceux qui étaient des ATHQ, combien y avait de ATS et combien de IG.
-Et parmis ceux là, pouvoir compter les EO qui étaient en CDD et ceux qui étaient en CDI. Pareil pour les autres classifications.

J'espère avoir été assez claire et précis cette fois. En tout cas, je suis là en cas d'amples explications et surtout merci encore d'avance.
 

Modeste

XLDnaute Barbatruc
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Bonjour Tempio, le forum,

Très sincèrement, je ne suis toujours pas certain d'avoir tout compris :confused:
J'ai donc tenté de trouver un système qui complète les lignes 29, 30 et 31 de ton tableau récapitulatif.

... A toi de voir. Si même ça te semble ok au départ, je ne saurais trop te recommander de faire des tests approfondis!!
 

Pièces jointes

  • Tempio Modele2.xls
    51.5 KB · Affichages: 73

Tempio

XLDnaute Occasionnel
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Merci Modeste, je venais justement vous dire que j'ai pu trouver comment faire mes requêtes citées dans le fichier C3:C7 avec ce code que j'ai complété (voire fichier joint). J'arrive à remplir les cellules B29:I29. Maintenant je me demande comment je puis faire une requête qui me compte :
-le nombre de EO (en CDD et ceux en CDI) dans la feuille ancien
-le nombre de IG (en CDD et ceux en CDI) dans la feuille ancien
-le nombre de ATS (en CDD et ceux en CDI) dans la feuille ancien
-le nombre de ATHQ (en CDD et ceux en CDI) dans la feuille ancien

Avec pratiquement le mm script que j'utilise svp. Merci d'avance.
 

Pièces jointes

  • Modele2.xls
    48 KB · Affichages: 66
  • Modele2.xls
    48 KB · Affichages: 67
  • Modele2.xls
    48 KB · Affichages: 73

Modeste

XLDnaute Barbatruc
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Re-bonjour,

Alors moi, je ne change plus rien, je n'en ai plus le temps! (ou plus le courage !??)
Par contre, je viens de voir que Bebere a répondu dans ton ancien fil. Ca devient vraiment difficile de s'y retrouver, mais il a peut-être bien trouvé comment faire ton bonheur :D ... Si c'est le cas, bravo à lui!
 

Tempio

XLDnaute Occasionnel
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Salut, je viens également de trouver comment exécuter les autres requetes ci dessus mais j'ai un souci. Lorsque je teste le code avec le fichier Modele2 qui est un exemple, ca passe bien mais lorsque je place le code avec les données réelles, certains resultats s'affichent dans les cellules mais pas d'autres. J'ai bien regarder plusieurs fois mais je ne vois pas ce qui peut être le problème. Il s'agit de pas moins de 400 enregistrements, cela n'est t'il pas dû au nombre d'enregistrements ? Voici le nouveau code :

Sub deb()

Set liste = CreateObject("Scripting.Dictionary")

With Sheets("Nouveau")
Set zone1 = .Range(.Cells(2, 1), .Cells(.Range("A" & Application.Rows.Count).End(xlUp).Row, 1))
End With

With Sheets("Ancien")
Set zone2 = .Range(.Cells(2, 1), .Cells(.Range("A" & Application.Rows.Count).End(xlUp).Row, 1))
End With

For Each z2 In zone2 'constitution d'une liste sans doublons des "Anciens"
If Not liste.exists(z2.Value) Then liste(z2.Value) = z2.Value

If z2.Offset(0, 12) = "IG" And z2.Offset(0, 8) = "02" Then anciens5 = anciens5 + 1 'compte nouveaux arrivants en classification IG en CDD
If z2.Offset(0, 12) = "IG" And z2.Offset(0, 8) = "01" Then anciens6 = anciens6 + 1 'compte nouveaux arrivants en classification IG en CDI
If z2.Offset(0, 12) = "EO" And z2.Offset(0, 8) = "02" Then anciens7 = anciens7 + 1 'compte nouveaux arrivants en classification EO en CDD
If z2.Offset(0, 12) = "EO" And z2.Offset(0, 8) = "01" Then anciens8 = anciens8 + 1 'compte nouveaux arrivants en classification EO en CDI
If z2.Offset(0, 12) = "ATHQ" And z2.Offset(0, 8) = "02" Then anciens9 = anciens9 + 1 'compte nouveaux arrivants en classification ATHQ en CDD
If z2.Offset(0, 12) = "ATHQ" And z2.Offset(0, 8) = "01" Then anciens10 = anciens10 + 1 'compte nouveaux arrivants en classification ATHQ en CDI
If z2.Offset(0, 12) = "ATS" And z2.Offset(0, 8) = "02" Then anciens11 = anciens11 + 1 'compte nouveaux arrivants en classification ATS en CDD
If z2.Offset(0, 12) = "ATS" And z2.Offset(0, 8) = "01" Then anciens12 = anciens12 + 1 'compte nouveaux arrivants en classification ATS en CDI
Next z2

For Each z1 In zone1 'chaque fois qu'un "nouveau" n'est pas dans la liste des "anciens"
If Not liste.exists(z1.Value) Then

comptenouveau = comptenouveau + 1 'compteur incrémenté

If z1.Offset(0, 12) = "IG" And z1.Offset(0, 8) = "02" Then comptef5 = comptef5 + 1 'compte nouveaux arrivants en classification IG en CDD
If z1.Offset(0, 12) = "IG" And z1.Offset(0, 8) = "01" Then comptef6 = comptef6 + 1 'compte nouveaux arrivants en classification IG en CDI
If z1.Offset(0, 12) = "EO" And z1.Offset(0, 8) = "02" Then comptef7 = comptef7 + 1 'compte nouveaux arrivants en classification EO en CDD
If z1.Offset(0, 12) = "EO" And z1.Offset(0, 8) = "01" Then comptef8 = comptef8 + 1 'compte nouveaux arrivants en classification EO en CDI
If z1.Offset(0, 12) = "ATHQ" And z1.Offset(0, 8) = "02" Then comptef9 = comptef9 + 1 'compte nouveaux arrivants en classification ATHQ en CDD
If z1.Offset(0, 12) = "ATHQ" And z1.Offset(0, 8) = "01" Then comptef10 = comptef10 + 1 'compte nouveaux arrivants en classification ATHQ en CDI
If z1.Offset(0, 12) = "ATS" And z1.Offset(0, 8) = "02" Then comptef11 = comptef11 + 1 'compte nouveaux arrivants en classification ATS en CDD
If z1.Offset(0, 12) = "ATS" And z1.Offset(0, 8) = "01" Then comptef12 = comptef12 + 1 'compte nouveaux arrivants en classification ATS en CDI
End If
Next z1


Sheets("Suivi Effectifs").Range("J7") = anciens5 'compte agents du mois précédants en classification IG en CDD
Sheets("Suivi Effectifs").Range("I7") = anciens6 'compte agents du mois précédants en classification IG en CDI
Sheets("Suivi Effectifs").Range("D7") = anciens7 'compte agents du mois précédants en classification EO en CDD
Sheets("Suivi Effectifs").Range("C7") = anciens8 'compte agents du mois précédants en classification EO en CDI
Sheets("Suivi Effectifs").Range("H7") = anciens9 'compte agents du mois précédants en classification ATHQ en CDD
Sheets("Suivi Effectifs").Range("G7") = anciens10 'compte agents du mois précédants en classification ATHQ en CDI
Sheets("Suivi Effectifs").Range("F7") = anciens11 'compte agents du mois précédants en classification ATS en CDD
Sheets("Suivi Effectifs").Range("E7") = anciens12 'compte agents du mois précédants en classification ATS en CDI

Sheets("Suivi Effectifs").Range("J8") = comptef5 'compte nouveaux arrivants en classification IG en CDD
Sheets("Suivi Effectifs").Range("I8") = comptef6 'compte nouveaux arrivants en classification IG en CDI
Sheets("Suivi Effectifs").Range("D8") = comptef7 'compte nouveaux arrivants en classification EO en CDD
Sheets("Suivi Effectifs").Range("C8") = comptef8 'compte nouveaux arrivants en classification EO en CDI
Sheets("Suivi Effectifs").Range("H8") = comptef9 'compte nouveaux arrivants en classification ATHQ en CDD
Sheets("Suivi Effectifs").Range("G8") = comptef10 'compte nouveaux arrivants en classification ATHQ en CDI
Sheets("Suivi Effectifs").Range("F8") = comptef11 'compte nouveaux arrivants en classification ATS en CDD
Sheets("Suivi Effectifs").Range("E8") = comptef12 'compte nouveaux arrivants en classification ATS en CDI

Sheets("Suivi Effectifs").Range("A9") = zone2.Count - (zone1.Count - comptenouveau) 'compteur du nombre de personnes parties


End Sub
 

Tempio

XLDnaute Occasionnel
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Salut, j'ai pu voir quel était mon pb : j'avais mal renseigner les cellules où il fallait aller regarder mes classifications dans la feuille Ancien.

Maintnant si ,possible j'aimerais pouvoir exploiter le script de la ligne 72 (Sheets("Suivi Effectifs").Range("A9") = zone2.Count - (zone1.Count - comptenouveau) ) qui me donne le nombre de personnes partis (présentes dans Ancien mais pas dans Nouveau).

J'aimerais pouvoir faire de mini requêtes comme avec celles plus haut. C'est à dire savoir parmis ces partants, combien étaien EO (en CDD ou en CDI) et même chose avec les ATS, ATHQ et IG. Merci d'avance.
 

Modeste

XLDnaute Barbatruc
Re : Améliorer un code (comparer deux feuilles d'un classeur)

re²,

Comme dit plus tôt, tu fais une première demande; Bebere propose une solution et moi une autre. Tu reviens ensuite avec des demandes supplémentaires ... et les deux mêmes tentent chacun une autre proposition, avec de grands points d'interrogation entre les deux oreilles (même si visiblement, on a compris plus ou moins la même chose).

Et maintenant tu reviens, une fois de plus ... mais en reprenant une partie du tout premier code proposé. Quand je disais n'être pas certain de comprendre ... Je confirme! :( Je confirme également ne pas avoir beaucoup de temps à ma disposition.

Donc, voilà ... si quelqu'un veut prendre le flambeau, qu'il se lève et parle ...

@+
 

Modeste

XLDnaute Barbatruc
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Bonsoir,

Je n'aime pas laisser les choses "en plan".
Ci-joint le dernier fichier proposé, comptabilisant les répartitions CDD/CDI pour les EO, ATS, ATQH et IG, qu'ils soient anciens, nouveaux ou partis. Ton bouton "Mettre à jour" est associé à la macro.Il me semble qu'il y a là toutes les réponses aux questions que tu pourrais te poser!?

Et c'est mon dernier mot, Jean-Pierre!

Bonne nuit,
 

Pièces jointes

  • Tempio Modele (V3).xls
    51.5 KB · Affichages: 54

Tempio

XLDnaute Occasionnel
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Salut Modeste, je viens de regarder ta solution et je vais la tester seulement j'aurais besoin que tu me fasses quelques commentaires sur le script stp. Merci pour ton aide.
 

Modeste

XLDnaute Barbatruc
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Bonjour Tempio,

Salut Modeste, je viens de regarder ta solution et je vais la tester seulement j'aurais besoin que tu me fasses quelques commentaires sur le script stp. Merci pour ton aide.
Je proposerais plutôt que tu testes la macro d'abord et ce, de manière approfondie, pour t'assurer que:
1) les résultats sont corrects
2) il n'y a pas l'une ou l'autre requête que tu aurais oubliée

Ensuite seulement et si les tests sont concluants, il sera toujours temps de commenter.
 

Tempio

XLDnaute Occasionnel
Re : Améliorer un code (comparer deux feuilles d'un classeur)

Je viens de tester le nouveau code avec les données réelles (en parametrant bien sure avec les bonnes variables). Lorsque j'exécute, il me donne une erreur 1004 à la ligne 58. Cela peut être dû à quoi stp ?
 

Statistiques des forums

Discussions
312 294
Messages
2 086 920
Membres
103 404
dernier inscrit
sultan87