[JJ/MM/AAAA hh:mn] Les modifier en fonction de

Bonjour tout le monde je rencontre un certain soucis pour manipuler des cellules qui sont aux formats JJ/MM/AAAA hh:mn car juste la date ou juste l'heure ne me perturbe pas mais les 2 en même temps c'est une autre paire de manche. Je vous explique :

- Je possède de nombreuses données de ce type, exemple : "01/01/2016 06:14" "04/01/2016 08:20" "05/01/2016 22:58" ...

Je voudrai crée une autre colonne qui me met des condition à ces cellule par exemple de condition je voudrais intégrer que :

- Si l'heure est comprise entre 00:00 et 06:30 alors il m'affiche 06:30 l'exemple N°1 passerais a : "01/01/2016 06:30"

- Si l'heure dépasse 20:40 alors tu me l'affiche au lendemain 06:30 donc pour l'exemple N°3 il sera écrit : "06/01/2016 06:30"

-En même temps je voudrais que si la date est pointé un week-end il me la pointe au lundi 06:30

Actuellement je les fait 1 par 1 et répertorie les dates des week-end et jours fériés

J'ai commencer à jouer avec les décimales ( le format nombre ) mais je n'arrive pas pour les contraintes du soir ou les week-end que mais que sur la partie du matin

Vous trouverez un fichier excel simple que j'ai fait pour vous aider

Je tire mon chapeau à ceux qui relèverons le défis

Fichier :

Bonjour,

Je ne vois pas bien ce que tu veux ?

Les heures mentionnées sont des valeurs saisies !

Pourquoi donc sont-elles saisies ainsi et pas autrement ? De la façon dont tu souhaites qu'elles le soient ?

Bonjour à tous,

si j'ai bien compris :

=SI(MOD(B3;1)<"6:30"+0;ENT(B3)+"6:30";SI(OU(NB.SI(Fériés;ENT(B3))>0;JOURSEM(B3;2)>5;MOD(B3;1)>"20:40"+0);SERIE.JOUR.OUVRE.INTL(B3;1;1;Fériés)+"6:30";B3))

eric

Ce sont des heures saisis automatiquement.

