Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Excel VBA

mo_owen

XLDnaute Nouveau
Bonjour à tous je suis novice en VBA et j'ai besoin de votre aide

Voici le fichier Excel ci joint

Il comporte trois feuilles excel. (ORIGINAL, RESULTAT ATTENDU, COPY_ORIGINAL_POUR_TEST).

Je voudrais si possible un code qui se rapproche de la suppression des doublons mais pas que. J'ai besoin d'un code qui garde le plus ancien et le plus récent dossier pour un numéro de dossier donné.

Cependant, Dans le fichier j'ai des doublons, un dossier unique, des triplons, quatriplons etc.....


Résultat attendu:
Besoin de 2 lignes (le plus ancien et la plus récent pour chaque numéro de dossier dossier en prenant en compte le code journal A) pour chaque dossier à savoir le premier dossier (le plus ancien dossier) et le dernier dossier (le plus récent) du même numéro de dossier.)

je récapitule : Si le code journal == A alors récupère le dossier le plus ancien et le plus récent; mais pour chaque numéro de dossier

Cordialement
Merci pour votre aide
 

Pièces jointes

  • TestFinal_Automatisation.xlsx
    12 KB · Affichages: 2
  • TestFinal_Automatisation.xls
    50.5 KB · Affichages: 0
Dernière édition:

mo_owen

XLDnaute Nouveau
Super ton explication merci beaucoup. Cela résout mon problème

J'ai deux dernières préoccupations :

1-Serait-il possible de savoir comment faire une différence de date lorsque les deux dates sur lesquelles l'on doit faire la différence sont dans la même colonne de date sous BI pour un même dossier. Sur Excel on fait soit A1-A2 ou A2-A1 si les dossiers se suivent mais sous BI on n'a pas cette possibilité, y'a t'il un moyen de faire ce calcul. Merci

2- y a t'il un moyen de faire le calcul suivant sans supprimer les autres dossiers. C'est a dire faire la différence de date entre le dossier le plus récent et le dossier le plus ancien pour un même numéro de dossier.
Par exemple :
N°D MTT DATEDATE
123 200 01/01/2010
123 100 02/12/2011
123 677 01/01/2016
123 500 01/01/2017
400 900 01/01/2015
500 700 01/01/2017
500 500 01/01/2019
700 400 05/09/2011
700 400 05/09/2016
700 400 05/09/2017

Résultat attendu

