Macro avec plusieurs conditions et boucles

Résolu
Sol256 Messages postés 5 Statut Membre -  
Sol256 Messages postés 5 Statut Membre -
Bonjour,
je dois réaliser une macro qui me permettra d'afficher le montant "total frais" dans un autre tableau d'une autre feuille. Cependant ils y a plusieurs conditions.
Contexte: une feuille A et une autre feuille B
on souhaite insérer dans le tableau de la feuille A (colonne G) le montant du tableau de la feuille B (colonne T) si le numéro de dossier, la date, l'employé et le motif corresponde au données sur la feuille A.

Comment dois je m'y prendre pour que toutes les lignes de la feuille B soit analysées et leur montant réparti dans la feuille A si les conditions sont respectées?

J'espère m'être montrée clair, n'hésitez pas à me demander des précisions :)

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    1/dans quelle colonnes se trouvent dans les 2 feuilles
    dossier, date,empoyé, motif
    2/il ya t il des doublons dans chaque liste ?
    3/Combien de lignes environ ?

    /pour essayer d'^tre efficace:
    Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
    et coller le lien proposé dans le message de réponse
    Dans l'attente

    0
    1. Sol256 Messages postés 5 Statut Membre
       
      https://www.cjoint.com/?0Fbo6jyFRXo

      En effet il peux y avoir des doublons.
      Un dossier n'a qu'un seul motif et pour un dossier il peux y avoir plusieurs date avec des employés différents
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Merci de mettre des données avec des dossiers,noms bidon, des dates, motif bidon
      car sans données, je suis dans le vide et ne peut donc rien faire....
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    peu de temps hier, excuse moi

    comme j'ai supposé que tu avais peut-^tre plusieurs feuilles "motif" le code est fait par macro paramétrée; C a d que le bouton d'appel macro de ces feuilles déclenche le code en tenant compte du nom de la feuille

    le code proposé:
    Option Explicit
    '-----------
    Sub selectionner_motif()
    'appel macro reporter frais en fonction de la feuille
    reporter_frais ActiveSheet.Name
    End Sub
    '-----------
    Sub reporter_frais(feuille)
    Dim Derlig As Byte, T_donnees, T_frais
    Dim D_motif As Object, Motif As String, Concat As String, Ligne As Byte
    Dim cptr As Byte

    '------------------------------------initialisations
    Application.ScreenUpdating = False 'fige défilement de l'écran
    Set D_motif = CreateObject("scripting.dictionary") 'création d'un dictionnaire
    Sheets(feuille).Range("G5:G50").ClearContents 'nettoyage colonne G "frais"

    With Sheets("B")
    'mémorisations des données et frais
    Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    T_donnees = .Range("A6:D" & Derlig)
    T_frais = Application.Transpose(.Range("U6:U" & Derlig))
    End With
    With Sheets(feuille)
    'création d'un couple données concaténées, ligne)
    Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    Motif = .Range("C3")
    For Ligne = 5 To Derlig
    'contaténation des données dossier, employé,date, motif
    Concat = .Cells(Ligne, "A") & " " & .Cells(Ligne, "B") & " " & .Cells(Ligne, "C") & " " & Motif
    If Not D_motif.exists(Concat) Then D_motif.Add Concat, Ligne
    Next
    '--------------------------comparaison et report des frais
    For cptr = 1 To UBound(T_donnees)
    Concat = T_donnees(cptr, 1) & " " & T_donnees(cptr, 2) & " " & T_donnees(cptr, 3) & " " & T_donnees(cptr, 4)
    'si concatenation identique report des frais colonne G
    If D_motif.exists(Concat) Then .Cells(D_motif.Item(Concat), "G") = T_frais(cptr)
    Next
    End With
    End Sub

    le classeur
    http://www.cjoint.com/c/EFcgSTvX840

    en espèrant que...
    0
    1. Sol256 Messages postés 5 Statut Membre
       
      Merci de votre réponse complète. Toutefois en effectuant les changements de nom des feuilles, je reçois un message d'erreur d'exécution 1004.
      C'est ma première macro/VBA et j'ai du mal à comprendre votre code, je n'arrive donc pas à trouver l'erreur x$
      Je vous met donc toutes les feuilles motif (il y en a 3).
      http://www.cjoint.com/c/EFchU0FGZ2D
      Je vous suis très reconnaissante du temps que vous prenez pour m'aider.
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      je reçois un message d'erreur d'exécution 1004.
      sur quelle ligne ?
      elle est surlignée en jaune dans le code

      Pourquoi dans les feuilles motif ne commences tu pas juste sous les ent^tes ?
      Pourquoi est ce que dans les feuilles motif les totaux ne sont pas placés sur la m^me ligne ?
      0
    3. Sol256 Messages postés 5 Statut Membre
       
      Merci beaucoup j'ai trouvé une autre solution
      0