Traiter avec les donnees de feuilles differentes

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

12rapport1.xlsm (21.60 Ko)

Bonjour

A tester

Merci Banzai64

ca marche es ce qu'il est possible d'avoir le résultat dans la Feuil3 à son ouverture sans cliquer sur un bouton

Salut Banzai64

Si je veux tester sur plusieur et les comparer il me donne une erreur au niveau de la boucle

Par exemple supposons que je veux comparer Lieu(Feuil2) avec Lieu(Feuil1) et Prenom(Feuil1) avec Prenom(Feuil2) là il me retourne une erreur au niveau des boucles

Merci

Bonjour

tigeline001 a écrit :

es ce qu'il est possible d'avoir le résultat dans la Feuil3

Où ça dans la page ?

les résultats les uns à la suite des autres ?

Sur la même ligne ?

A tester pour les prénoms

Sub 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")
  With Sheets("Feuil2")
    For Each c In sh1
      MaValeur = c.Value
      For Each p In sh2
        MaValeur1 = p.Value
        If MaValeur = MaValeur1 And .Range("R_Anomalie").Cells(p.Row, 1) = "c" Then
          If c.Offset(0, 2) = p.Offset(0, 3) Then     ' Même prénom
            .Range("O" & p.Row) = Calc_Diff(.Range("R_Date_Debut").Cells(p.Row, 1), .Range("R_Date_fin").Cells(p.Row, 1))
            'Call Calc_Diff(Sheets("Feuil2").Range("R_Date_Debut"), Sheets("Feuil2").Range("R_Date_fin"))
          End If
        End If
      Next
    Next
  End With
End Sub

Merci encore Banzai64 de ta disponibilité

es ce que ces deux lignes doivent changer

Set sh1 = Sheets("Feuil1").Range("Lieu")

Set sh2 = Sheets("Feuil2").Range("R_Lieu")

Merci

Bonjour

tigeline001 a écrit :

es ce que ces deux lignes doivent changer

????

Merci Banzai64

ça marche

Merci encore de ta disponibilite c'est vraiment gentille

Tu m'a vraiment aide comme je suis debutant en vba on ma donné un travail j'ai fait une bonne partie mais il me reste des trucs à faire je suis dans les recherche si j'arrive pas à avancer je te ferai signe

Merci

Excuse du dérangement ,j'ai appliqué ta solution à mon application ,il n'y a pas d'erreur mais il tarde à se charger des fois meme ca plante.je te mets en fichier jointe mes deux feuilles avec le code .

Si je l'applique sur le premier exemple que je t'avais envoyé ca marche mais avec les donnes ci-joint ca donne rien

MErci

7appli.xlsm (142.17 Ko)

Bonsoir

A vérifier

Merci encore

ça marche bien, pouvez me dire quel etait le probleme

Merci

Merci encore

Ça marche trés bien

Pouvez vous me dire quel etait le probleme

Merci

Bonjour

C'est marqué dans le fichier

Banzai64 a écrit :

Modification des zones nommées - voir Feuil3

Remplacement de la fonction

La fonction n'est pas la même , on transmet des chaines de caractères (que l'on transforme en date) à la place des dates qui n'en sont pas

Merci

Bonjour Banzai64

J'essayais de mettre la colonne des resultats plus la date de debut et la date de fin dela feuille "Rapport_Intervention" sur une nouvelle.

En gros la nouvelle feuille aura seulement 3 colonnnes

je l'ai fait aavec les fonctions copie coller(paste copy) dans une boucle mais ca retourne rien

Merci

Bonjour Banzei

J'ai trouvé la solution

Merci

Rechercher des sujets similaires à "traiter donnees feuilles differentes"