Comparer deux feuille et créer une feuille d'écarts

  • Initiateur de la discussion Initiateur de la discussion Aimedjie
  • 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 !

Aimedjie

XLDnaute Occasionnel
Bonjour à tous,

Dans un fichier Excel, j'ai une feuille de calcul avec plusieurs lignes contenant le nom d’employés (une ligne pour chaque employé) et plusieurs colonnes contenant les montants inscrits sur leur talon de paie.

J'aimerais avoir une macro qui me permettrait de créer une feuille qui indiquerait ensuite toutes les modifications apportées à la feuille originale.

Le pépin est que je ne peux pas comparer chaque cellule de l’originale avec la cellule qui possède les mêmes coordonnées sur la copie puisqu'il peut arriver que j'insère d'autres employés. Ainsi, tous les montants inscrits dans les colonnes de l’originale génèrent des écarts alors que les montants sont identiques pour les mêmes employés. Par exemple, je ne peux pas comparer B5(originale) avec B5(copie) puisque j’ajoute un employé sur la ligne 4. Donc, B5(originale) doit plutôt être comparé à B4(copie).

De plus, comme j'ai environ 5000 lignes et 50 colonnes, je crois qu'analyser chaque cellule sera beaucoup trop lourd pour le fichier.

Donc, la macro doit identifier, pour chaque employé, les montants qui ne sont plus les mêmes ainsi que les nouveaux employés et ceux qui ont été supprimés.
 

Pièces jointes

Re : Comparer deux feuille et créer une feuille d'écarts

Bonjour
Re JB


Ci joint un fichier avec une macro.
Sélection des feuilles avec un USF
Recherche des noms supprimés
Recherche des noms ajoutés
Recherche des différences au niveau de la colonne B
Affichage des écarts.

A tester

JP
 

Pièces jointes

Re : Comparer deux feuille et créer une feuille d'écarts

C'est parfait pierrejean, mais est-ce possible de la commenter maintenant pour que je puisse d'abord la comprendre et ensuite l'incorporer dans mon fichier.

Encore une fois merci!
 
Re : Comparer deux feuille et créer une feuille d'écarts

Bonjour Aimedjie, JB, JP et PierreJean, bonjour à toutes et à tous,

Pour PierreJean : je suis ce fil depuis le début, ou presque, mais je pense que tes explications ne seront pas très claires sans fichier joint 😉

Par contre, et ce n'est pas une remarque désobligeante, je vois que tu scannes les cellules directement sur la feuille copie. Ne crois-tu pas qu'un simple tableau pourrais être plus rapide ?

@+
 
Re : Comparer deux feuille et créer une feuille d'écarts

Est-ce que le fichier fonctionne si le nombre de lignes de la feuille originale est différent du nombre de ligne de la feuille copie et vice-versa? J'ai inséré des lignes dans la feuille copie et je me suis retrouvé avec deux employés nommés total...

Merci.
 
Re : Comparer deux feuille et créer une feuille d'écarts

Re

Normalement si les employés sont ajoutés en inserant des lignes (ce qui parait normal vu que la derniere est un total) le fonctionnement sera assuré meme si le nombre de lignes est different en Originale et Copie

@nolich
Exact un (ou plutot 2) tableau(x) serait(ent) plus rapides mais a moins d'avoir affaire a une multinationale le scan sur feuille devrait suffire
D'autre part rien ne s'oppose ,bien au contraire, a ce que tu proposes une solution exploitant cette possibilité
 
Re : Comparer deux feuille et créer une feuille d'écarts

Re, bonjour à toutes et à tous,

Tu as raison, PierreJean : inutile de compliquer les chose quand elles peuvent être faites simplement. En tout cas, j'ai apprécié ton code.

@+
 
Re : Comparer deux feuille et créer une feuille d'écarts

Bonjour pierrejean,

J'ai modifié un peu la procédure pour l'adapter à mon fichier et il trouve aucun écart. Est-ce possible de savoir ce qui cloche?

Public Sub comparaison(ByVal feuilleDeclare As Worksheet, feuilleVerifie As Worksheet, _
feuilleComparaison As Worksheet, colCodeDeclare As Long, _
hautDeclare As Long, colNomComparaison As Long, _
colTotalRepartitionComparaison As Long)

