Valeur selon l'heure dans fichier excel

Résolu
Signaler
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Bonjour à tous,

Je rencontre une difficulté dans un script sour VBA excel.

Dans mon fichier excel, dans la feuille Ajout, dans la colone D il y à des heures. Je voudrais que si par exemple dans la celule D2 il est écrit 06:00:00 AM, qu'il insert dans la celule K2 la valeur JOUR. Et C.est la même chose pour la valeur D3 ect....... en descendant la colone.

Je doid tenir en considération que:
5:00:00 AM à 13:59:00 PM = JOUR
14:00:00 PM à 17:59:00 PM = SOIR
18:01:00 PM à 4:59:00 AM = NUIT

Voici une partie du script:
Private Sub CommandButton1_Click()
msg = "Voulez-vous continuer l'enregistrement ?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then

Application.ScreenUpdating = False
                                                                                     'Coller AH dans ajout
Sheets("Ajout").Select
    Range("A2").Select
    ActiveSheet.Paste
    Selection.TextToColumns Destination: =Range("A2"), DataType:= xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(28, 1), Array(37, 1), Array(44, 1), _
        Array(53, 1), Array(57, 1), Array(72, 1), Array(97, 1), Array(113, 1), Array(124, 1)), _
        TrailingMinusNumbers:=True
    Columns("A:L").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
                                                                   'TYPE DE PRODUITS RECHERCHEV
    Range("M2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-12],Wac!C[-12]:C[-11],2,0)"
    Selection.AutoFill Destination:=Range("M2:M8051"), Type:=xlFillDefault
    Range("M2:M8051").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Cells.Replace What:="#N/A", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("A2").Select
                                                                        'Inserer le quart de travail dans la colone K (jour, soir ou nuit)

    
    Application.CutCopyMode = False
    End If
    Application.ScreenUpdating = True
End Sub

Comment faire.?

Merci de vôtre aide

26 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
dans K2 tu tapes      = Tranche_Horaire(D2)

 
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Rajoute une condition à ta Function.
Le NUIT provient du Else
Sans avoir essayé, ça devrait mieux fonctionner et tu n'auras pas à mettre de condition dans ta formule de cellule.

Function Tranche_Horaire(xHeure As Date) As String
    If (Hour(xHeure)>=5) And (Hour(xHeure)<14) Then
        Tranche_Horaire="JOUR"
    ElseIf (Hour(xHeure)>=14) And (Hour(xHeure)<18) Then
        Tranche_Horaire="SOIR"
    ElseIf (Hour(xHeure)>=18) And (Hour(xHeure)<5) Then
        Tranche_Horaire="NUIT"


    Else
        Tranche_Horaire=""
    End If
End Function 

MPi
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonsoir,

Je ne connais pas VBA et ne vais absolument pas m'intéresser au code relatif à l'inscription dans telle ou telle autre cellule.

Ke m'arrête simplement à la première partie de ta question (détermination de JOUR, SOIR ou NUIT) . Le reste devra être ton affaire.

voilà la réponse :

Private Sub Command1_Click()
  toto = "18:01:00 PM"
  MsgBox toto & " = " & analyse(TimeValue(toto))
  toto = "13:59:00 PM"
  MsgBox toto & " = " & analyse(TimeValue(toto))
  toto = "15:33:00 PM"
  MsgBox toto & " = " & analyse(TimeValue(toto))
End Sub


Private Function analyse(heure As Date) As String
  Select Case heure
    Case TimeValue("00:00:00") To TimeValue("04:59:00")
      analyse = "NUIT"
    Case TimeValue("18:01:00") To TimeValue("23:59:00")
      analyse = "NUIT"
    Case TimeValue("14:00:00") To TimeValue("17:59:00")
      analyse = "SOIR"
    Case TimeValue("05:00:00") To TimeValue("13:59:00")
      analyse = "JOUR"
  End Select
End Function


 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir et Salut Marques,
En oubliant les secondes, tu te retrouves
avec des intervales hors temps !
 
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Tu pourrais mettre une formule dans ta colonne K
exemple en K2
SI(ET(HEURE(D2)>5;HEURE(D2)<14);"JOUR"; SI(ET(HEURE(D2)>=14;HEURE(D2)<18);"SOIR";  "NUIT"))

Une fois copiée en K2, tu la copies sur les autres lignes

MPi
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut MPi,
Bien vu !
Avec une petite reserve sur quand débute le soir.
Chez nous c' est aux environs de 18 H (GMT).
A 14h , il fait encore jour




Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Merci,

MPI, j'avais déjà essayé cette formule, mais il me met toujours une erreur sur la valeur exemple: 5 (comme dans la formule si-dessous)
SI(ET(HEURE(D2)> 5 );"JOUR"; SI(ET(HEURE(D2)> =14;HEURE(D2)<18
);"SOIR";  "NUIT"))

Pourtant la valeur de  l'heure dans D2 est bien en heure hh:mm.

Je ne comprend pas pourquoi il ne le prend pas.

J'ai même essayé de mettre la valeur du 5 comme 5:00, met j'ai la même erreur.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
essaies avec 05:00

 
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Il me met maintenant l'erreur sur les 00.

SI(ET(HEURE(D2)>05: 00
;HEURE(D2)<14);"JOUR"; SI(ET(HEURE(D2)> =14;HEURE(D2)<18);"SOIR";  "NUIT"))
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
y a t-il moyen de le faire en VBA au lieu de mettre la formule sur la feuille excel et qu'il devienne trop lourd car trop de formule.

Si il serait en vba et ensuite dans la colone K avoir comme résultat que la valeur, le fichier restera léger.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
non le 05:00 dans la cellule et pas dans la formule.
Celle ci doit être laissée telle  qu' elle (>5 )

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
ça veut dir que le contenu de la cellle doit être au format hh:mm
pour qu' il puisse interpèté comme heure : minutes

Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
il est bien en hh:mm pourtant
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
tu peux toujours essayer avec une fonction.
Il faut juste adapté les tests
Function Tranche_Horaire(xHeure As Date) As String
  If (Heure(xHeure)>5) And (Heure(xHeure)<14) Then
   Tranche_Horaire="JOUR"
  ElseIf (Heure(xHeure)>=14) And (Heure(xHeure)<18) Then
  Tranche_Horaire="SOIR"
 Else
  Tranche_Horaire="NUIT"
 End If
End Function 

Mais il faut qe ta cellule soit au format Date/Heure 
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
J'essaie de voir comment faire en sorte que K2 soir inscrit la valeur selond la Date / Heure de D2.

Et ausi pour les valeurs D3, D4, D5 etc... dans les celules K3, K4, K5 etc...
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
dans "format de cellule" de D2, tu choisis Personnalier
et tu tapes hh:mm (voir aussi si c' est pas  hh:mn)

<hr />. 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
si ça marche pour D2, tu l' appliques à toute la colonne D
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Je voulais dire selon ton script:

Function Tranche_Horaire(xHeure As Date) As String
  If (Heure(xHeure)>5) And (Heure(xHeure)<14) Then
   Tranche_Horaire="JOUR"
  ElseIf (Heure(xHeure)>=14) And (Heure(xHeure)<18) Then
  Tranche_Horaire="SOIR"
 Else
  Tranche_Horaire="NUIT"
 End If
End Function

il ne prend pas la valeur de D2 pour inscrire la valeur Jour, Soir ou Nuit dans la celule K2
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
et il faut que ta fonction soit déclarée Public
Public Function Tranche_Horaire(xHeure As Date) As String

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Salut Chaibat, petite correction sur ton code (Hour VB au lieu de Heure Excel)
Et ça fonctionne aussi bien que la formule que j'avais mise
Et ici aussi il fait clair à 14h00, mais le cahier des charges était "clair" là-dessus... à 14h00, c'est le SOIR 

Function Tranche_Horaire(xHeure As Date) As String
    If (Hour(xHeure) >= 5) And ( Hour (xHeure) < 14) Then
        Tranche_Horaire = "JOUR"
    ElseIf (Hour(xHeure) >= 14) And ( Hour (xHeure) < 18) Then
        Tranche_Horaire = "SOIR"
    Else
        Tranche_Horaire = "NUIT"
    End If
End Function

Avyrex, le code est à mettre dans un module tel quel (Public est implicite)
Si ça ne fonctionne pas, il y a un problème avec tes heures.
Chose certaine, tu as là 2 méthodes qui fonctionnent très bien

MPi