Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'infos.

  • Initiateur de la discussion Initiateur de la discussion Tempio
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Tempio

XLDnaute Occasionnel
Salut à tous, j'aurais besoin d'aide pour venir à bout de mon pb. J'aimerais pouvoir comparer deux feuilles d'un même classeur (étant chacune une BDD). La 2e feuille est une mise à jour de la 1ere. J'aimerais savoir en comparant les 2 feuilles si ya eu des individus qui se sont ajoutés ou si y en a qui sont partis. Puis dans la 3e feuille, je voudrais inserrer le nombre de personnes ajoutés ou le nombres de personnes n'appartenant plus à la 2e liste mais qui étaient dans la 1ere. En même temps aussi, je voudrais faire cette requête qui me donnera le nombre d'individus appartenant à une mm entité par exemple (ou qui ont la mm fonction).

Voici, je joins un fichier modele qui illustre bien ce que je veux faire. Merci d'avance !!!
 

Pièces jointes

Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

Merci à toi Tdenfert, ce que tu m propose est foctionnel mais manuel. si les ajouts ou suppressions étaient fait manuellement j'utiliserais ta solution mais les BDD actualisées proviendront d'un SGBD avec plusieurs lignes. j'aimerais juste qu'en copiant les données dans la feuille "Nouveau", qu'il y ait automatiquement une repercution (mise à jour) dans la feuille "Recup". J'imagine que cela est possible, merci encore d'avoir essayé.
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

Bopnjour à tous.
Voici un code, qui parrait lourd, mais facilement adaptable pour faire ce que tu veux.
A toi d'en modifier la forme
Cordialement


Public comptepartis, compte, comptef
Sub deb()
With Sheets("Nouveau")
Set dernière = dernièreligne(Sheets("Nouveau"), 1)
Set zone1 = .Range(.Cells(2, 1), .Cells(dernière.Row, 1))

End With


With Sheets("Ancien")
Set dernière = dernièreligne(Sheets("Ancien"), 1)
Set zone2 = .Range(.Cells(2, 1), .Cells(dernière.Row, 1))
End With

' Les nouveaux
For Each z1 In zone1
flag = 0
For Each z2 In zone2
If z1 = z2 Then

flag = 1
compte = compte + 1
End If
Next
If flag = 0 Then comptenouveau = comptenouveau + 1
Next
MsgBox comptenouveau

' les partis
For Each z2 In zone2
flag = 1
For Each z1 In zone1
If z1 = z2 Then flag = 0
Next
comptepartis = comptepartis + flag
Next
MsgBox comptepartis

'les doublons ou 4 et la coloone analysée
For Each z1 In zone1
comptef = -1
For Each z2 In zone1
If z1.Offset(0, 4) = z2.Offset(0, 4) Then
comptef = comptef + 1
End If
Next
If comptef > 0 Then MsgBox comptef & " " & z1
Next

End
End Sub

Function dernièreligne(feuil, col)
Set dernièreligne = feuil.Columns(col).End(xlDown)
End Function
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

Salut à toi Sousou, je viens de compiler ta solution. Je reçois des MsgBox avec (4, 1, 1MMMM, 1NNNN). Je ne comprends pas bien ce que ça peut vouloir dire. Au lieu des MsgBox, j'aimerais pouvoir mettre ces valeur dans des cellules prévues dans la feuille "Recup". Est ce possible ?
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

Ok, Sousou c'est presque ce que je veux faire mais avec des valeurs affichées dans le MsgBox dans des cellules qui sont dans la feuille "Recup". En plus au mieux d'afficher 1MMMM et 1NNNN qu'il les compte tout simplement comme avec le nombre d'ajouts (4). Merci d'avance...
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

C'est la réponse à ma question Modeste, merci à sousou et à toi. Surtout n'allez pas trop loin svp lol, il se pourrait que j'ai encore besoin de vous d'ici là. Juste une pte question : La ligne suivante néttoie les cellules de B7 à D7 (est elle obligatoire ?)
Sheets("Recup").Range("B7😀7").ClearContents.
Il se peut que les cellules dans lequelles je veuille inserrer mes données ne soient pas forcement dans cette plage (B7😀7) mais dans un tableau (lignes et colonnes différentes) cmt je fais ds ce cas ?
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

Re-bonjour,

La ligne suivante néttoie les cellules de B7 à D7
Pour être précis, elle efface le contenu (donc pas les formats, ni les commentaires)

(est elle obligatoire ?)
... Ben non! 🙄

Il se peut que les cellules dans lequelles je veuille inserrer mes données ne soient pas forcement dans cette plage (B7😀7) mais dans un tableau (lignes et colonnes différentes) cmt je fais ds ce cas ?
Toujours si je te comprends bien, en modifiant les instructions figurant aux lignes 28, 39 et 49 dans le code du dernier fichier 😕
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

En effet Modeste on se comprend et je vois ce que tu veux dire (il suffit juste que je reférencie la cellule dans laquelle j'aimerais inserrer la donnée ds la feuille "Recup"). En tout cas, on reste en contact je l'espère et je vous fais signe de mes avancés pti à pti. Merci beaucoup pour votre aide les gars.
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

Je viens de tester le script avec les données réelles (480 lignes dans la feuille "Ancien" et 500 lignes dans celle de "Nouveau") cela donne le bon resultat sauf que ça rame un bon moment avant de l'afficher. Y aurait il pas un moyen d'assouplir le script svp ? Surtout que j'aimerais faire beaucoup de sous requetes comme celles de la ligne 48 (du code) pour afficher les resultats selon des catégories différentes.
 
Re : Comparer les données de 2 feuilles excel et dire si ya ajout ou suppression d'in

re-bonjour,

J'ai considéré que parmi les "nouveaux" il n'y avait pas de doublons dans les matricules (croisons les doigts !)
Code à tester, donc:
VB:
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
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, 4) = "fonct9" Then comptef = comptef + 1 'compteur pour les "nouveaux" avec fonct9 en colonne E
    End If
Next z1

Sheets("Recup").Range("B7") = comptenouveau
Sheets("Recup").Range("D7") = comptef
Sheets("Recup").Range("C7") = zone2.Count - (zone1.Count - comptenouveau)

End Sub

En adaptant à ton fichier réel!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour