Valeur selon l'heure dans fichier excel

Résolu
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 1 juin 2007 à 22:35
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 2 juin 2007 à 21:49
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

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

 
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 juin 2007 à 21:16
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
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 juin 2007 à 23:09
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


 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 00:27
Bonsoir et Salut Marques,
En oubliant les secondes, tu te retrouves
avec des intervales hors temps !
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 juin 2007 à 01:07
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
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 01:20
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




0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
2 juin 2007 à 01:24
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.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 01:27
essaies avec 05:00

 
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
2 juin 2007 à 01:30
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"))
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
2 juin 2007 à 01:34
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.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 01:34
non le 05:00 dans la cellule et pas dans la formule.
Celle ci doit être laissée telle  qu' elle (>5 )

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

0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
2 juin 2007 à 01:43
il est bien en hh:mm pourtant
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 01:48
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 
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
2 juin 2007 à 01:58
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...
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 02:07
dans "format de cellule" de D2, tu choisis Personnalier
et tu tapes hh:mm (voir aussi si c' est pas  hh:mn)

<hr />. 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 02:08
si ça marche pour D2, tu l' appliques à toute la colonne D
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
2 juin 2007 à 02:17
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
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 juin 2007 à 02:25
et il faut que ta fonction soit déclarée Public
Public Function Tranche_Horaire(xHeure As Date) As String

0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 juin 2007 à 04:07
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
0
Rejoignez-nous