Problème code VBA
Bonjour à toute et à tous,
J'ai un code vba que j'essaye d'exécuter dans une de mes feuilles excel mais je n'arrive pas j'ai un message d'erreur "Erreur incompatibilité de type". Ce code est censé calculer le délais d'intervention d'une personne en fonction de l'heure d'appel (en colonne A) et de l'heure d'arriver (en colonne B) tout en prenant en compte que cette personne ne peut pas intervenir entre 22h et 6h, il faut donc aussi que ce code prenne en compte les jours de décalage.
Ci-dessous ce que j'ai fait:
Sub CalculerDelaiIntervention()
' Déclaration des variables
Dim heureAppel As Date
Dim heureArrivee As Date
Dim delaiIntervention As Long
Dim heureDebutInterdite As Date
Dim heureFinInterdite As Date
Dim jourAppel As Date
Dim jourArrivee As Date
' Récupération de l'heure d'appel
heureAppel = ActiveWorkbook.Sheets(1).Range("A1").Value
' Récupération de l'heure d'arrivée
heureArrivee = ActiveWorkbook.Sheets(1).Range("B1").Value
' Récupération du jour d'appel et du jour d'arrivée
jourAppel = DateValue(heureAppel)
jourArrivee = DateValue(heureArrivee)
' Calcul du délai d'intervention en minutes
If jourAppel = jourArrivee Then
' Si l'heure d'arrivée est le même jour que l'heure d'appel, on calcule le délai d'intervention en utilisant la formule
delaiIntervention = DateDiff("n", heureAppel, heureArrivee)
Else
' Si l'heure d'arrivée est un jour différent de l'heure d'appel, on ajoute 24 heures pour prendre en compte le jour de décalage
delaiIntervention = DateDiff("n", heureAppel, DateAdd("d", 1, heureArrivee))
End If
' Vérification si l'intervention a lieu pendant la plage horaire où on ne peut pas travailler
heureDebutInterdite = TimeValue("22:00:00")
heureFinInterdite = TimeValue("06:00:00")
If (heureArrivee >= heureDebutInterdite And heureArrivee <= TimeValue("23:59:59")) _
Or (heureArrivee >= TimeValue("00:00:00") And heureArrivee <= heureFinInterdite) Then
' Si l'intervention a lieu pendant la plage horaire où on ne peut pas travailler, on ajoute le temps correspondant au délai d'intervention
delaiIntervention = delaiIntervention + DateDiff("n", heureArrivee, DateAdd("h", 6, jourArrivee))
End If
' Affichage du délai d'intervention en minutes
MsgBox "Le délai d'intervention est de " & delaiIntervention & " minutes."
End SubMerci à ceux qui peuvent m'aider
Cdt
Edit modo : lorsque vous postez un code merci de veiller à utiliser les balises de code disponibles dans le menu en cliquant sur l'icone </>
Rebonjour j'ai réussi à régler le problème ci-dessus mais j'aimerais maintenant que mon code affiche la valeur trouvé dans une cellule du classeur excel et qu'il fasse le calcul pour toute mes cellules car dans le code ci-dessous c'est à moi de renseigner la valeur de la cellule à chaque fois..
Merci à vous.
Ci-dessus le code corriger
</>
Sub CalculerDelaiIntervention()
' Déclaration des variables
Dim heureAppel As Date
Dim heureArrivee As Date
Dim delaiIntervention As Long
Dim heureDebutInterdite As Date
Dim heureFinInterdite As Date
Dim jourAppel As Date
Dim jourArrivee As Date
' Récupération de l'heure d'appel
heureAppel = ActiveWorkbook.Sheets(1).Range("A2").Value
' Récupération de l'heure d'arrivée
heureArrivee = ActiveWorkbook.Sheets(1).Range("B2").Value
' Récupération du jour d'appel et du jour d'arrivée
jourAppel = DateValue(heureAppel)
jourArrivee = DateValue(heureArrivee)
' Calcul du délai d'intervention en minutes
If jourAppel = jourArrivee Then
' Si l'heure d'arrivée est le même jour que l'heure d'appel, on calcule le délai d'intervention en utilisant la formule
delaiIntervention = DateDiff("n", heureAppel, heureArrivee)
Else
' Si l'heure d'arrivée est un jour différent de l'heure d'appel, on ajoute 24 heures pour prendre en compte le jour de décalage
delaiIntervention = DateDiff("n", heureAppel, DateAdd("d", 1, heureArrivee))
End If
' Vérification si l'intervention a lieu pendant la plage horaire où on ne peut pas travailler
heureDebutInterdite = TimeValue("22:00:00")
heureFinInterdite = TimeValue("06:00:00")
If (heureArrivee >= heureDebutInterdite And heureArrivee <= TimeValue("23:59:59")) _
Or (heureArrivee >= TimeValue("00:00:00") And heureArrivee <= heureFinInterdite) Then
' Si l'intervention a lieu pendant la plage horaire où on ne peut pas travailler, on ajoute le temps correspondant au délai d'intervention
delaiIntervention = delaiIntervention + DateDiff("n", heureArrivee, DateAdd("h", 6, jourArrivee))
End If
' Affichage du délai d'intervention en minutes
MsgBox "Le délai d'intervention est de " & delaiIntervention & " minutes."
End Sub
Bonjour,
D'accord je n'avais pas compris. Merci et désolé.
Sub CalculerDelaiIntervention()
' Déclaration des variables
Dim heureAppel As Date
Dim heureArrivee As Date
Dim delaiIntervention As Long '"Long" est un type de données numériques. Il est comme integer mais pour un très grand nombre de donnée
Dim heureDebutInterdite As Date
Dim heureFinInterdite As Date
Dim jourAppel As Date
Dim jourArrivee As Date
Dim resultat As Range
' Récupération de l'heure d'appel
heureAppel = ActiveWorkbook.Sheets(1).Range("A6").Value
' Récupération de l'heure d'arrivée
heureArrivee = ActiveWorkbook.Sheets(1).Range("B6").Value
' Récupération du jour d'appel et du jour d'arrivée
jourAppel = DateValue(heureAppel)
jourArrivee = DateValue(heureArrivee)
' Calcul du délai d'intervention en minutes
If jourAppel = jourArrivee Then
' Si l'heure d'arrivée est le même jour que l'heure d'appel, on calcule le délai d'intervention en utilisant la formule
delaiIntervention = DateDiff("n", heureAppel, heureArrivee)
Else
' Si l'heure d'arrivée est un jour différent de l'heure d'appel, on ajoute 24 heures pour prendre en compte le jour de décalage
delaiIntervention = DateDiff("n", heureAppel, DateAdd("d", 1, heureArrivee))
End If
' Vérification si l'intervention a lieu pendant la plage horaire où on ne peut pas travailler
heureDebutInterdite = TimeValue("22:00:00")
heureFinInterdite = TimeValue("06:00:00")
If (heureArrivee >= heureDebutInterdite And heureArrivee <= TimeValue("23:59:59")) _
Or (heureArrivee >= TimeValue("00:00:00") And heureArrivee <= heureFinInterdite) Then
' Si l'intervention a lieu pendant la plage horaire où on ne peut pas travailler, on ajoute le temps correspondant au délai d'intervention
delaiIntervention = delaiIntervention + DateDiff("n", heureArrivee, DateAdd("h", 6, jourArrivee))
End If
' Affichage du délai d'intervention en minutes dans la colonne E
Set resultat = ActiveWorkbook.Sheets(1).Range("E6")
resultat.Value = delaiIntervention
End Sub