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
Bon.. un début en PJ

dans la feuille "Duplicate" ==> Cliquer sur le bouton
les lignes "Duplicates" sont recopiées dans la feuille Modification une ligne sur deux
en dessous de chaque duplicate, on récupère la ligne Histo associée

Comme le nombre et le nom des colonnes n'est pas le meme entre les feuille Histo et Duplicate,
j'ai juste récupéré les colonnes Jaunes : Flight Date - Heure vol - Flight Number et Sens vol

Dans la dernière colonne AH (LigneHisto), j'ai mis le numéro de ligne à laquelle j'ai trouvé le duplicate

tu peux donc faire tes modifs sur tous les duplicates.

il faudra juste que j'ajoute un bouton pour "valider" et recopier les modifs dans la feuille "Histo"

est ce que ca te convient pour le moment?

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

vgendron

XLDnaute Barbatruc
dans la version ci jointe, il suffit de cliquer sur une des lignes de duplicate . la macro t'emmene directement sur la ligne correspondante dans Histo

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

vgendron

XLDnaute Barbatruc
Hello

déjà. pour commencer, il faudrait que tu postes tous tes messages ici et pas dans la conversation privée.. ca m'évitera de louper des infos et de devoir basculer de l'un à l'autre
et pour ceux qui voudraient comprendre les différentes versions, ca les aidera

* pour la modification automatique:
-->dans la PJ, après clic sur "trouver Histo avec Duplicate"
--> on obtient une feuille Modification avec 329 lignes
Les lignes vont deux à deux: la première = Feuille Duplicate, et la seconde =Feuille Histo (avec son numéro pour la retrouver facilement)

