tigeline001
XLDnaute Occasionnel
Bonjour tout le monde
A partir de mon fichier j'ai 3 feuilles dans un même classeur ,ce que je veux c'est de parcourir la colonne Lieu de la feuille Feuil1 est egale avec lieu de la feuille Feuil2 si c correct je verifie si la colonne anomalie est egale à c et si c la cas je calcule dans la feuille Feuil3 le delai entre la date debut et la date fin de de la feuille 2 .
J'ai essayé en VBA mais ca me donne rien
j'ai utilisé ce code suivant:
Option Explicit
Private Function Indicateur_Test()
Dim sh1, c As Range
Dim sh2, p As Range
Dim MaValeur, MaValeur1 As String
'comparaison dans une feuille dans un seul classeur
Set sh1 = Sheets("Feuil1").Range("Lieu")
Set sh2 = Sheets("Feuil2").Range("R_Lieu")
For Each c In sh1
MaValeur = c.Value
For Each p In sh2
MaValeur1 = p.Value
If MaValeur = MaValeur1 Then
Call Calc_Diff(Sheets("Feuil2").Range("R_Date_Debut"), Sheets("Feuil2").Range("R_Date_fin"))
End If
Next
Next
End Function
Private Function Calc_Diff(ByVal maDate1 As Date, _
ByVal maDate2 As Date) As String
' Renvoie une chaine comme "2 ans 3 mois 18 jours ..."
Dim lAn As Long, lMois As Long, lJour As Long
Dim lHeure As Long, lMinute As Long, lSeconde As Long
Dim DateTemp As Date, Temp As String
' Remet les dates dans l'ordre si besoin : Date1 avant Date2
If maDate1 > maDate2 Then
DateTemp = maDate1
maDate1 = maDate2
maDate2 = DateTemp
End If
' L'inconvénient de DateDiff, c'est qu'il arrondi le résultat :
' Si on cherche le nombre d'années entre deux dates alors que _
ces dates ne sont séparées que de 11 mois, il renverra 1 an.
' Pour éviter cela, après avoir récupéré le nombre, on teste _
si la (Date1 + Nombre) > Date2, c'est qu'il y a eu un arrondi
' Dans ce cas, on enlève 1 et le tour est joué.
'--- Nombre d'années
lAn = DateDiff("yyyy", maDate1, maDate2)
If DateAdd("yyyy", lAn, maDate1) > maDate2 Then lAn = lAn - 1
' Décale la date d'autant
maDate1 = DateAdd("yyyy", lAn, maDate1)
'--- Nombre de mois
lMois = DateDiff("m", maDate1, maDate2)
If DateAdd("m", lMois, maDate1) > maDate2 Then lMois = lMois - 1
' Décale la date d'autant
maDate1 = DateAdd("m", lMois, maDate1)
'--- Nombre de jours
lJour = DateDiff("d", maDate1, maDate2)
If DateAdd("d", lJour, maDate1) > maDate2 Then lJour = lJour - 1
' Décale la date d'autant
maDate1 = DateAdd("d", lJour, maDate1)
'--- Nombre d'heures
lHeure = DateDiff("h", maDate1, maDate2)
If DateAdd("h", lHeure, maDate1) > maDate2 Then lHeure = lHeure - 1
' Décale la date d'autant
maDate1 = DateAdd("h", lHeure, maDate1)
'--- Nombre de minutes
lMinute = DateDiff("n", maDate1, maDate2)
If DateAdd("n", lMinute, maDate1) > maDate2 Then lMinute = lMinute - 1
' Décale la date d'autant
maDate1 = DateAdd("n", lMinute, maDate1)
'--- Nombre de secondes
lSeconde = DateDiff("s", maDate1, maDate2)
'Debug.Print lAn, lMois, lJour, lHeure, lMinute, lSeconde
' Mise en forme de la chaîne à renvoyer :
Temp = IIf(lAn > 0, CStr(lAn) & "an(s) ", "")
Temp = Temp & IIf(lMois > 0, CStr(lMois) & " mois ", "")
Temp = Temp & IIf(lJour > 0, CStr(lJour) & " jours ", "")
Temp = Temp & IIf(lHeure > 0, CStr(lHeure) & " heure(s) ", "")
Temp = Temp & IIf(lMinute > 0, CStr(lMinute) & "minute (s) ", "")
Temp = Temp & IIf(lSeconde > 0, CStr(lSeconde) & "seconde (s)", "")
Calc_Diff = Temp
End Function
J'ai besoin d'aide pour avoir la solution ou si vs pouvez me proposer D'autres solutions sans ou avec VBA
Merci
A partir de mon fichier j'ai 3 feuilles dans un même classeur ,ce que je veux c'est de parcourir la colonne Lieu de la feuille Feuil1 est egale avec lieu de la feuille Feuil2 si c correct je verifie si la colonne anomalie est egale à c et si c la cas je calcule dans la feuille Feuil3 le delai entre la date debut et la date fin de de la feuille 2 .
J'ai essayé en VBA mais ca me donne rien
j'ai utilisé ce code suivant:
Option Explicit
Private Function Indicateur_Test()
Dim sh1, c As Range
Dim sh2, p As Range
Dim MaValeur, MaValeur1 As String
'comparaison dans une feuille dans un seul classeur
Set sh1 = Sheets("Feuil1").Range("Lieu")
Set sh2 = Sheets("Feuil2").Range("R_Lieu")
For Each c In sh1
MaValeur = c.Value
For Each p In sh2
MaValeur1 = p.Value
If MaValeur = MaValeur1 Then
Call Calc_Diff(Sheets("Feuil2").Range("R_Date_Debut"), Sheets("Feuil2").Range("R_Date_fin"))
End If
Next
Next
End Function
Private Function Calc_Diff(ByVal maDate1 As Date, _
ByVal maDate2 As Date) As String
' Renvoie une chaine comme "2 ans 3 mois 18 jours ..."
Dim lAn As Long, lMois As Long, lJour As Long
Dim lHeure As Long, lMinute As Long, lSeconde As Long
Dim DateTemp As Date, Temp As String
' Remet les dates dans l'ordre si besoin : Date1 avant Date2
If maDate1 > maDate2 Then
DateTemp = maDate1
maDate1 = maDate2
maDate2 = DateTemp
End If
' L'inconvénient de DateDiff, c'est qu'il arrondi le résultat :
' Si on cherche le nombre d'années entre deux dates alors que _
ces dates ne sont séparées que de 11 mois, il renverra 1 an.
' Pour éviter cela, après avoir récupéré le nombre, on teste _
si la (Date1 + Nombre) > Date2, c'est qu'il y a eu un arrondi
' Dans ce cas, on enlève 1 et le tour est joué.
'--- Nombre d'années
lAn = DateDiff("yyyy", maDate1, maDate2)
If DateAdd("yyyy", lAn, maDate1) > maDate2 Then lAn = lAn - 1
' Décale la date d'autant
maDate1 = DateAdd("yyyy", lAn, maDate1)
'--- Nombre de mois
lMois = DateDiff("m", maDate1, maDate2)
If DateAdd("m", lMois, maDate1) > maDate2 Then lMois = lMois - 1
' Décale la date d'autant
maDate1 = DateAdd("m", lMois, maDate1)
'--- Nombre de jours
lJour = DateDiff("d", maDate1, maDate2)
If DateAdd("d", lJour, maDate1) > maDate2 Then lJour = lJour - 1
' Décale la date d'autant
maDate1 = DateAdd("d", lJour, maDate1)
'--- Nombre d'heures
lHeure = DateDiff("h", maDate1, maDate2)
If DateAdd("h", lHeure, maDate1) > maDate2 Then lHeure = lHeure - 1
' Décale la date d'autant
maDate1 = DateAdd("h", lHeure, maDate1)
'--- Nombre de minutes
lMinute = DateDiff("n", maDate1, maDate2)
If DateAdd("n", lMinute, maDate1) > maDate2 Then lMinute = lMinute - 1
' Décale la date d'autant
maDate1 = DateAdd("n", lMinute, maDate1)
'--- Nombre de secondes
lSeconde = DateDiff("s", maDate1, maDate2)
'Debug.Print lAn, lMois, lJour, lHeure, lMinute, lSeconde
' Mise en forme de la chaîne à renvoyer :
Temp = IIf(lAn > 0, CStr(lAn) & "an(s) ", "")
Temp = Temp & IIf(lMois > 0, CStr(lMois) & " mois ", "")
Temp = Temp & IIf(lJour > 0, CStr(lJour) & " jours ", "")
Temp = Temp & IIf(lHeure > 0, CStr(lHeure) & " heure(s) ", "")
Temp = Temp & IIf(lMinute > 0, CStr(lMinute) & "minute (s) ", "")
Temp = Temp & IIf(lSeconde > 0, CStr(lSeconde) & "seconde (s)", "")
Calc_Diff = Temp
End Function
J'ai besoin d'aide pour avoir la solution ou si vs pouvez me proposer D'autres solutions sans ou avec VBA
Merci
Pièces jointes
Dernière modification par un modérateur: