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