Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Logique de date

  • Initiateur de la discussion Initiateur de la discussion Claude5
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Claude5

XLDnaute Occasionnel
Bonjour à tous,

il y a quelque temps, j'avais obtenu du forum une macro formidable qui me permettait sur une même ligne d'avoir des données arrivé/départ programmées et des données arrivée/départ réalisées.

Le fichier en PJ contient une extraction d'un gros fichier.

Ce qui me pose problème c'est la ligne 2 où le départ réalisé est avant son arrivée réalisée et la ligne 5 où l'arrivée programmée est après le départ programmé et pareil pour les éléments du réalisé. La ligne 6 pareil.
Les lignes 3 et 4 sont parfaites, car cohérentes.

Dans la macro, peut-on insérer une ligne commande indiquant que les arrivées date/heure doivent toujours se situer avant les départs date/heure, programmé et réalisé même si le réalisé total peut être avant le programmé total.

Suis-je clair?

Merci beaucoup/Claude
 

Pièces jointes

Re : Logique de date

Bonjour Claude, bonjour le forum,

Peut-être comme ça :

Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim AP As Date 'déclare la variable AP (Arrivée Programmée)
Dim DP As Date 'déclare la variable DP (Départ Programmé)
Dim AR As Date 'déclare la variable AR (Arrivée Réalisée)
Dim DR As Date 'déclare la variable DR (Départ Réalisé)

Set O = Sheets("DEMI TOUR 4H") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 19).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 19 (=S) de l'onglet O
Set PL = O.Range("S2:S" & DL) 'définit la palge PL
For Each CEL In PL 'boucle sur toutes les celllules cel de la plage PL
    AP = CDate(CEL.Value) 'définit la variable AP
    DP = CDate(CEL.Offset(0, 7).Value) 'définit la variable DP
    If AP <= DP Then 'condition si AP est inférieure ou égale à DP
        Application.Union(CEL, CEL.Offset(0, 7)).Select 'sélectionnes les deux cellules
        MsgBox "L'arrivée programmée se fait avant le départ ! Veuillez corriger cette anomalie." 'message
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
    AR = CEL.Offset(0, 14).Value
    DR = CEL.Offset(0, 20).Value
    If AR <= DR Then 'condition si AR est inférieure ou égale à DR
        Application.Union(CEL.Offset(0, 14), CEL.Offset(0, 20)).Select 'sélectionnes les deux cellules
        MsgBox "L'arrivée réalisée se fait avant le départ ! Veuillez corriger cette anomalie." 'message
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub
 
Re : Logique de date

Bonjour Robert,

merci de votre réponse.

Le code que vous me proposez je dois l'ajouter à la macro existante? Je ne suis pas doué....

Je vous propose de vous envoyer le fichier original partiel avec la macro qui m'a été fourni via le forum. Peut être que cela vous aidera mieux. Les vols qui étaient en PJ y sont de nouveau plus d'autres.

Les colonnes en rouge sont les vols programmés et les colonnes en vert sont les vols réalisés.

Il est possible qu'il n'y ait qu'un vol arrivée sans départ ou l'inverse, ou qu'une arrivée programmée arrive le lendemain....idem pour un départ programmé.

Merci encore de votre temps. Claude
 

Pièces jointes

Re : Logique de date

Bonjour Claude, bonjour le forum,

Le second fichier n'a pratiquement rien à voir avec le premier !?... Dans le second il n'y a qu'une seule date en rouge pour les vols programmés (départ ou arrivée ?) et une seule date en vert pour les vols réalisés (départ ou arrivée).
Comment comparer le départ et l'arrivée ?
En plus, les date ne sont pas dans les même colonnes que dans le premier fichier ! Je ne peux vous proposer un code cohérent si vous ne fournissez pas un fichier cohérent...
 
Re : Logique de date

En fait, je doit cliquer sur le bouton Ventilation et c'est la partie gauche à compter de la colonne O que je vous avais montré. Voici de nouveau le fichier après clic sur Ventilation. En surligné jaune les lignes confictuelles.

Merci de votre temps/Claude
 

Pièces jointes

Re : Logique de date

Bonjour Claude, bonjour le forum,

En pièce jointe ton fichier modifié avec un bouton supplémentaire : Vérification auquel la macro est associée. Tu avais oublié de mentionner les lignes violettes dans ton exemple.
Actuellement, tant que l'anomalie n'est pas corrigée le code ne passe pas à l'anomalie suivante. Mais on pourrait tout aussi bien mettre les anomalies en évidence en colorant les cellules, ou autres.. À toi de voir.
Le fichier :
 

Pièces jointes

Re : Logique de date

[resolu]Merci beaucoup. Ce que je fais, c'est que j'utilise le bouton vérification et à chaque erreur rencontrée je supprime la ligne, et je remonte d'une ligne les autres données.

Ou aussi parce que je suis sur des résultats grâce à vos macros, de sélectionner les champs vide des "temps 1/2 tour SKED" "temps 1/2 tour OPE" et de supprimer les lignes.

Merci encore beaucoup/Claude
 
Re : Logique de date

Bonjour Claude, bonjour le forum,

Le nouveau code :

Code:
Private Sub CommandButton2_Click() 'bouton "Vérification"
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim AP As Date 'déclare la variable AP (Arrivée Programmée)
Dim DP As Date 'déclare la variable DP (Départ Programmé)
Dim AR As Date 'déclare la variable AR (Arrivée Réalisée)
Dim DR As Date 'déclare la variable DR (Départ Réalisé)

ActiveCell.Select 'enlève le focus au bouton
Set O = Sheets("Requête5") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 19).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 19 (=S) de l'onglet O
For LI = DL To 2 Step -1 'boucle inversée sur toutes les lignes LI de la dernière DL à la ligne 2
    DP = CDate(O.Cells(LI, 19).Value) 'définit la variable AP
    AP = CDate(O.Cells(LI, 26).Value) 'définit la variable DP
    If AP <= DP Then 'condition si AP est inférieure ou égale à DP
        Application.Union(O.Cells(LI, 19), O.Cells(LI, 26)).Interior.ColorIndex = 3 'colore les deux cellules fond rouge
        'si "Oui" au message, supprime la ligne
        If MsgBox("L'arrivée programmée se fait avant le départ ! Voulez-vous supprimer la ligne ?", vbYesNo, "Attention!") = vbYes Then Rows(LI).Delete
    End If 'fin de la condition
    DR = CDate(O.Cells(LI, 33).Value) 'définit la variable DR
    AR = CDate(O.Cells(LI, 39).Value) 'définit la variable AR
    If AR <= DR Then 'condition si AR est inférieure ou égale à DR
        Application.Union(O.Cells(LI, 33), O.Cells(LI, 39)).Interior.ColorIndex = 3 'colore les deux cellules fond rouge
        If MsgBox("L'arrivée réalisée se fait avant le départ ! Voulez-vous supprimer la ligne ?", vbYesNo, "Attention!") = vbYes Then Rows(LI).Delete
    End If 'fin de la condition
Next LI 'prochaine Ligne de la boucle
MsgBox "Toutes les anomalies on été supprimées !" 'message de fin
End Sub
Le fichier V02 :
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
1 K
S
Réponses
4
Affichages
699
spyderdvd
S
P
Réponses
2
Affichages
992
panpipes
P
C
Réponses
15
Affichages
3 K
Cyroul
C
V
Réponses
0
Affichages
2 K
Valkazaar
V
M
Réponses
5
Affichages
2 K
Millyla
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…