code vba pour comparer deux feuilles

raniou010

XLDnaute Nouveau
bonjour a vous tous , c'est ma première publication , je veux bien un code VBA pour comparer deux feuilles Excel ( si A de premier = A de deuxième et E de premier = X de deuxième et AM de premier = Y de deuxième alors je sélectionne les lignes dans la premiere feuille ou bien je mets les lignes dupliquées dans une nouvelle feuille car je vais faire des modification dans ces ligne mais au premier temps je veux les trouver .
c'est mon premier test qui n'est pas du tout bon
Code:
Sub test()
Dim w1 As Worksheet, w2 As Worksheet, w3 As Worksheet
Dim I As Long
Windows("test.csv").Activate 'Nom du classeur
Set w1 = Sheets("histo") 'Feuille qui contient les duppliques
Set w2 = Sheets("duplic") 'Feuille qui contient l'historique des vols
Set w3 = Sheets("traitement") 'Feuille qui doit faire apparaitre les vols duppliques daans histo
For I = 2 To w1.Range("c65536").End(xlUp).Row
    If Application.WorksheetFunction.CountIf(w2.Range("a:a"), w1.Range("a" & I)) = 0 Then
              w1.Range("a" & I & ":a" & I).Copy Destination:=w3.Range("a65536").End(xlUp).Offset(1, 0)
    End If
Next
MsgBox "TERMINE"
End Sub
 

vgendron

XLDnaute Barbatruc
Hello
ton fichier en retour avec un bouton à cliquer
dans ton fichier.. il n'y avait pas de lignes communes. donc rien à identifier et à copier dans la troisième feuille ==> j'ai donc ajouté une ligne pour le test

Fichier supprimé à la demande de l'auteur du post
 
Dernière édition:

vgendron

XLDnaute Barbatruc
euh.. non, ce n'est pas plus clair.. désolé..
avec ton fichier fourni
peux tu expliquer et montrer quelles lignes de quelle feuilles doivent etre recopiées dans la feuille traitement.. ??

dans l'exemple j'ai 23 lignes dans duplicates alors je doit les trouver dans histo
si tu les trouves.. alors. que fais tu..
si tu ne les trouves pas.. que fais tu?

et dans le fichier.. on ne les trouve pas non plus.. aucune ligne commune entre les deux feuilles..
 

vgendron

XLDnaute Barbatruc
pfffff... va vraiment falloir faire un effort pour expliquer... je ne comprend rien !

ton fichier "Trafic_histo_fevrier_2018"===> ca correspont à la feuille "Histo" du premier fichier?
les lignes jaunes sont celles qui doivent etre identifiées et donc copiées dans traitement???

tu parles de filtres..
dans la feuille "Duplic"
==> Filtre sur Colonne A : 24/02/2018 ==> UNE SEULE ligne==> colonnne X = DLH2222 - Colonne X = A

si je filtre aussi dans la feuille "HISTO"
colonne A: 24/02/2018==> 159 lignes ==>
filtre colonne E pour avoir "DLH2222" ===> AUCUNE ligne
(y aurait il une subtilité entre "DLH222 et LH222" ???)

ce que j'ai compris,jusqu'à présent c'est:
l'INFO cherchée est constituée du "Flight Date Block" ET "Flight No" ET "ARR_Dep"
cette info dans la feuille DUPLIC correspond aux colonnes A X et Y
cette info dans la feuille HISTO correspond aux colonnes A E et AM
 

vgendron

XLDnaute Barbatruc
peut etre ceci.. au cas ou....
Cette macro liste les DOUBLONS présents dans la feuille Histo et les mets dans la feuille Traitement...

VB:
Sub DOUBLONS()
Application.ScreenUpdating = False

Dim TabHisto() As Variant

With Sheets("Histo")
    finH = .UsedRange.Rows.Count
    TabHisto = .Range("A1:AN" & finH).Value 'on met toutes les infos de la feuille Histo dans un tablo
End With


