XL 2010 CREATION DE ROTATION

Claude5

XLDnaute Occasionnel
Bonjour à vous,

Je dois reconstruire les rotations de ces mouvements.

Je m'explique: dans mon fichier les titres des colonnes commencant par A sont les arrivées et par D les départs.

Comment construire la rotation A et D comme dans mes 3 exemples (RESULTAT SOUHAITE)

Je m'appuie sur la REGISTRATION et la cohérence date heure

Merci de votre précieuse aide/Claude
 

Pièces jointes

  • RECHERCHE DEMI TOUR.xlsx
    13.9 KB · Affichages: 70

Paf

XLDnaute Barbatruc
Bonjour,

Je m'appuie sur la REGISTRATION et la cohérence date heure

J'ai compris que les REGISTRATION ( colonnes F et R, ou I et U) doivent être identiques .
Mais que signifie la cohérence date heure ?
- a priori, la date/heure d' Arrivée doit être inférieure à celle de Départ, mais de combien ? (cas 9HAMF ligne 5)

Pour contrôler cette cohérence, quelles colonnes faut-il prendre , pour les Arrivées colonnes D ou J ?, pour les départ colonnes P ou V ?

A+
 

Claude5

XLDnaute Occasionnel
Bonjour,

merci de votre réponse. Oui F et R ainsi que I et U doivent être identiques. La date/heure d' Arrivée doit être inférieure à celle de Départ, et il n'y pas de limite. On peut avoir une arrivée le lundi et un départ le dimanche. Par contre dans la même journée on peut avoir 4 rotations d'où jonglage avec les colonnes date /heure pour que cela soit cohérent dans le temps.

"Pour contrôler cette cohérence, quelles colonnes faut-il prendre , pour les Arrivées colonnes D ou J ?, pour les départ colonnes P ou V ?" Le mieux est de s'appuyer sur les colonnes J et V pour contrôler le réalisé par rapport au programmé D et P.

Merci encore de votre temps. Claude
 

Paf

XLDnaute Barbatruc
Re,

un essai à tester et adapter . Le résultat est affiché en feuille Résultat qui doit exister .
VB:
Sub Rotation()
Dim DerL1 As Long, DerL2 As Long, T1, T2, TT, i As Long, j As Long, k As Long, x As Long

With Worksheets("RECHERCHE DEMI TOUR") ' à adapter
DerL1 = .Range("A" & Rows.Count).End(xlUp).Row
DerL2 = .Range("M" & Rows.Count).End(xlUp).Row
T1 = .Range("A2:K" & DerL1)
T2 = .Range("M2:W" & DerL2)
End With
ReDim TT(1 To UBound(T1, 1), 1 To UBound(T1, 2) * 2)
For i = LBound(T1, 1) To UBound(T1, 1)
    For j = LBound(T2, 1) To UBound(T2, 1)
        If T1(i, 6) = T2(j, 6) Then
            If T1(i, 10) < T2(j, 10) Then
                x = x + 1
                For k = 1 To UBound(T1, 2)
                    TT(x, k) = T1(i, k)
                    TT(x, k + UBound(T1, 2)) = T2(j, k)
                Next
            End If
        End If
    Next
Next
Worksheets("Résultat").Range("A1").Resize(x, UBound(TT, 2)) = TT
End Sub

A+
 

Claude5

XLDnaute Occasionnel
Bonjour, j'ai recopié votre formule dans une macro et j'ai crée une feuille Résultat. Ca a bien marché pour mon fichier mais quand je rentre la totalité des vraies données j'ai cette alerte. Je me permets de vous renvoyer la totalité.
upload_2016-11-30_16-23-34.png
 

Pièces jointes

  • RECHERCHE DEMI TOUR.xlsx
    128.2 KB · Affichages: 41

Paf

XLDnaute Barbatruc
re,

j'étais parti sur : à une ligne d'arrivée correspond au maximum une ligne de départ.

En fait pour une ligne d'arrivée on peut avoir plusieurs lignes de départ , d'ou un nombre non prévu de ligne => erreur.

Quelle est la règle dans ce cas ?

on associe toutes les lignes de départ ou juste la première ?

et si on a une deuxième Arrivée avec la même registration , on associe tous les départs ? ou bien ?

A+
 

Claude5

XLDnaute Occasionnel
Bonjour,

une seule arrivée doit correspondre à une seule ligne départ effectivement. Le souci est pour un même jour on peut avoir 2 rotations soit 4 immatriculations, il faut donc jouer avec les dates heures. Et dans mes données on peut retrouver une même immatriculation mais pour plusieurs jours. Dans mon exemple la période s'étend du 29 octobre au 22 novembre. J'espère avoir été clair. Merci encore. Claude
 

Paf

XLDnaute Barbatruc
Re,

ci joint le code modifié pour ne pas 'planter'.
Comme précédemment pour chaque ligne d'Arrivée on a toutes les lignes Départ correspondant.

VB:
Sub Rotation()
Dim DerL1 As Long, DerL2 As Long, T1, T2, TT(), i As Long, j As Long, k As Long, x As Long

With Worksheets("RECHERCHE DEMI TOUR")
DerL1 = .Range("A" & Rows.Count).End(xlUp).Row
DerL2 = .Range("M" & Rows.Count).End(xlUp).Row
T1 = .Range("A2:K" & DerL1)
T2 = .Range("M2:W" & DerL2)
End With

For i = LBound(T1, 1) To UBound(T1, 1)
    For j = LBound(T2, 1) To UBound(T2, 1)
        If T1(i, 6) = T2(j, 6) Then
            If T1(i, 10) < T2(j, 10) Then
                x = x + 1
                ReDim Preserve TT(1 To UBound(T1, 2) * 2, 1 To x)
                For k = 1 To UBound(T1, 2)
                    TT(k, x) = T1(i, k)
                    TT(k + UBound(T1, 2), x) = T2(j, k)
                Next
            End If
        End If
    Next