Par la suite je voudrais modifier ces heures automatiquement ( j'ai plus de 24 000 saisis et je passe des heures entières à les traités )

Donc ce que je voudrais c'est crée une colonne à coté qui me met la bonne valeur soit :

  • Si l'heure est pointer entre 00:00 et 06:30 qu'elle soit mise par default à 06:30
  • si l'heure est après 20:40 qu'elle soit mise au lendemain 06:30
  • si la date tombe un week-end ou jour férié il me la met au lundi 06:30

Les week-end et jours férié je pourrais les mettent dans un tableau

dans de nouveaux exemple on aura :

Lundi : "04/05/20XX 22:36" =====> "05/05/20XX 06:30"

Jeudi : "07/05/20XX 02:14" =====> "07/05/20XX 06:30"

Samedi : "09/05/20XX 03:45" ====> "11/05/20XX 06:30"

Jour férié : "14/05/20XX 14:20" ===> "15/05/20XX 06:30"

Voila... en gros HORS plage horaire, week end et jour férié je voudrais mettre la saisie à la bonne heure ou la bonne date

Ouais. Et ça ne te plait pas ma proposition ?

Tout ça me paraît un peu nébuleux, tes jours de semaine indiqués ne correspondant pas aux dates...

En faisant abstraction de ces jours ! Traitement VBA de la ligne de date-heure pour les ajuster selon les spécifications (ce que j'en ai compris, abstraction faite des fériés, pour lesquels il faut préalablement en établir une liste...) pour produire deux lignes de résultats :

2e ligne = date-heure ajustée

1re ligne = jour de la semaine correspondant.

Sub AjusterDateHeure()
    Dim tDH(), d, h, js%, k%, i%
    With ActiveSheet
        k = .Range("B3").End(xlToRight).Column
        ReDim tDH(6 To 7, 2 To k)
        For i = 2 To k
            d = Int(.Cells(3, i)): h = .Cells(3, i) - d
            If h < 39 / 144 Then h = 39 / 144
            If h > 124 / 144 Then
                d = d + 1: h = 39 / 144
            End If
            js = Weekday(d) Mod 7
            If js < 2 Then d = d + 2 - js
            tDH(7, i) = d + h
            tDH(6, i) = StrConv(Format(d, "dddd"), vbProperCase)
        Next i
        With .Range("B6").Resize(2, k - 1)
            .Value = tDH
            .NumberFormat = "dd/mm/yyyy hh:mm"
        End With
    End With
End Sub

merci eriiic pour ton aide tu ma vachement avancer il y a juste un petit HIC lors des teste

Lorsque l'horaire est entre 00:00 et 06:30 le Samedi ou dimanche, il me les met le samedi ou dimanche 06:30

alors que je voudrais le passer directement au lundi 06:30

par contre si c'est en pleine journée de samedi ou dimanche il me le passe bien au lundi 06:30

C'est génial que vous puissez m'aider

Mferrand je regarde ta réponse ce soir en rentrant et on fera un point sur les test

MERCI !!

ça alors :

=SI(OU(NB.SI(Fériés;ENT(B3))>0;JOURSEM(B3;2)>5;MOD(B3;1)>"20:40"+0);SERIE.JOUR.OUVRE.INTL(B3;1;1;Fériés)+"6:30";SI(MOD(B3;1)<"6:30"+0;ENT(B3)+"6:30";B3))

j'ai essayer le macro et il ne fonctionne pas pour les week-end...

Par contre eriic ta formule :

=SI(OU(NB.SI(Fériés;ENT(B3))>0;JOURSEM(B3;2)>5;MOD(B3;1)>"20:40"+0);SERIE.JOUR.OUVRE.INTL(B3;1;1;Fériés)+"6:30";SI(MOD(B3;1)<"6:30"+0;ENT(B3)+"6:30";B3))

m'a l'air de marché je viens de les teste en week-end en dessous de 06:30 et il me let mes au lundi

plus qu'a faire les jours fériés !!

EN tout cas merci à vous 2 !!!!

j'ai essayer le macro et il ne fonctionne pas pour les week-end...

Inexact Tu dis n'importe quoi !

Il y avait juste un petit détail, elle ne ramenait pas l'heure à 6h30 le lundi, je viens de le rectifier.

Version rectifiée :

Sub AjusterDateHeure()
    Dim tDH(), d, h, js%, k%, i%
    With ActiveSheet
        k = .Range("B3").End(xlToRight).Column
        ReDim tDH(6 To 7, 2 To k)
        For i = 2 To k
            d = Int(.Cells(3, i)): h = .Cells(3, i) - d
            If h < 39 / 144 Then h = 39 / 144
            If h > 124 / 144 Then
                d = d + 1: h = 39 / 144
            End If
            js = Weekday(d) Mod 7
            If js < 2 Then
                d = d + 2 - js: h = 39 / 144
            End If
            tDH(7, i) = d + h
            tDH(6, i) = StrConv(Format(d, "dddd"), vbProperCase)
        Next i
        With .Range("B6").Resize(2, k - 1)
            .Value = tDH
            .NumberFormat = "dd/mm/yyyy hh:mm"
        End With
    End With
End Sub

rectification surlignée


Voilà les résultats fournis par la macro sur ton échantillon :

i1kuium

Et rappel de tes spécifications :

- Si l'heure est comprise entre 00:00 et 06:30 alors il m'affiche 06:30

  • Si l'heure dépasse 20:40 alors tu me l'affiche au lendemain 06:30
  • En même temps je voudrais que si la date est pointé un week-end il me la pointe au lundi 06:30

Viens donc me dire en quoi la macro ne les respecte pas !

plus qu'a faire les jours fériés !!

Ils sont dans la feuille... Fériés

Merci au niveau des macros je suis pas perfectionner

pour effectuer le traitement en colonne et non en ligne ou est-ce que je peu modifier ?

imaginons que toutes mes saisis sont en colonne B (B2 exactement puis vers le bas ) et je voudrais afficher les modifier juste à coter en colonne A ( A2 juste à coter de B2 en descendant vers le bas )

le macros prend les jours feriés aussi ?

Une macro fera ce qu'on lui demande : en ligne, en colonne....

Si dans ton modèle tu présentes une plage de résultats en ligne, on va fournir une macro qui positionnera les résultats dans la plage indiquée !

Pour les avoir autrement, tu modifies ton modèle selon ce que tu souhaites obtenir !

Pour la prise en compte des jours fériés, tu fais d'abord l'effort d'inclure les jours fériés dans ton modèle !

ça marche merci quand meme

Rechercher des sujets similaires à "aaaa modifier fonction"