==> tu veux modifier la ligne "Histo":(celles que j'ai coloré en vert) ==>Correct?
modification du "Flight_NO" Colonne C : Correct?
est ce que le nouveau Flight_No doit correspondre un minimum à celui de la ligne correspondante (en bleu au dessus)
Exemple 1: Ligne 3: Flight no vide, mais en ligne 2, c'est "XXX0067)
==> en ligne 3: le nouveau flight_No contient aussi le code compagnie "XXX"

Exemple 2: Ligne 9: U21746 et ligne 8: HOP3556 ==> les deux semblent totalement différents.. que met on en nouveau Flight_No?

Exemple 3: Ligne37: BGA161 et ligne36: BGA0161 ==> les deux se ressemblent.. ==> Quel nouveau Flight_No


le coté "aléatoire" dont tu parles me semble étrange..
je trouve étrange de changer un vol de la compagnie TU par un numéro de vol d'une autre compagnie.....?

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

raniou010

XLDnaute Nouveau
les xxxx s'écrivent automatiquement dans duplicates dans le cas ou le champs est vide dans histo alors que xxx n'est pas une compagnie du coup il faut la changé par un nom valide de n'importe quel compagnie pour que l'application l'accepte après
 

raniou010

XLDnaute Nouveau
Hello

déjà. pour commencer, il faudrait que tu postes tous tes messages ici et pas dans la conversation privée.. ca m'évitera de louper des infos et de devoir basculer de l'un à l'autre
et pour ceux qui voudraient comprendre les différentes versions, ca les aidera

* pour la modification automatique:
-->dans la PJ, après clic sur "trouver Histo avec Duplicate"
--> on obtient une feuille Modification avec 329 lignes
Les lignes vont deux à deux: la première = Feuille Duplicate, et la seconde =Feuille Histo (avec son numéro pour la retrouver facilement)

==> tu veux modifier la ligne "Histo":(celles que j'ai coloré en vert) ==>Correct?
modification du "Flight_NO" Colonne C : Correct?
est ce que le nouveau Flight_No doit correspondre un minimum à celui de la ligne correspondante (en bleu au dessus)
Exemple 1: Ligne 3: Flight no vide, mais en ligne 2, c'est "XXX0067)
==> en ligne 3: le nouveau flight_No contient aussi le code compagnie "XXX"

Exemple 2: Ligne 9: U21746 et ligne 8: HOP3556 ==> les deux semblent totalement différents.. que met on en nouveau Flight_No?

Exemple 3: Ligne37: BGA161 et ligne36: BGA0161 ==> les deux se ressemblent.. ==> Quel nouveau Flight_No


le coté "aléatoire" dont tu parles me semble étrange..
je trouve étrange de changer un vol de la compagnie TU par un numéro de vol d'une autre compagnie.....?
oui modification de la ligne en vert colonne c et e
 

vgendron

XLDnaute Barbatruc
bon. plutot que DUPxxxx, on utilise la compagnie AFxxxxx (c'est pas une compagnie bidon, mais au moins, c'est toujours la meme ==> plus simple à retrouver pour la suite)

l'enregistrement des modifs enregistre le numéro du Flight_No en colonne E de la feuille Histo, ainsi que le vol fusion (sur 5 chiffres) dans la colonne AL

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

raniou010

XLDnaute Nouveau
je doit comprendre tout d'abord pour quoi il a considéré ces 14 comme dupp , j'ai essayé de ré exécuter le code avec ce tableau mais ca bug en

Code:
Sub ValiderHisto()


Dim TabModif() As Variant
With Sheets("Modification")
    TabModif = .UsedRange.Value
End With
With Sheets("Histo")
    fin = .UsedRange.Rows.Count
    For i = LBound(TabModif, 1) + 1 To UBound(TabModif, 1) Step 2
        .Range("E" & TabModif(i + 1, 6)) = TabModif(i + 1, 3)
        .Range("AL" & TabModif(i + 1, 6)) = TabModif(i + 1, 5)
        .Range("AL2:AL" & fin).NumberFormat = "00000"
    Next i
End With
 

vgendron

XLDnaute Barbatruc
Essai avec ce code légèrmenet modifié
VB:
Sub Dupliquées()

Set DicHisto = CreateObject("Scripting.dictionary")
Set DicDuplic = CreateObject("Scripting.dictionary")
Dim TabHisto() As Variant
Dim TabDuplic() As Variant
Dim TabModif() As Variant

With Sheets("Modification") 'on efface la feuille Modifications
    .UsedRange.Offset(1, 0).ClearContents
End With

'récupère les duplicates dans un tablo
With Sheets("Duplicate") 'on met les data de la feuille Duplicate dans un tablo
   
    TabDuplic = .UsedRange.Value 'on met toutes les infos de la feuille Duplic dans un tablo
End With

'dimensionne le tableau final
'ce tableau contiendra les lignes duplicates et leur ligne associée de la feuille Histo
'et 6 colonnes
ReDim TabModif(1 To 2 * (UBound(TabDuplic, 1) - 1), 1 To 6)

'alimente le tablo final avec les duplicates - une ligne sur deux
For i = LBound(TabDuplic, 1) + 1 To UBound(TabDuplic, 1)
    TabModif(2 * (i - 1) - 1, 1) = TabDuplic(i, 1)
    TabModif(2 * (i - 1) - 1, 2) = TabDuplic(i, 3)
    TabModif(2 * (i - 1) - 1, 3) = TabDuplic(i, 24)
    TabModif(2 * (i - 1) - 1, 4) = TabDuplic(i, 25)
Next i

'récupère la feuille Histo dans un tablo
With Sheets("Histo")
    .Cells.AutoFilter 'désactive le filtre si actif
    TabHisto = .UsedRange.Value 'on met toutes les infos de la feuille Histo dans un tablo
End With

'créer un dictionnaire des Histo
For i = LBound(TabHisto, 1) + 1 To UBound(TabHisto, 1) 'on créé un dictionnaire
    If Not DicHisto.exists(TabHisto(i, 1) & "-" & TabHisto(i, 2) & "-" & TabHisto(i, 39)) Then
        'clé = Date(ColonneA) - Heure du vol (ColonneB) - Vol Code Sens (ColonneAM)
        'Valeur=numéro de la ligne dans la feuille
        DicHisto.Add (TabHisto(i, 1) & "-" & TabHisto(i, 2) & "-" & TabHisto(i, 39)), i
    End If
Next i

For i = LBound(TabDuplic, 1) + 1 To UBound(TabDuplic, 1) 'pour chaque duplicate de la feuille Duplicate
    Clé = TabDuplic(i, 1) & "-" & TabDuplic(i, 3) & "-" & TabDuplic(i, 25)
    If DicHisto.exists(Clé) Then 'si on retrouve la clé dans Histo ==> on récupère les données
        NumLigne = DicHisto(Clé)
        TabModif(2 * (i - 1), 1) = TabHisto(NumLigne, 1)
        TabModif(2 * (i - 1), 2) = TabHisto(NumLigne, 2)
        TabModif(2 * (i - 1), 3) = TabHisto(NumLigne, 5)
        TabModif(2 * (i - 1), 4) = TabHisto(NumLigne, 39)
        TabModif(2 * (i - 1), 5) = TabHisto(NumLigne, 38)
        TabModif(2 * (i - 1), 6) = NumLigne
    End If
Next i


With Sheets("Modification") 'dans la feuille Modification, on colle le tableau de résultat
    .Range("A2").Resize(UBound(TabModif, 1), UBound(TabModif, 2)) = TabModif
    .Activate
End With

End Sub
Sub ModifierVol()
Dim tabMod() As Variant

With Sheets("Modification")
    fin = .Range("A" & .Rows.Count).End(xlUp).Row
    tabMod = .Range("A2:F" & fin).Value
    For i = LBound(tabMod, 1) + 1 To UBound(tabMod, 1) Step 2
        tabMod(i, 3) = "AF" & Format(i / 2, "0000")
        tabMod(i, 5) = Format(i / 2, "0.000")
    Next i
    .Range("A2:F" & fin) = tabMod
    .Range("E2:E" & fin).NumberFormat = "00000"
End With


End Sub


Sub ValiderHisto()
Dim TabModif() As Variant
With Sheets("Modification")
    TabModif = .UsedRange.Value
End With
With Sheets("Histo")
    fin = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = LBound(TabModif, 1) + 1 To UBound(TabModif, 1) Step 2
        .Range("E" & TabModif(i + 1, 6)) = TabModif(i + 1, 3)
        .Range("AL" & TabModif(i + 1, 6)) = TabModif(i + 1, 5)
        .Range("AL2:AL" & fin).NumberFormat = "00000"
    Next i
End With
End Sub


Avant de lancer les codes, il faut penser à modifier le format des heures des différentes colonnes..

et pourquoi votre système considère les 15 lignes comme étant encore des duplicates.....pour ca. il faut savoir quels critères il utilise..
 

raniou010

XLDnaute Nouveau
au faite y'a un truc qu'il faut savoir , on met un num de vol bidon quand le champs number Flight est vide , sinon , quand il est deja remplie on change pas la partie compagnie on change que le num de vol fusion par exemple +20 (AFR6547 devient AFR 6567) et il faut une boucle a la fin pour controler s'il au ra encore des duplicates apres la modif , cette boucle regarde les 3 variable , dateBlock , sens (D/A) et Flight number , si cette combinaison est en double ou plus , alors c'est duplicate !
 

Discussions similaires

Réponses
7
Affichages
540
Réponses
12
Affichages
811
Réponses
6
Affichages
525
Réponses
4
Affichages
419

Statistiques des forums

Discussions
314 655
Messages
2 111 601
Membres
111 216
dernier inscrit
mauphico