Macro avec plusieurs conditions et boucles

Résolu/Fermé
Sol256 Messages postés 5 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015 - 1 juin 2015 à 13:29
Sol256 Messages postés 5 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015 - 3 juin 2015 à 16:06
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

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
1 juin 2015 à 14:38
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
Sol256 Messages postés 5 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015
Modifié par Sol256 le 1/06/2015 à 15:17
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
1 juin 2015 à 15:46
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
Sol256 Messages postés 5 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015
1 juin 2015 à 16:02
Bien sur, excusez moi :)
https://www.cjoint.com/?0FbqbhwwlXA
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juin 2015 à 08:45
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
Sol256 Messages postés 5 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015
2 juin 2015 à 09:47
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 2/06/2015 à 11:15
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
Sol256 Messages postés 5 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015
3 juin 2015 à 16:06
Merci beaucoup j'ai trouvé une autre solution
0