Power Query Power Query - Est-il possible d'inscrire des données d'un champ A provenant d'un enregistrement n sur un champ B d'un enregistrement n-1 ?

  • Initiateur de la discussion Initiateur de la discussion Flx1er
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Flx1er

XLDnaute Occasionnel
Bonjour,
Je dois corriger des fichiers d’activités comportant des anomalies via Power Query, mais mes connaissances sur ce cas précis sont aujourd’hui insuffisantes.
Le principe de correction est le suivant :
Lorsque le "Mode d’entrée dans UM" = 6 et que la "Date d’entrée de séjour" = lundi, il convient de reporter certaines informations de l’enregistrement n vers l’enregistrement n-1, à savoir :
  • Date d’entrée dans UM (n) → dans Date de sortie de l’unité médicale (n-1)
  • Mode d’entrée dans UM (n) → dans Mode de sortie (n-1)
  • Provenance (n) → dans Destination (n-1)
Le fichier joint contient deux onglets :
  • Le premier correspond à un extrait de la source de données présentant les anomalies.
  • Le second présente le résultat attendu, obtenu à l’aide de formules
    • La colonne TEST vérifie si N° jour d’entrée en UM = 2 (lundi) et Mode d’entrée dans UM = 6, auquel cas le résultat est OK, sinon nok.
    • Les colonnes CORRECTIF permettent, en fonction du résultat du TEST, d’appliquer les ajustements nécessaires.

Je vous remercie par avance pour l’aide que vous pourrez m’apporter.
 

Pièces jointes

Bonjour,
J'ai essayé d'analyser ton fichier...
Tu confirmes que l'export des données est de cette "piètre" qualité? (multiples espaces parasites dans les cellules à priori vides)
Est-ce que le changement de "Numéro UM" est suffisant pour ajouter les données manquantes dans les 3 colonnes visées?
 
Bonjour Flx1er, Cousinhub,

C'est vraiment très simple avec cette macro du bouton "Corriger" :
VB:
Private Sub CommandButton1_Click()
Dim der&, i&
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
der = Range("H" & Rows.Count).End(xlUp).Row
Range("Q3:Q" & der).ClearContents 'RAZ
For i = 3 To der - 1
    If Weekday(Cells(i + 1, 8)) = 2 And Val(Cells(i + 1, 9)) = 6 And Not (Weekday(Cells(i, 8)) = 2 And Val(Cells(i, 9)) = 6) Then
        Cells(i, 11) = Cells(i + 1, 8)
        Cells(i, 12) = Cells(i + 1, 9)
        Cells(i, 13) = Cells(i + 1, 10)
        Cells(i, 17) = "X" 'repère pour la MFC
    End If
Next
End Sub
La MFC sur les colonnes K L M colore en jaune les corrections.

A+
 

Pièces jointes

Bonsoir,
Annule ma dernière intervention...
Tu es passé tellement de fois depuis ta demande (au moins 5 fois), sans répondre à ma question, ni sans donner une quelconque réponse à la proposition de @job75 , que je pense que ça ne t'intéresse plus
Bon courage 🙂
Bonjour Cousinhub,
J’étais dans l’impossibilité de répondre. Je cherche toujours une solution mais avec Power query. Dans l’urgence j’ai continué avec les formules.
Merci de ton aide
 
Bonjour Flx1er, Cousinhub,

C'est vraiment très simple avec cette macro du bouton "Corriger" :
VB:
Private Sub CommandButton1_Click()
Dim der&, i&
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
der = Range("H" & Rows.Count).End(xlUp).Row
Range("Q3:Q" & der).ClearContents 'RAZ
For i = 3 To der - 1
    If Weekday(Cells(i + 1, 8)) = 2 And Val(Cells(i + 1, 9)) = 6 And Not (Weekday(Cells(i, 8)) = 2 And Val(Cells(i, 9)) = 6) Then
        Cells(i, 11) = Cells(i + 1, 8)
        Cells(i, 12) = Cells(i + 1, 9)
        Cells(i, 13) = Cells(i + 1, 10)
        Cells(i, 17) = "X" 'repère pour la MFC
    End If
Next
End Sub
La MFC sur les colonnes K L M colore en jaune les corrections.

A+
Bonjour Job75,
Merci pour la macro, mais je n’ai pas le temps de l’adapter à mon travail et surtout mes compétences en vb sont limitées.
Je te remercie pour le temps passé.
Bonjour,
J'ai essayé d'analyser ton fichier...
Tu confirmes que l'export des données est de cette "piètre" qualité? (multiples espaces parasites dans les cellules à priori vides)
Est-ce que le changement de "Numéro UM" est suffisant pour ajouter les données manquantes dans les 3 colonnes visées?
 
Bonjour,
J'ai essayé d'analyser ton fichier...
Tu confirmes que l'export des données est de cette "piètre" qualité? (multiples espaces parasites dans les cellules à priori vides)
Est-ce que le changement de "Numéro UM" est suffisant pour ajouter les données manquantes dans les 3 colonnes visées?
Cousinhub,
La structure de l’exemple simplifié est extraite d’un fichier texte dont la longueur peut varier. Par conséquent, les espaces présents doivent être conservés, car ils sont essentiels pour la suite du traitement.

Par ailleurs, pour un même Numéro admin, un changement de numéro UM intervient un lundi. Ce changement est associé à un mode d’entrée en UM égal à 6.
Merci pour ton aide
 
Bonjour à tous,

Un essai.

PowerQuery:
let
A = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
B = List.Buffer(Table.ToRows(A)),
C = (x)=> let y = B{x} in List.AllTrue({Date.DayOfWeek(y{7}, Day.Sunday) = 1, Number.From(y{8}) = 6}),
D = List.Generate(
    ()=> 0,
    each _ < List.Count(B),
    each _+1,
    each
        if not C(_) and C(_+1)
        then List.FirstN(B{_},10) & List.Transform({7..9}, (x)=> B{_+1}{x}) & List.LastN(B{_},3)
        else B{_}),
    E = Table.FromRows(D, Value.Type(A))
in E

Joyeuses Pâques à tous.
 

Pièces jointes

On peut aussi travailler avec des index sur les lignes... et rapatrier la ligne précédante par jointure simple.



PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Removed Columns" = Table.RemoveColumns(Source,{"FROM", "RAWDATA.ENTITY_DATA_TYPE_REFERENCE", "CHANNEL.NAME"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"INDEX", Int64.Type}, {"CONSO", type number}, {"TO", type datetime}, {"COMPTEUR", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index.1", 1, 1, Int64.Type),
    #"Added Index1" = Table.AddIndexColumn(#"Added Index", "Index.0", 0, 1, Int64.Type),
    #"Merged Queries" = Table.NestedJoin(#"Added Index1", {"Index.0"}, #"Added Index1", {"Index.1"}, "ligne precedante", JoinKind.LeftOuter),
    #"Expanded ligne precedante" = Table.ExpandTableColumn(#"Merged Queries", "ligne precedante", {"INDEX"}, {"ligne precedante.INDEX"}),
    #"Removed Columns1" = Table.RemoveColumns(#"Expanded ligne precedante",{"Index.1", "Index.0"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns1", "nouvelle conso", each ([INDEX]-[ligne precedante.INDEX])*75),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"nouvelle conso", type number}})
in
    #"Changed Type1"
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour