Convertir une date en fonction d'une plage horaire

Bonjour,

Je cherche à faire en sorte que la date affichée en colonne A varie en fonction de l'heure inscrite en colonne B.

Plus précisément, je voudrais que si j'ai "Le Journal" en colonne F, ET SI l'heure est inférieur à 18:30, alors la date à afficher est "Date du jour - 1"

SI(ET([@[Titre Emission]]="Météo"; ([@[Heure IN]]<=TEMPSVAL("18:30"));$F$1-1; $F$1);

voici où j'en suis actuellement mais malheureusement ce n'est pas bon...

Ci-joint le fichier en question, la formule est dans l'onglet "Mardi"

En vous remerciant par avance pour votre aide.

Bonjour,

Il vous faut plutôt utiliser une fonction à mettre dans un module standard.

Function MajDate(ByVal Emission As String, ByVal JoursEnCours As Date, ByVal TimeIn As Date) As Variant

Dim Continuer As Boolean
Dim NbJours As Integer

    Continuer = False

    Select Case Emission
      Case "Les Sports", "Sport Passion", "Le PoinG Part 01", "Le PoinG Part 02", "Grand Genève à Chaud", "Météo" ' $F$1-1
           Continuer = True
           NbJours = 1
      Case "Geneva Show - le grand entretien" ' $F$1-3
           Continuer = True
           NbJours = 3
      Case "Cult.", "Mégaphone", "Couleur Grenat"  '$F$1-4
           Continuer = True
           NbJours = 4
      Case "Ca bouge à la maison", "Objectif terre", "Le Journal", "Les yeux dans les yeux"  ' $F$1
           Continuer = True
           NbJours = 0
      Case "PUB", "Comblage / BA", "Programme court"  ' "-"
           Continuer = False
    End Select

    If Continuer = True Then
       If TimeIn * 24 < 18.5 Then
          MajDate = CDate(JoursEnCours) - NbJours
       Else
          MajDate = JoursEnCours
       End If
     Else
          MajDate = "-"
     End If

End Function

En A3 :

capture

Le soucis, c'est que vous avez pas mal d'erreurs de saisie dans le nom de vos émissions ou des caractères blancs en trop ("PUB" par exemple).

Je vais essayer ça, merci beaucoup !

Bonjour,

Je viens de coller cette formule dans Visual Basic. Je crois avoir plus ou moins compris son fonctionnement. Il me suffira d'ajouter autant de case que nécessaire.

En revanche je ne comprends pas l'histoire des caractères blancs.

Le soucis, c'est que vous avez pas mal d'erreurs de saisie dans le nom de vos émissions ou des caractères blancs en trop ("PUB" par exemple).

Enfin une fois la fonction passée dans général, il me suffit de l'appeler avec un =MajDate en A3 et de tirer vers le bas ?

Bonjour,

Vous avez des "PUB" et des "PUB ", cela ne marche que pour le premier cas. Il faut modifier le deuxième cas ou le rajouter dans les Select case si la liste est dynamique. Idem pour les autres cas.

Sinon oui, la fonction peut s'étirer à condition d'avoir une référence absolue pour la date.

D'accord alors j'avais bien compris l'idée alors :)

Pour ce qui est des caractères blancs du coup, il y a en effet du résiduel mais qui sera modifié avec le sélect (ce dernier à été mis en place après)

Maintenant, concernant la fonction en elle-même, Je peux tout à fait en créer une par onglet (jour) MajDateLundi et ainsi de suite par exemple.

J'ai bien déclaré la fonction dans un nouveau Module, elle est repérée par Excel qui me la propose. en revanche je me retrouve avec une erreur :

=MajDateLundi() renvoie #VALEUR!

Pourquoi faire une fonction selon le jour ? Cela ne sert à rien, sauf si les conditions changent en fonction de la journée.

Pourquoi cela ne marche pas ? Vous avez oublié de remplacer MajDate par MajDateLundi en bas de la procédure.

Function MajDateLundi(ByVal Emission As String, ByVal JoursEnCours As Date, ByVal TimeIn As Date) As Variant

Dim Continuer As Boolean
Dim NbJours As Integer

    Continuer = False

    Select Case Emission
      Case "Les Sports", "Sport Passion", "Le PoinG Part 01", "Le PoinG Part 02", "Grand Genve ˆ Chaud", "MŽtŽo" ' $F$1-1
           Continuer = True
           NbJours = 1
      Case "Geneva Show - le grand entretien" ' $F$1-3
           Continuer = True
           NbJours = 3
      Case "Cult.", "MŽgaphone", "Couleur Grenat"  '$F$1-4
           Continuer = True
           NbJours = 4
      Case "Ca bouge ˆ la maison", "Objectif terre", "Le Journal", "Les yeux dans les yeux"  ' $F$1
           Continuer = True
           NbJours = 0
      Case "PUB", "Comblage / BA", "Programme court"  ' "-"
           Continuer = False
    End Select

    If Continuer = True Then
       If TimeIn * 24 < 18.5 Then
          MajDateLundi = CDate(JoursEnCours) - NbJours
       Else
          MajDateLundi = JoursEnCours
       End If
     Else
          MajDateLundi = "-"
     End If

End Function

Oui en effet, ça ne risquait pas de fonctionner ... (honte à moi )

La fonction a été mise à jour mais Excel me renvoie maintenant #NOM?

Nous sommes d'accord que je n'a pas besoin de renseigner quoi que soit dans les parenthèses de la formule qui appelle la fonction : =MajDateLundi()

Oui les conditions changent en fonction du jour :)

Je me rends compte que ByVal TimeIn As Date) As Variant TimeIn n'existe pas en entête de colonne sur ma feuille. Ça correspond à Heure IN. Est-ce que l'erreur pourrait venir de là ?

J'ai corrigé mon fichier pour avoir les entêtes de colonne correspondants mais j'ai toujours la même erreur.

Je n'ai pas ouvert ton fichier. Regarde cette capture d'écran. Tu dois remplir les paramètres de la fonction pour que cela fonctionne :

capture

Toujours le même soucis ...

capture d ecran 2022 02 11 a 11 14 44
Function MajDateLundi(ByVal Emission As String, ByVal JoursEnCours As Date, ByVal TimeIn As Date) As Variant

Dim Continuer As Boolean
Dim NbJours As Integer

    Continuer = False

    Select Case Emission
      Case "Les Sports", "Sport Passion", "Le PoinG Part 01", "Le PoinG Part 02", "Grand Genève à chaud", "Météo" ' $F$1-1
           Continuer = True
           NbJours = 1
      Case "Geneva Show - le grand entretien" ' $F$1-3
           Continuer = True
           NbJours = 3
      Case "Cult.", "Mégaphone", "Couleur Grenat"  '$F$1-4
           Continuer = True
           NbJours = 4
      Case "Ca bouge à la maison", "Objectif terre", "Le Journal", "Les yeux dans les yeux"  ' $F$1
           Continuer = True
           NbJours = 0
      Case "PUB", "Comblage / BA", "Programme court"  ' "-"
           Continuer = False
    End Select

    If Continuer = True Then
       If TimeIn * 24 < 18.5 Then
          MajDateLundi = CDate(JoursEnCours) - NbJours
       Else
          MajDateLundi = JoursEnCours
       End If
     Else
          MajDateLundi = "-"
     End If

End Function

J'ai retapé les caractères accentués mais toujours pas, je remet le fichier à jour en PJ

  • Tu ne peux pas avoir une fonction du même nom qu'un module. Pour ton module, baptise le Mod_MajDateLundi.
  • Dégage la fonction qui est dans le module ThisWorkbook.

Merci beaucoup !

J'ai une dernière question :

Case "PUB", "Comblage / BA", "Programme court" ' "-"  

 Continuer = False

Doit donc renvoyer "-" et je souhaite que pour tous les autres cas j'ai "A remplir"

J'ai essayé donc de cette manière :

      Case "PUB", "Comblage / BA", "Programme court"  ' "-"
           Continuer = False
    End Select

    If Continuer = True Then
       If TimeIn * 24 < 18.5 Then
          MajDateLundi = CDate(JoursEnCours) - NbJours
       Else
          MajDateLundi = JoursEnCours
       End If
     Else
          MajDateLundi = "A remplir"
     End If

End Function

Mais le case "PUB" renvoie maintenant également "A remplir"

Tu peux décider d'une valeur de remplacement.

Pour tous les cas non prévus , tu résumes dans un Case Else :

Function MajDateLundi(ByVal Emission As String, ByVal JoursEnCours As Date, ByVal TimeIn As Date) As Variant

Dim Continuer As Boolean
Dim NbJours As Integer
Dim ValeurDeRemplacement As String

    Continuer = False

    Select Case Emission
      Case "Les Sports", "Sport Passion", "Le PoinG Part 01", "Le PoinG Part 02", "Grand Genve ˆ chaud", "MŽtŽo", "Le Journal" ' $F$1-1
           Continuer = True
           NbJours = 1
      Case "Geneva Show - le grand entretien" ' $F$1-3
           Continuer = True
           NbJours = 3
      Case "Cult.", "MŽgaphone", "Couleur Grenat"  '$F$1-4
           Continuer = True
           NbJours = 4
      Case "Ca bouge ˆ la maison", "Objectif terre", "Le Journal", "Les yeux dans les yeux"  ' $F$1
           Continuer = True
           NbJours = 0
      Case "PUB", "Comblage / BA", "Programme court"  ' "-"
           Continuer = False
           ValeurDeRemplacement = "-"
      Case Else
           Continuer = False
           ValeurDeRemplacement = "A remplir"

    End Select

    If Continuer = True Then
       If TimeIn * 24 < 18.5 Then
          MajDateLundi = CDate(JoursEnCours) - NbJours
       Else
          MajDateLundi = JoursEnCours
       End If
     Else
          MajDateLundi = ValeurDeRemplacement
     End If

End Function

ça fonctionne à merveille !!!

Merci beaucoup, en te souhaitant une très belle journée !

Rechercher des sujets similaires à "convertir date fonction plage horaire"