'==========================================================================
'Identifier tous les écarts entre la feuille originale et la copie.
'==========================================================================

Dim listeCompleteEmploye As Collection
Dim totalEmploye As Collection
Dim ligneEmployeDeclare As Long, ligneEmployeVerifie As Long
Dim nbEmploye As Long, chaqueEmploye As Long
Dim colonneSomme As Long, colCompare As Long
Dim ligne As Long, derniereLigneComparaison As Long
Dim rangeEmployeDeclare As Range, rangeEmployeVerifie As Range

'Déclaration des 3 collections.
Set listeCompleteEmploye = New Collection
Set totalEmploye = New Collection

'Déverrouiller toutes les feuilles impliquées.
Call protectSheet(False, feuilleDeclare)
Call protectSheet(False, feuilleVerifie)
Call protectSheet(False, feuilleComparaison)

'Supprimer toutes les cellules pour démarrer avec une feuille vierge.
feuilleComparaison.Select
feuilleComparaison.Cells.Delete shift:=xlUp

'Remplissage de la collection des employés de la feuille employeur.
For ligneEmployeDeclare = hautDeclare To feuilleDeclare.Cells(65536, _
colCodeDeclare).End(xlUp).Row - 1

On Error Resume Next

listeCompleteEmploye.Add feuilleDeclare.Cells(ligneEmployeDeclare, _
colCodeDeclare), _
CStr(feuilleDeclare.Cells(ligneEmployeDeclare, _
colCodeDeclare))

On Error GoTo 0

Next ligneEmployeDeclare

'Remplissage de la collection des employés de la feuille répartition.
For ligneEmployeVerifie = hautDeclare To _
feuilleVerifie.Cells(65536, _
colCodeDeclare).End(xlUp).Row - 1

On Error Resume Next

listeCompleteEmploye.Add feuilleVerifie.Cells(ligneEmployeVerifie, _
colCodeDeclare), _
CStr(feuilleVerifie.Cells(ligneEmployeVerifie, _
colCodeDeclare))

On Error GoTo 0

Next ligneEmployeVerifie

'Remplissage de la collection de tous les employés.
For nbEmploye = 1 To listeCompleteEmploye.Count
On Error Resume Next
totalEmploye.Add listeCompleteEmploye(nbEmploye), _
CStr(listeCompleteEmploye(nbEmploye))
On Error GoTo 0
Next nbEmploye

'Ligne de depart rangeEmployeVerifie'écriture dans la feuille Comparaison.
ligne = hautDeclare

'Rechercher chaque employé dans la feuille employeur et la feuille répartition.
For chaqueEmploye = 1 To totalEmploye.Count

Set rangeEmployeDeclare = feuilleDeclare.Columns(colNomComparaison) _
.Find(totalEmploye(chaqueEmploye), _
LookIn:=xlValues, lookat:=xlWhole)
Set rangeEmployeVerifie = feuilleVerifie.Columns(colNomComparaison) _
.Find(totalEmploye(chaqueEmploye), _
LookIn:=xlValues, lookat:=xlWhole)

'Valider Si l'employé se trouve uniquement dans une feuille.
If rangeEmployeDeclare Is Nothing Or rangeEmployeVerifie Is Nothing Then

'Copier la ligne dans la feuille où l'employé est inscrit et la coller directement dans
'la feuille comparaison.
If rangeEmployeDeclare Is Nothing Then

feuilleVerifie.Range(Cells(rangeEmployeVerifie.Row, _
colNomComparaison).Address & ":" _
& Cells(rangeEmployeVerifie.Row, _
colTotalRepartitionComparaison).Address) _
.Copy Destination:=feuilleComparaison.Cells(ligne, 1)

ligne = ligne + 1

End If

If rangeEmployeVerifie Is Nothing Then

feuilleDeclare.Range(Cells(rangeEmployeDeclare.Row, 1).Address & ":" _
& Cells(rangeEmployeDeclare.Row, _
colTotalRepartitionComparaison).Address) _
.Copy Destination:=feuilleComparaison.Cells(ligne, 1)

ligne = ligne + 1

End If

'Si par contre, l'employé se trouve dans les feuilles employeur et répartition, il faut
'analyser toutes les colonnes.
Else

For colCompare = colNomComparaison To colTotalRepartitionComparaison