For I = LBound(TabHisto, 1) To UBound(TabHisto, 1) - 1 'on check les doublons
    If TabHisto(I, 1) = TabHisto(I + 1, 1) And TabHisto(I, 5) = TabHisto(I + 1, 5) And TabHisto(I, 39) = TabHisto(I + 1, 39) Then
        TabHisto(I, 40) = "VRAI"
    End If
Next I

For I = LBound(TabHisto, 1) To UBound(TabHisto, 1) 'on parcourt tout le tableau "Histo"
    If TabHisto(I, 40) = "VRAI" Then 'si c'est un doublon
        With Sheets("Traitement") 'on colle les info dans la feuille traitement
            .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) = TabHisto(I, 1)
            For j = LBound(TabHisto, 2) + 1 To UBound(TabHisto, 2)
                .Range("A" & .Rows.Count).End(xlUp).Offset(0, j - 1) = TabHisto(I, j)
            Next j
        End With
    End If
Next I

Application.ScreenUpdating = True

End Sub
 

vgendron

XLDnaute Barbatruc
VB:
Sub IntToHeure()
With Sheets("Duplic")
    Set ici = Application.InputBox("Sélectionnez la colonne à convertir", Type:=8)
  
    fin = .UsedRange.Rows.Count
    colonne = ici.Column
  
    For I = 2 To fin
        test = Format(.Cells(I, colonne), "0000")
        .Cells(I, colonne) = (Left(test, 2)) & ":" & Right(test, 2)
   Next I
End With
End Sub
 

vgendron

XLDnaute Barbatruc
Salut
Comme tu ne réponds pas aux questions que je te pose...je ne suis toujours pas sur d'avoir compris...
La question c'est : MONTRE MOI une ligne ou plusieurs qui SONT des duplicates
en attendant: Voici ce que j'ai compris pour l'instant: Regarde et corrige moi..

1) votre systeme informatique créé un fichier "Histo.csv"
2) Dans ce fichier, il y a des vols dupliqués
==>soit parce que ils ont la meme date et le meme numéro et le meme sens (Colonnes A, AM et E)
==> soit parce que il n'y a pas de numéro de vol (Colonne E = vide)
3) tu veux retrouver TOUS ces vols dupliqués pour pouvoir les modifier

la nouvelle macro que je viens de faire (dans la Pièce jointe)
fait un tri sur les colonnes A E et AM
met une formule en AN (cette formule a besoin du tri précédent)
cette formule montre les "dupliqués"
la macro fait ensuite un filtre pour ne voir QUE les dupliqués
la macro copie les Dupliqués dans la feuille que j'ai appelée "DuplicatesHisto"

Fichier supprimé à la demande de l'auteur du post
 
Dernière édition:

vgendron

XLDnaute Barbatruc
ouh laa... je pense avoir compris un élément important...

les duplicates sont DEJA identifiés par votre système informatique DANS le fichier duplicate !! ===> Correct??

et donc. ce que tu veux..
pour chaque duplicate, retrouver la ligne correspondante dans le fichier Histo pour pouvoir la modifier...==>Correct?
 

vgendron

XLDnaute Barbatruc
ok !
on progresse...
maintenant, question suivante..
Comment souhaites tu que la macro fonctionne? ==> que veux tu qu'elle fasse?

1) je suppose que tu vas modifier toutes les lignes UNE par UNE à la MAIN
2) 1er exemple de fonctionnement
==>dans une troisième feuille: tu as
la ligne duplicate, et juste en dessous la ligne Histo correspondante ==> comme ca, tu peux voir les deux lignes en meme temps
tu modifies les lignes "histo" ==> Tu valides, et les modifs sont enregistrées dans la feuille Histo d'origine

2eme exemple de fonctionnement
==> tu cliques sur une ligne duplicate ===> tu cliques sur un bouton
==> la macro t'emmene directement sur la ligne correspondante dans Histo
==> tu modifies cette ligne, et tu valides ==> la ligne duplicate disparait de la feuille duplicate..

3eme exemple..???peut etre as tu une idée précise de comment tu veux travailler pour moidifier les lignes histo?
 

Statistiques des forums

Discussions
312 192
Messages
2 086 056
Membres
103 110
dernier inscrit
Privé