Code VBA pour pour trier les donnés des vols

Salut tous le monde j'espère que vous allez bien.

une feuilles Excel contient des informations sur les vols de la compagnie American Airlines (AA). Chaque ligne représente un segment de vol avec différents détails tels que l'aéroport de départ, l'aéroport d'arrivée, les heures de vol, les dates et d'autres codes. Les informations sont organisées en deux sections : "FR-FLT" pour les vols au départ et "TO-FLT" pour les vols à l'arrivée.

l'objectif : je veux un code VBA qui trie cette feuille en mettant en premier les vols qui ont la valeur numérique de DEP et ARR en premier et puis qui ont les DEP et les ARR identique au dessous toute en conservant les lignes de la feuille .

Exemple d'un vol ayant DEP et ARR différent :

FR-FLT BRD OFF DEP ARR STRTDTE END-DTE F R Q U N C Y CS FLT

AA 0010 LAX JFK 2100 427 04-nov-23 04-nov-23 S AT 5035

TO-FLT BRD OFF DEP ARR STRTDTE END-DTE F R Q U N C Y CS FLT

AA 0010 LAX JFK 2200 529 04-nov-23 04-nov-23 S AT 5035

NB: il y a des vols annulés qui ne contiennent pas le TO-FLT , ils doivent être aussi en premier

NB1 : dans le tri je veux que les vols ayant la différence dep et arr apparaitre de cette forme

AA 0010 LAX JFK 2100 427 04-nov-23 04-nov-23 S AT 5035

AA 0010 LAX JFK 2200 529 04-nov-23 04-nov-23 S AT 5035

c'est à dire attaché et sans FR-FLT et TO-FLT juste le numéro de vol et ses données

Merci de répondre et de me fournir le code

19zozo.xlsx (171.81 Ko)

Bonjour,

Pas de code VBA, ni solution mais plutôt une réflexion alternative à ta demande, car ton tableau n'est pas au format BDD (Base De Données).

C'est possible de faire ce que tu demandes, mais il faudra un peu de temps pour te donner une réponse satisfaisante, car on en peut pas utiliser les fonctions de tri Excel avec ton exemple.

Si je comprends bien il faut trier en gardant les 4 lignes d'un vol aller-retour + (peut-être) la ligne de séparation...

Je serai toi, je mettrai les 4 lignes sur une seule et on pourrait donc facilement faire des tri, au pire on ajoute une colonne pour faire un tri primaire Vol annulé, Vol départ et arrêté différents... Tout ça avec une codification spécifique, par exemple Vols annulés=A, départ/arrivée différente=B...

Tu pourrais envisager faire la même chose sur ton fichier en l'état, mais il faudrait peut être une seconde colonne pour conserver l'ordre des 4 lignes d'un Vol.

Benead

bonjour almoawem, Benead,

un début, parce que je ne comprend pas bien le tri, donc j'ai créé une sorte de clef pour trier en colonne AA avec les 4 chiffres du vol + les lignes d'origine.

9zozo.xlsb (104.44 Ko)

salut j'espère que vous allez bien.

j'ai essayé un code VBA , il m'a donné un résultat de tri que je souhaite mais le seul problème ce qu'il n'a pas mis en premier les vols qui contient dep et arr différent

exemple :

FR-FLTBRDOFFDEPARRSTRTDTEEND-DTEFRQUNCYCSFLT
AA 0010LAXJFK210042704-nov-2304-nov-23SAT5035
TO-FLTBRDOFFDEPARRSTRTDTEEND-DTEFRQUNCYCSFLT
AA 0010LAXJFK220052904-nov-2304-nov-23SAT5035

* ce vol n'a pas les mêmes valeurs dep et arr donc il doit être en premier de la feuille

*remarque: un vol à le même numéro entre FR-FLT et TO-FLT et aussi même STRTDTE (date de départ) , END-DTE (date d'arrivée) , FLT

* voici le résultat du code que je veux améliorer (les lignes en vert sont les vols qui doivent être en premier . les lignes en rouges au dessous)

2resultat.xlsx (73.86 Ko)

*fichier original

4zozo.xlsx (171.81 Ko)

**le code :

Sub TrierVolsParDifferencePuisIdentiques()
Dim ws As Worksheet
Dim lastRow As Long
Dim dataRange As Range
Dim uniqueFlights As Object
Dim identicalFlights As Object
Dim volKey As Variant
Dim volData As Variant
Dim rowIndex As Long


Set ws = ThisWorkbook.Sheets("résultat")


Set uniqueFlights = CreateObject("Scripting.Dictionary")
Set identicalFlights = CreateObject("Scripting.Dictionary")


lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row


Set dataRange = ws.Range("A2:P" & lastRow)


For rowIndex = 1 To dataRange.Rows.Count
volKey = dataRange.Cells(rowIndex, 4).Value & "|" & dataRange.Cells(rowIndex, 5).Value
volData = Application.Index(dataRange.Rows(rowIndex).Value, 0, 0)


If uniqueFlights.Exists(volKey) Then

identicalFlights(volKey) = volData
Else

uniqueFlights(volKey) = volData
End If
Next rowIndex


ws.Rows("2:" & lastRow).Clear


rowIndex = 2
For Each volKey In uniqueFlights.Keys
ws.Cells(rowIndex, 1).Resize(1, UBound(uniqueFlights(volKey)) + 1).Value = uniqueFlights(volKey)
rowIndex = rowIndex + 1
Next volKey


For Each volKey In identicalFlights.Keys
ws.Cells(rowIndex, 1).Resize(1, UBound(identicalFlights(volKey)) + 1).Value = identicalFlights(volKey)
rowIndex = rowIndex + 1
Next volKey
End Sub

Rechercher des sujets similaires à "code vba trier donnes vols"