Macro boucle ou formule Excel ?

Résolu
salykato13800 Messages postés 11 Statut Membre -  
julia Namor Messages postés 532 Statut Membre -
Bonjour,

Au secours !

Ci-dessous mes 2 tableaux (1 et 2).

Je dois tester chaque ligne du tableau 1, pour savoir si la date se trouvant en colonne "Date début" est comprise entre la date départ et date retour du tableau 2.

Il y a donc 2 critères (nom et date) et je ne sais absolument comment m'y prendre.

Je ne trouve pas de formule qui peut m'aider.
Une macro serait, je pense mieux appropriée.

C'est là que je fais appelle à vous car je n'ai aucune idée de comment la rédiger et la structurer.

Si quelqu'un peut m'aider ce serait vraiment cool.

En copie jointe une copie d'écran de mes tableaux.

Merci :-)

http://www.hostingpics.net/viewer.php?id=219796Sanstitre.jpg

12 réponses

  1. julia Namor Messages postés 532 Statut Membre 33
     
    Je vous en prie.

    Si tout ok pour vous .N'oubliez pas de mettre résolu.

    Cordialement
    1
  2. DjiDji59430 Messages postés 4278 Date d'inscription   Statut Membre Dernière intervention   717
     
    Bonjour ,
    Quand on joint un fichier-test, (avec TOUTES les explications et les résultats souhaités) ou mieux, si c'est possible, le fichier concerné, c'est plus commode pour les intervenants.
    Et tu as plus de chances que quelqu'un s’intéresse à ton problème

    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes s'affiche le lien en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans la discussion, et, dans ton message de réponse, tu fais : "Coller".

    Cordialement.
    0
  3. salykato13800 Messages postés 11 Statut Membre
     
    Re-
    Merci de vos réponses.
    Désolé j'aurais dû penser à joindre le fichier.
    C'est vrai que ce sera plus simple.
    Le voici :

    https://www.cjoint.com/c/GBhqgJwSPtO

    En vous remerciant.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. salykato13800 Messages postés 11 Statut Membre
     
    Bonjour Julia,

    Merci beaucoup pour votre travail.

    Dans l'esprit c'est tout à fait ce qu'il me faut.

    Par contre, j'ai regardé votre macro, et si j'ai bien compris (rien n'est moins sûr), la première ligne du tableau 1 est comparé avec les données du tableau 2 qui sont directement sur la même ligne ?

    Ce que je souhaiterai pour être plus précis, c'est que chaque ligne du tableau 1 (avec comme critère le nom-prénom et date) soit testée sur chaque ligne du tableau 2.
    Si le test effectué trouve un résultat positif, on pourrait mettre "OK" en colonne C de la ligne testée.
    En revanche, si aucune occurrence n'est trouvée, on pourrait mettre "ANOMALIE".

    J'ai essayé ça. Evidement ça ne marche pas.
    Je vous laisse admirer mon piètre résultat. L'important est de participer disait Coubertin lol

    Sub Bouton1_Clic()
    Dim cell As Range
    DL = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
    For Each cell In Sheets("feuil1").Range("A3:" & "A" & DL)
    If cell.Offset(0, 1).Value < cell.Offset(0, 6).Value And cell.Offset(0, 1).Value > cell.Offset(0, 5).Value Then
    cell(0, 3).Value = "OK"
    Else
    cell(0, 3).Value = "ANOMALIE"
    End If
    Next
    End Sub

    Je peux vous redemander de l'aide ? :-)
    0
  6. julia Namor Messages postés 532 Statut Membre 33
     
    Bonjour

    Essayez ce code ,si j'ai bien compris ça fera l'affaire.
    Sub Bouton1_Clic()

    Dim cell As Range
    Application.ScreenUpdating = False
    Sheets("feuil1").Range("C1:C20").ClearContents
    DL = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
    For Each cell In Sheets("feuil1").Range("A3:" & "A" & DL)
    For i = 3 To Range("F65536").End(xlUp).Row
    If cell.Offset(0, 1).Value > Cells(i, 6).Value And cell.Offset(0, 1).Value < Cells(i, 6).Offset(0, 1).Value Then
    cell.Offset(0, 2).Value = "OK"
    Else
    cell.Offset(0, 2).Value = "ANOMALIE"
    End If
    Next
    Next
    Application.ScreenUpdating = True

    End Sub


    Cordialement
    0
  7. salykato13800 Messages postés 11 Statut Membre
     
    Alors, j’ai simplifié mes tableaux.

    https://www.cjoint.com/c/GBioSkEfo6E

    Ma situation est la suivante :
    Le tableau 2 représente les déplacements professionnels des personnes.
    Le tableau 1 représente les absences (maladie, congés ou déplacements professionnels).

    Ce que je veux tester, c’est chaque ligne du tableau 1 dans chaque ligne du tableau 2 jusqu’à trouver une occurrence.

    En clair, pour la ligne 1 du tableau 1 (BERNARD Pierre), la macro devrait me donner mon « OK » puisque le 13/12/16 est compris dans les dates de la ligne 4 BERNARD Pierre du tableau 2 (et non la ligne 6 du tableau 2 relative à Barbara Dupont).
    Pour la ligne 2 de mon tableau 1 (Barbara Dupont), la macro devrait me dire « ANOMALIE » puisque le 08/12/16 n’est compris dans aucune date des lignes Barbara Dupont du tableau 2.

    Mon test porte donc sur 2 critères : les nom-prénom et la date.

    Je sais pas si je suis clair ? Désolé je pense ne pas l’avoir été du début.

    Merci de votre aide.
    0
  8. salykato13800 Messages postés 11 Statut Membre
     
    Bonjour,
    Alors très bien cette formule, mais elle ne teste que la date sans le nom :-(.
    Toutefois, si on peut trouver le numéro de la ligne dans le tableau 2 qui vérifie le test alors j'utilise un INDEX EQUIV et le tour est joué :-).
    0
    1. DjiDji59430 Messages postés 4278 Date d'inscription   Statut Membre Dernière intervention   717
       
      Re
      juste un oubli !

      https://www.cjoint.com/c/GBiq76Zq1r1

      Si les noms avaient été différents dans l'exemple ...........
      0
  9. julia Namor Messages postés 532 Statut Membre 33
     
    Et ça!!!!!!!

    Sub test()
    Dim cell As Range
    Dim Compteur As Integer
    Dim vid As Range
    Application.ScreenUpdating = False
    Sheets("feuil1").Range("C1:C20").ClearContents
    DL = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
    For Each cell In Sheets("feuil1").Range("A3:" & "A" & DL)
    For i = 3 To Range("F65536").End(xlUp).Row
    If cell.Value = Cells(i, 6).Offset(0, -1).Value And cell.Offset(0, 1).Value > Cells(i, 6).Value And cell.Offset(0, 1).Value < Cells(i, 6).Offset(0, 1).Value Then
    Compteur = Compteur + 1
    cell.Offset(0, 2).Value = Compteur
    If Compteur <> 0 Then
    cell.Offset(0, 2).Value = "OK"
    End If
    End If
    Next
    Next
    For Each vid In Sheets("feuil1").Range("C3:" & "C" & DL)
    If vid = "" Then
    vid.Value = "ANOMALIE"
    End If
    Next
    Application.ScreenUpdating = True
    End Sub
    0
  10. salykato13800 Messages postés 11 Statut Membre
     
    Alors là, je vous dis bravo à tous les deux.
    Vraiment merci, les deux solutions marchent impec.

    Au delà du résultat, je vais "éplucher" vos solutions pour progresser à titre personnel.
    J'ai du mal avec les macros et je ne connaissais pas la formule proposée.

    Vous êtes au top !

    Merci beaucoup :-)
    0