Comparaison délicate entre 2 feuilles
Bonjour
A des fins de reporting, j'ai besoin de comparer 2 fichiers excel, et notamment 1 feuille en particulier dans chacun de ces fichiers
Le 1er fichier (que j’appellerai A ) comprend une feuille qui recense toute une liste d'incident à J-2 et comportant 27 colonnes
le 2ieme fichier ( B ) comporte une seule feuille qui recense les incidents à J-1 sur 19 colonnes
Les 8 colonnes de différence nous servent à créer des TCD avec des formules qui fonctionnent très bien, incluant 3 colonnes que j'ai du remplir manuellement afin d'ajouter un niveau de granularité que nous n'avions pas
Les 19 premières colonnes du 1er fichier sont identiques à celles du 2ieme fichier, et la 1ere colonne donne le numéro d'incident (chaque ligne ayant sont numéro unique)
Est-il possible de comparer les 2 fichiers pour :
- garder les lignes présentent dans les 2 fichiers
- supprimer de A les lignes qui ne sont pas dans B (il s'agit des incidents qui ont étaient fermé)
- ajouter à A les lignes apparues en plus dans B (vous l'aurez deviné, il s'agit des nouveaux incident)
Pour les 3 dernières colonnes complété manuellement la 1ere fois, pas de problème, on maintient un fichier au jour le jour, je récupère donc directement les info dans ce 3ieme fichier
j'ai tenté avec la mise en forme conditionnelle entre A et B sur la colonne 1 avec les numéro d'incident mais des qu'elle tombe sur la 1ere différence, elle considère que toute la suite est différente
j'ai aussi essayé avec la formule : =IF(Sheet1!A1 <> Sheet2!A1, "Sheet1:"&Sheet1!A1&" vs Sheet2:"&Sheet2!A1, "") dans un fichier de test ou j'ai coller mes 2 feuilles et tenté la formule dans une 3ieme feuille
mais il ne m'affiche que la formule sans rien indiquer de plus (j'ai du louper un truc, même en étendant la formule sur 1000 lignes il ne remonte rien)
Est-ce seulement possible avec Excel 2010 ?
Pour le moment j'affiche les 2 cote à cote et je tri à la main, mais entre 600 et 700 incidents à trier chaque jour, j'aimerai bien une solution qui préserve ce qui me reste de vision
D'avance merci
Salut Ôberon,
sauf erreur et si je lis bien, au final... A = B !
- garder les lignes communes ;
- éliminer en A ce qui n'est pas en B ;
- ajouter en A les nouvelles lignes de B.
'Y a un truc que je ne dois pas capter!
A+
les problème c'est les 8 colonnes en plus dans A
si je me contente de copier/coller mes 19 colonnes commune entre A et B, les lignes correspondant aux 8 en plus (et surtout les 3 dernières qui sont des entrées manuelles) seront décalé
Ça ne pose pas de problème pour les nouveaux incident qui seront ajouté en plus en fin de fichier,
mais pour les incidents intermédiaires qui auraient été résolu, j'ai besoin que toute la ligne soit supprimé
ci-joint un excel de test que j'ai nettoyer, le fichier A servira toujours de base pour être mis à jour avec un fichier B chaque matin
Salut Ôberon,
à force de courir plusieurs lièvres, les neurones s'emmêlent...
Merci à Pandanlaidan d'avoir tracé la voie en démêlant l'écheveau!
Première version, qui crée une feuille 'EXTRACT' où les résultats sont affichés.
Un double-clic en 'FeuilleA' démarre la macro.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tData, iRowA%, iRowB%, iOK%
'
Cancel = True
Application.EnableEvents = False
Application.ScreenUpdating = False
On Error Resume Next
'
iRowA = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
iRowB = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row
'
If Sheets(Sheets.Count).Name <> "EXTRACT" Then Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "EXTRACT"
With Worksheets("EXTRACT")
Sheets(1).Range("A1:AD1").Copy Destination:=.Range("A1:AD1")
.Range("A2:AD" & iRowA).Value = Sheets(1).Range("A2:AD" & iRowA).Value
.Range("A" & iRowA + 1 & ":T" & iRowA + iRowB - 1).Value = Sheets(2).Range("A2:T" & iRowB).Value
tData = .Range("A2:AD" & iRowA + iRowB - 1).Value
For x = 1 To iRowA - 1
iOK = 0
For y = iRowA To UBound(tData, 1)
If tData(x, 1) = tData(y, 1) Then _
iOK = 1: _
Exit For
Next
tData(IIf(iOK = 0, x, y), 1) = ""
Next
.Range("A2").Resize(UBound(tData, 1), UBound(tData, 2)).Value = tData
.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.Columns("A:AD").AutoFit
End With
'
On Error GoTo 0
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End SubEst-ce bien cela que tu voulais?
A+
merci beaucoup
vu le nombre de ligne à traiter et la brouette qui me sert de PC, le script galère à sortir le résultat
mais j'ai quelque chose d'exploitable qui va bcp me faciliter la vie
encore une fois, merci