Next
Worksheets("Résultat").Range("A1").Resize(x, UBound(TT, 1)) = Application.Transpose(TT)
End Sub

une seule arrivée doit correspondre à une seule ligne départ effectivement. Le souci est pour un même jour on peut avoir 2 rotations soit 4 immatriculations, il faut donc jouer avec les dates heures. Et dans mes données on peut retrouver une même immatriculation mais pour plusieurs jours. Dans mon exemple la période s'étend du 29 octobre au 22 novembre. J'espère avoir été clair. Merci encore. Claude

En fonction des résultats de la macro, vous pourrez donner plus de précisions sur ce que vous voulez:
pour une ligne Arrivée, en cas de lignes Départ multiples laquelle choisir ?
sachant qu'il n'est guère facile de traduire en code une règle comme "jouer avec les dates heures".

A+

A+
 

Claude5

XLDnaute Occasionnel
Re, je me suis mal exprimé, pas très pro. Jouer avec les dates voulait dire traiter les lignes arrivées et départs dans un ordre chronologique dans le temps. J'ai testé la macro mais j'ai découvert ceci: dans le fichier joint, données de base dans l'onglet RECHERCHE DEMI TOUR et données calculées dans l'onglet le résultat ne me semble pas correct et les dates sont inversées (11/05/2016). Merci/Claude
 

Pièces jointes

  • RECHERCHE DEMI TOUR V2.xlsm
    284.3 KB · Affichages: 46

Claude5

XLDnaute Occasionnel
Re, en fait il s'agit de rotation avions, qui arrivent et qui partent donc. Les colonnes commençant par A sont l'horaire programmé ASKED_DATE_TIME et l'horaire réalisé AACTUAL_OPERATED_TIME. Même chose pour les colonnes commençant par un D DSKED_DATE_TIME et DACTUAL_OPERATED_TIME.
Donc soit l'avion arrive mais ne repart pas, car son départ est en dehors des données du fichier ou bien l'avion part mais son arrivée est en dehors des données du fichier.
Donc dans ce fichier, on doit trouver une ligne arrivée complète (programmé et réalisé) qui correspond à une ligne départ (programmé et réalisé). Le lien à prendre entre elles est l'immatriculation pris sur les colonnes AACTUAL_REGISTRATION et DACTUAL_REGISTRATION et les colonnes date/heure AACTUAL_OPERATED_TIME et DACTUAL_OPERATED_TIME.
Le but final étant de vérifier la qualité du réalisé par rapport à son programmé, comme pour la SNCF par exemple, si les trains arrivent et partent à l'heure indiquée sur le billet.
Merci à vous. Claude
 

Paf

XLDnaute Barbatruc
re,

Nouvelle version, corrigeant l'anomalie de date US, et affichant pour une arrivée le départ postérieur le plus proche.

VB:
Sub Rotation_V2()
Dim DerL1 As Long, DerL2 As Long, T1, T2, TT(), i As Long, j As Long, k As Long, x As Long

With Worksheets("RECHERCHE DEMI TOUR")
DerL1 = .Range("A" & Rows.Count).End(xlUp).Row
DerL2 = .Range("M" & Rows.Count).End(xlUp).Row
T1 = .Range("A2:K" & DerL1)
T2 = .Range("M2:W" & DerL2)
End With
'traitement des dates
For i = LBound(T1, 1) To UBound(T1, 1)
    T1(i, 10) = CDbl(T1(i, 10))
Next
For i = LBound(T2, 1) To UBound(T2, 1)
    T2(i, 10) = CDbl(T2(i, 10))
Next
'*
For i = LBound(T1, 1) To UBound(T1, 1)
    For j = LBound(T2, 1) To UBound(T2, 1)
        If T1(i, 6) = T2(j, 6) Then
            If T1(i, 10) < T2(j, 10) Then
                x = x + 1
                ReDim Preserve TT(1 To UBound(T1, 2) * 2, 1 To x)
                For k = 1 To UBound(T1, 2)
                    TT(k, x) = T1(i, k)
                    TT(k + UBound(T1, 2), x) = T2(j, k)
                Next
                T2(j, 6) = ""
                Exit For
            End If
        End If
    Next
Next
Worksheets("Résultat").Range("A1").Resize(x, UBound(TT, 1)) = Application.Transpose(TT)
Worksheets("Résultat").Range("J:J,U:U").NumberFormat = "m/d/yyyy h:mm"
End Sub


En feuille RECHERCHE DEMI TOUR, y a-t-il toujours autant de ligne A (colonnes A-K) que de lignes D (colonnes M-W) ?
les lignes A ou D sont elles toujours triées chronologiquement par Registration ?

A+
 

Claude5

XLDnaute Occasionnel
RE. Dans la feuille RECHERCHE DEMI TOUR, il n'y a pas forcément le même nombre de ligne A et D. Sinon l'ordre des lignes A ou D peut être variable mais je peux le définir comme cela. D'ailleurs le mariage permet 699 lignes et la base est de 748 lignes

J'ai essayé de modifier les dates/heures des colonnes D et O en les insérant dans votre formule mais ca ne le fait pas
Worksheets("Résultat").Range("D:D,O:O,J:J,U:U").NumberFormat = "m/d/yyyy h:mm"

Du bon boulot vous faites. Merci
 

Statistiques des forums

Discussions
312 836
Messages
2 092 640
Membres
105 475
dernier inscrit
ramzi slama