N°D MTT DATEDATE MTTDIFF DATEDIFF_EN_JOUR
123 200 01/01/2010 200-200 01/01/2010 - 01/01/2010
123 100 02/12/2011 100-200 02/12/2011 - 01/01/2010
123 600 01/01/2016 600-200 01/01/2016 - 01/01/2010
123 500 01/01/2017 500-200 01/01/2016 - 01/01/2010
400 900 01/01/2015 900-900 01/01/2015 - 01/01/2015
500 700 01/01/2017 700-700 01/01/2017 - 01/01/2017
500 500 01/01/2019 500-700 01/01/2019 - 01/01/2017
700 400 05/09/2011 400-400 05/09/2011 - 05/09/2011
700 500 05/09/2016 500-400 05/09/2016 - 05/09/2011
700 600 05/09/2017 600-400 05/09/2017 - 05/09/2011
 
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour
Avec la tableau source nommé Dossiers2
VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Dossiers2"]}[Content],
    #"Index ajouté" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
    Etat1 = Table.TransformColumnTypes(#"Index ajouté",{{"N°D", Int64.Type}, {"MTT", Int64.Type}, {"DATE", type date}}),
    #"Lignes groupées" = Table.Group(Etat1, {"N°D"}, {{"DATE DIFF", each List.Min([DATE]), type nullable date}}),
    #"Requêtes fusionnées1" = Table.NestedJoin(#"Lignes groupées", {"N°D", "DATE DIFF"}, Etat1, {"N°D", "DATE"}, "Etat1", JoinKind.Inner),
    Etat2 = Table.ExpandTableColumn(#"Requêtes fusionnées1", "Etat1", {"MTT", "Index"}, {"MTT", "Index"}),
    #"Requêtes fusionnées" = Table.NestedJoin(Etat1, {"N°D", "DATE"}, Etat2, {"N°D", "DATE DIFF"}, "Etat2", JoinKind.LeftOuter),
    #"Etat2 développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Etat2", {"MTT","DATE DIFF"}, {"MTT DIFF","DATE DIFF"}),
    #"Lignes triées" = Table.Sort(#"Etat2 développé",{{"Index", Order.Ascending}}),
    #"Rempli vers le bas" = Table.FillDown(#"Lignes triées",{"MTT DIFF","DATE DIFF"}),
    #"Valeur remplacée" = Table.ReplaceValue(#"Rempli vers le bas",each [MTT DIFF],each Text.From([MTT])&" - "&Text.From([MTT DIFF]),Replacer.ReplaceValue,{"MTT DIFF"}),
    #"Valeur remplacée1" = Table.ReplaceValue(#"Valeur remplacée",each [DATE DIFF],each Text.From([DATE])&" - "&Text.From([DATE DIFF]),Replacer.ReplaceValue,{"DATE DIFF"}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Valeur remplacée1",{"Index"})
in
    #"Colonnes supprimées"
 

mo_owen

XLDnaute Nouveau
Bonjour Chris c'est la réponse à la seconde question ? Je l'ai pas encore testé mais je ne vais pas tarder. Merci beaucoup.

Pour la première question t'auras une réponse merci
 

chris

XLDnaute Barbatruc
RE
Oui mais en fait tu veux plutôt une opération et non la juxtaposition (tes exemples sont ambigus)
VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Dossiers2"]}[Content],
    #"Index ajouté" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
    Etat1 = Table.TransformColumnTypes(#"Index ajouté",{{"N°D", Int64.Type}, {"MTT", Int64.Type}, {"DATE", type date}}),
    #"Lignes groupées" = Table.Group(Etat1, {"N°D"}, {{"DATE DIFF", each List.Min([DATE]), type nullable date}}),
    #"Requêtes fusionnées1" = Table.NestedJoin(#"Lignes groupées", {"N°D", "DATE DIFF"}, Etat1, {"N°D", "DATE"}, "Etat1", JoinKind.Inner),
    Etat2 = Table.ExpandTableColumn(#"Requêtes fusionnées1", "Etat1", {"MTT", "Index"}, {"MTT", "Index"}),
    #"Requêtes fusionnées" = Table.NestedJoin(Etat1, {"N°D", "DATE"}, Etat2, {"N°D", "DATE DIFF"}, "Etat2", JoinKind.LeftOuter),
    #"Etat2 développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Etat2", {"MTT","DATE DIFF"}, {"MTT DIFF","DATE DIFF"}),
    #"Lignes triées" = Table.Sort(#"Etat2 développé",{{"Index", Order.Ascending}}),
    #"Rempli vers le bas" = Table.FillDown(#"Lignes triées",{"MTT DIFF","DATE DIFF"}),
    #"Valeur remplacée" = Table.ReplaceValue(#"Rempli vers le bas",each [MTT DIFF],each [MTT]-[MTT DIFF],Replacer.ReplaceValue,{"MTT DIFF"}),
    #"Valeur remplacée1" = Table.ReplaceValue(#"Valeur remplacée",each [DATE DIFF],each Duration.Days([DATE]-[DATE DIFF]),Replacer.ReplaceValue,{"DATE DIFF"}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Valeur remplacée1",{"Index"})
in
    #"Colonnes supprimées"
 

mo_owen

XLDnaute Nouveau
Bonjour oui disons une opération qui me permet de faire ce calcul
 

mo_owen

XLDnaute Nouveau
Bonjour, je n'arrive pas à retrouver ces étapes pourrais tu m'aider merci avec le détail

#"Rempli vers le bas" = Table.FillDown(#"Lignes triées",{"MTT DIFF","DATE DIFF"}),
#"Valeur remplacée" = Table.ReplaceValue(#"Rempli vers le bas",each [MTT DIFF],each [MTT]-[MTT DIFF],Replacer.ReplaceValue,{"MTT DIFF"}),
#"Valeur remplacée1" = Table.ReplaceValue(#"Valeur remplacée",each [DATE DIFF],each Duration.Days([DATE]-[DATE DIFF]),Replacer.ReplaceValue,{"DATE DIFF"}),
#"Colonnes supprimées" = Table.RemoveColumns(#"Valeur remplacée1",{"Index"})
in
#"Colonnes supprimées"
 

mo_owen

XLDnaute Nouveau
Bonjour Chris vraiment excuse moi de te déranger une nouvelle fois, j'ai oublié le détail le plus important dans ma demande d'ou je reviens encore une fois de plus.

Ma demande reste toujours la meme mais cette fois si il faudrait que celui qui envoi le dossier soit celui à qui le dossier est renvoyé.

VOICI UN EXEMPLE MAIS IL Y A UN FICHIER EXCEL EN PIECE JOINTE.




SUR CE PREMIER RESULTAT ATTENDU JE VEUX FAIRE UNE DIFFERENCE DE DATE EN JOUR
 

Pièces jointes

  • test3.xlsx
    10.6 KB · Affichages: 2

mo_owen

XLDnaute Nouveau
Bonjour Chris oui effectivement mais désolé, il n'y a pas que deux personnes, dois je cocher manuellement toutes les personnes ? Et a cette étape le trie a déjà été fait du coup j'ai pas le résultat escompté.
 

Pièces jointes

  • Screenshot_2022-09-24-02-26-35-670_com.android.chrome.jpg
    344.7 KB · Affichages: 20

mo_owen

XLDnaute Nouveau
Peut être que je me trompes, mais tu pourras affirmer ou infirmer mes dis et voir. Merci

je tiens également à te remercier pour te temps que tu m'accorde vraiment merci beaucoup
 

chris

XLDnaute Barbatruc
RE
VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Dossiers"]}[Content],
    Etat1 = Table.TransformColumnTypes(Source,{{"N°DOSSIER ", Int64.Type}, {"DATE", type date}, {"STATUT", type text}, {"PERSONNE 1", type text}, {"PERSONNE 2", type text}}),
    #"Lignes groupées" = Table.Group(Etat1, {"N°DOSSIER "}, {{"1", each List.Min([DATE]), type nullable date}, {"2", each List.Max([DATE]), type nullable date}}),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Lignes groupées", "Filtre", each if [1]=[2] then null else 1),
    #"Lignes filtrées" = Table.SelectRows(#"Personnalisée ajoutée", each ([Filtre] = 1)),
    #"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(#"Lignes filtrées", {"N°DOSSIER ","Filtre"}, "Ord", "DATE"),
    #"Requêtes fusionnées" = Table.NestedJoin(#"Supprimer le tableau croisé dynamique des autres colonnes", {"N°DOSSIER ", "DATE"}, Etat1, {"N°DOSSIER ", "DATE"}, "Etat1", JoinKind.Inner),
    #"Etat1 développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Etat1", {"STATUT", "PERSONNE 1", "PERSONNE 2"}, {"STATUT", "PERSONNE 1", "PERSONNE 2"}),
    #"Lignes triées" = Table.Sort(#"Etat1 développé",{{"N°DOSSIER ", Order.Ascending}, {"DATE", Order.Ascending}}),
    Etat2 = Table.AddIndexColumn(#"Lignes triées", "Index", 0, 1, Int64.Type),
    #"Personnalisée ajoutée1" = Table.AddColumn(Etat2, "ENVOYEUR", each if [Ord]="1" or [Index]=0 then [PERSONNE 1] else Etat2[PERSONNE 2]{[Index]-1}),
    #"Personnalisée ajoutée2" = Table.AddColumn(#"Personnalisée ajoutée1", "RECEPTEUR", each if [Ord]="1" or [Index]=0 then [PERSONNE 2] else Etat2[PERSONNE 1]{[Index]-1}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Personnalisée ajoutée2",{"Filtre", "Ord", "PERSONNE 1", "PERSONNE 2", "Index"})
in
    #"Colonnes supprimées"
 

Discussions similaires

Réponses
8
Affichages
460
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…