'Si la valeur dans la feuille employeur diffère de celle de la feuille répartition,
'il faut copier le nom de l'employé et le coller dans la colonne A de la feuille
'comparaison.
If feuilleVerifie.Cells(rangeEmployeVerifie.Row, colCompare) <> _
feuilleDeclare.Cells(rangeEmployeDeclare.Row, colCompare) Then

feuilleComparaison.Cells(ligne, 1) = totalEmploye(chaqueEmploye)

'Ensuite, il faut copier toutes les differences de cet employé et les coller dans la
'la feuille comparaison.
If feuilleDeclare.Cells(rangeEmployeDeclare.Row, colCompare) - _
feuilleVerifie.Cells(rangeEmployeVerifie.Row, colCompare) <> 0 Then

feuilleComparaison.Cells(ligne, colCompare) = _
feuilleDeclare.Cells(rangeEmployeDeclare.Row, colCompare) - _
feuilleVerifie.Cells(rangeEmployeVerifie.Row, colCompare)

Else

feuilleComparaison.Cells(ligne, colCompare) = "-"

End If

ligne = ligne + 1

Exit For

End If

Next colCompare

End If

Next chaqueEmploye

'Définir la dernière ligne de la colonne A de la feuille comparaison.
derniereLigneComparaison = feuilleComparaison.Cells(65536, _
colCodeDeclare).End(xlUp).Row + 1

'S'il n'y a aucun écart, un message doit s'inscrire plutôt que des totaux.
If derniereLigneComparaison < hautDeclare Then

feuilleComparaison.Cells(derniereLigneComparaison, 1) = "Il n'y a aucun écart."
feuilleComparaison.Cells(derniereLigneComparaison, 1).Font.Bold = True

'Sinon, identifier la ligne total et inscrire les formules de somme et mettre la ligne
'en gras.
Else

feuilleComparaison.Cells(derniereLigneComparaison, 1) = "Total"
feuilleComparaison.Cells(derniereLigneComparaison, 1).Font.Bold = True

For colonneSomme = colNomComparaison To colTotalRepartitionComparaison

feuilleComparaison.Cells(derniereLigneComparaison, _
colonneSomme).FormulaLocal = _
"=SOMME(" & Cells(hautDeclare, colonneSomme).Address & ":" _
& Cells(derniereLigneComparaison - 1, colonneSomme).Address & ")"

feuilleComparaison.Cells(derniereLigneComparaison, _
colonneSomme).Font.Bold = True

Next colonneSomme

End If

'Protéger toutes les feuilles impliquées.
Call protectSheet(True, feuilleDeclare)
Call protectSheet(True, feuilleVerifie)
Call protectSheet(True, feuilleComparaison)

End Sub


Merci.
 
Re : Comparer deux feuille et créer une feuille d'écarts

Bonjour pierrejean,

Merci beaucoup pour ta macro. Elle fonctionne maintenant à merveille. Par contre, je crois qu'il y a un petit problème. La macro ne reconnait pas les doublons alors qu'il se peut qu'il y ait deux employés avec le même nom, mais la macro doit considérer deux personnes plutôt qu'une seule.

J'ai ouvert plusieurs discussions pour donner des numéros d'identification à chaque employé afin d'éviter les doublons, mais je n'ai pas eu de réponse.

Est-ce que quelqu'un peut adapter la macro de pierrejean pour qu'elle considère les doublons?

Merci.
 
Re : Comparer deux feuille et créer une feuille d'écarts

Re

Toutes mes excuses !!!!
J'ai oublié de joindre le fichier
Le voici

Bonjour,

Je suis nouvelle sur le site, mais j 'ai remarqué que beaucoup de personnes se débrouillent merveilleusement bien avec excel...

J'ai un besoin particulier, j'ai un fichier excel permanent à remplir avec un autre fichier excel que j'exporte d'une base de donnée. Seulement le fichier exporté ne comporte pas toutes les lignes du fichier de base qu'il faut que je remplisse chaque mois...de faire des 'va et viens' entre chaque fichier entraine des erreurs , et je suis sure qu'il doit exister une solution...auriez vous une solution pour moi ???


Merci par avance
 
- 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

Discussions similaires

  • Question Question
Microsoft 365 Créer un VBA
Réponses
2
Affichages
267
Retour