Bonjour,

J'essaye de développer une macro permettant de savoir si un élément est en avance ou en retard par rapport à un autre. du coup je compare la date et l'heure d'arrivée par rapport à la date et l'heure prévue. Mais ces 4 données (heures et dates) sont dans des cellules différentes.

Le souci est que j'obtiens un format d'heure erronée (0,956944444444444 au lieu de 22:58 par exemple)


De plus, j'ai une cellule où la date est au format "DD/MM/YYYY" et lorsque que je demande à ma macro de la copier dans une autre cellule, le jour et le mois sont inversés exemple: 01/06/16 (01 juin 2016) devient 06/01/16 (06 janvier 2016). Par contre des que mon jour est à partir du 13 du mois, là il n'y a plus d'inversion et le format est identique....

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Sub retard_frais()
 
Dim cpt, cpt2, cpt3, CNUF1, CNUF2, Cat1, Cat2 As Integer
Dim base As String
Dim FichO, Recept, HeuRecpt, CarnetCde As Workbook
Dim Recept1, FichO1 As Worksheet
Dim der As Long
 
 
Set Recept = Workbooks.Open(Filename:="C:\Users\kguesmia\Documents\Retard Frais\code camion réception.xls")
Set FichO = Workbooks.Open(Filename:="C:\Users\kguesmia\Documents\Retard Frais\Plan de transport AE 2016.xlsx")
Set Recept1 = Recept.Sheets(1)
Set FichO1 = FichO.Sheets(1)
Set HeuRecpt = Workbooks.Open(Filename:="C:\Users\kguesmia\Documents\Retard Frais\Heure arrivé camion.xlsx")
Set CarnetCde = Workbooks.Open(Filename:="C:\Users\kguesmia\Documents\Retard Frais\Carnet de cde Louviers.xls")
 
Recept.Activate
 
With Recept1
 
der = .Cells.SpecialCells(xlCellTypeLastCell).Row
 
  Cells.Replace What:="Libact:BASE DE ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
 
Range("R3").Value = "Heure d'arrivé"
 
' je récupère une heure issue d'une cellule au format hh:mm:ss
 
Range("R4").FormulaLocal = "=RECHERCHEV(N4;'Heure arrivé camion.xlsx'!Tableau_Gestion_des_Zones_Reception_V.07.01.2013[[N° de Passage]:[Heure de Presentation du Camion au Guichet]];8;FAUX)"
       Range("R4").Select
       Selection.AutoFill Destination:=Range("R4:R" & der)
       Calculate
 
       Columns("R:R").Select
       Selection.NumberFormat = "h:mm;@"  'je modifie le format pour supprimer les secondes
 
 
base = RTrim(Range("A1"))
 
End With
 
 
 cpt = 1
  Do While FichO1.Cells(1, cpt).Value <> base
    cpt = cpt + 1
  Loop
 
  cpt2 = 5
  cpt3 = 2
 
 
Recept1.Range("S3").Value = "Heure MAX prévu"
 
' je récupere une date issue d'une cellule au format standard sous la forme DD/MM/YY
 
Recept1.Range("S4").FormulaLocal = "=RECHERCHEV(P4;'[Carnet de cde Louviers.xls]Feuille 1'!$F$6:$J$28;5;FAUX)"
          Range("S4").Select
          Selection.AutoFill Destination:=Range("S4:S" & der)
          Calculate
 
 
Do
  CNUF1 = Val(Recept1.Range("O" & cpt2).Value)
  Cat1 = Val(Recept1.Range("A" & cpt2).Value)
 
     Do
       cpt3 = cpt3 + 1
       Cat2 = Val(FichO1.Range("C" & cpt3).Value)
       CNUF2 = Val(FichO1.Range("B" & cpt3).Value)
    Loop While CNUF1 <> CNUF2 Or Cat1 <> Cat2 And FichO1.Range("A" & cpt3).Value <> ""
 
   HeurePrev = Right(FichO1.Cells(cpt3, cpt), 5) ' je récupere une heure issue d'une cellule standard.
   DatePrev = Recept1.Range("S" & cpt2).Value ' date récupérée auparavant avec mon RechercheV
   Recept1.Range("S" & cpt2).Value = DatePrev & " " & HeurePrev ' j'associe les deux varariable du dessus pour en faire un format DD/MM/YY hh:mm
   DatePrev = Recept1.Range("S" & cpt2).Value ' j'associe la concaténation du dessus à ma variable 
   DateArriv = Recept1.Range("Q" & cpt2).Value & " " & Recept1.Range("R" & cpt2).Value  ' j'associe deux cellules pour en faire un format DD/MM/YY hh:mm
 
  If DatePrev < DateArriv Then
    Recept1.Range("T" & cpt2).Value = DatePrev - DateArriv
  End If
 
 cpt2 = cpt + 2
 cpt3 = 2
 
Loop While Recept1.Range("A" & cpt2).Value <> ""


Pourriez-vous m'aider svp