Aide convertisseur tableux en un seule ligne

bonsoir,

SVP je souhaite convertir le tableau celui la par semaine parfois c'est par mois en une seule ligne par jours comme explique dans le fichier

y a t'il une macro

17converter.xlsx (22.08 Ko)
12converter.xlsx (22.35 Ko)

qui peu faire cela ou possible avec des formules??

Merci d'avance le fichier en pièce jointe pour mieux comprendre

Bonjour

Une solution PowerQuery intégré à ta version Excel

13converter-pq.xlsx (46.98 Ko)

bonsoir 78chris parfait c'est biens ce que je voulais :)

par contre je doit savoir comment ca été fait ??

doit-je installer PowerQuery car ceci n'est qu'un exemple j'ai autre fichier avec toute un mois et je doit le faire chaque semaine presque donc je doit avoir la squelette ou la solution a appliqué

MErci

Salut Emiros,
Salut Chris,

en VBA.
Un double-clic sur la feuille démarre la macro.
J'ai vu, dans les résultats, des trucs bizarres pour les dates "01/09" - "02/09" mais, à cette heure-ci, je renonce...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tTab, rCel As Range, iRow%, iRowT%, iOK%, sData$
'
Cancel = True
On Error Resume Next
Set rCel = Cells.Find(what:="Prév", lookat:=xlWhole)
'
If Not rCel Is Nothing Then
    iSize = Range(Chr(64 + rCel.Column) & Rows.Count).End(xlUp).Row - rCel.Row
    For x = 1 To ThisWorkbook.Worksheets.Count
        If Sheets(x).Name = "OUT" Then iOK = 1
    Next
    If iOK = 0 Then Sheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = "OUT"
    With Worksheets("OUT")
        'construction de l'horaire
        .[A1] = "00:00"
        For x = 1 To 47
            .Range("A" & x + 1).Formula = "=A" & x & "+ 0.020835"
        Next
        tTab = .Range("A1:A48").Value
        .Cells.Delete
        'Préparartion de l'affichage
        .Range("E1:F1").Value = Array("Prév", "DMT")
        .Columns(4).NumberFormat = "hh:mm"
        .Columns(5).NumberFormat = "##0.0000"
        .Columns(6).NumberFormat = 0
        'Calcul et conversion
        iRowT = 2
        sData = Format(Range(Chr(64 + (rCel.Column - 1)) & rCel.Row + 1).Value, "hh:mm")
        iRow = (2 * CInt(Split(sData, ":")(0))) + CInt(Split(sData, ":")(1) / 30)
        For x = rCel.Column To rCel.End(xlToRight).Column Step 2
            .Range("C" & iRowT).Resize(UBound(tTab, 1), 1).Value = CDate(Cells(rCel.Row - 2, x))
            .Range("D" & iRowT).Resize(UBound(tTab, 1), 1).Value = tTab
            .Range("E" & iRowT + iRow).Resize(iSize, 2).Value = _
                Range(Chr(64 + x) & rCel.Row + 1).Resize(iSize, 2).Value
            iRowT = iRowT + 48
        Next
        .Activate
    End With
End If
On Error GoTo 0
'
End Sub


A+

10emiros.xlsm (34.69 Ko)

Bonjour à tous

Bonjour

Une solution PowerQuery intégré à ta version Excel

doit-je installer PowerQuery

Je pensais que c'était clair...

Tu peux accéder aux requêtes via Données, Afficher les requêtes, clic droit sur une requête, Modifier

La plage de valeur a été nommée Data et utilisée par la requête Data :
la première étape, Source, est faite en utilisant la barre de formule de PowerQuery avec la formule
= Excel.CurrentWorkbook(){[Name="Data"]}[Content]

les autres étapes, visibles dans le volet de droite de PowerQuery, sont faites via les onglets ou le clic droit : la petit rouage en bout de ligne permet d'avoir le détail

Dans la mesure où tu veux aussi les heures inexistantes (de 0 à 7:30 et de 22:00 à 23:30) cela oblige à créer une table de toutes les heures via la requête Heures, puis de croiser Heures et Datas pour récupérer les données de Data dans la requête Tout.

Regarde déjà les étapes des requêtes et si tu coinces, reposte

Bonjour à tous

Bonjour

Une solution PowerQuery intégré à ta version Excel

Je pensais que c'était clair...
doit-je installer PowerQuery

Tu peux accéder aux requêtes via Données, Afficher les requêtes, clic droit sur une requête, Modifier

La plage de valeur a été nommée Data et utilisée par la requête Data :
la première étape, Source, est faite en utilisant la barre de formule de PowerQuery avec la formule
= Excel.CurrentWorkbook(){[Name="Data"]}[Content]

les autres étapes, visibles dans le volet de droite de PowerQuery, sont faites via les onglets ou le clic droit : la petit rouage en bout de ligne permet d'avoir le détail

Dans la mesure où tu veux aussi les heures inexistantes (de 0 à 7:30 et de 22:00 à 23:30) cela oblige à créer une table de toutes les heures via la requête Heures, puis de croiser Heures et Datas pour récupérer les données de Data dans la requête Tout.

Regarde déjà les étapes des requêtes et si tu coinces, reposte

bonjour

curulis57 oui ca doit pas avoir ces résultat pour le 1er d’ailleurs y a pas des chiffres pour ces heures je ne voie pas d’où ça vient

pareil pour le 2 ça écris de nouveau DMT et prév

par contre c'est exactement ce que je demande si vous pouvez me résoudre cela SVP c'est géniale

78Chris je m'excuse mais je suis complètement perdu moi et POWERQUERY on est deux :) j'ai comme même tester mais je me suis complétement perdue

RE

VBA ou PowerQuery : tu ne connais a priori ni l'un ni l'autre

Si tu veux progresser il faut au moins commencer...

78chris effectivement et je veux appliquer ce que tu a dit :

Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.

c'est pour cela dans mon 1er message j'ai demandé a me montrer step by step comment faire :( et j'ai essayer j'ai pas réussi je vous promis je vais réessayer encore et encore jusqu’à la trouver avec powerquery

pour le VBA c'est du chinois pour moi au moins le Powerquery y a une interface a manipuler a chercher

Merci

voila je me suis bloqué a cette étape comment les rendre sur une seule ligne

capture d ecran 2020 08 09 17 11 56

Bonjour,

@78chris,

let
    List = List.Numbers(0,48,1/2/24),
    Table = Table.FromList(List, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    Header = Table.RenameColumns(Table,{{"Column1", "Heures"}}),
    Type = Table.TransformColumnTypes(Header,{{"Heures", type time}})
in
    Type

Bonjour à tous

Bonjour

Une solution PowerQuery intégré à ta version Excel

Je pensais que c'était clair...

doit-je installer PowerQuery

Tu peux accéder aux requêtes via Données, Afficher les requêtes, clic droit sur une requête, Modifier

La plage de valeur a été nommée Data et utilisée par la requête Data :
la première étape, Source, est faite en utilisant la barre de formule de PowerQuery avec la formule
= Excel.CurrentWorkbook(){[Name="Data"]}[Content]

les autres étapes, visibles dans le volet de droite de PowerQuery, sont faites via les onglets ou le clic droit : la petit rouage en bout de ligne permet d'avoir le détail

Dans la mesure où tu veux aussi les heures inexistantes (de 0 à 7:30 et de 22:00 à 23:30) cela oblige à créer une table de toutes les heures via la requête Heures, puis de croiser Heures et Datas pour récupérer les données de Data dans la requête Tout.

Regarde déjà les étapes des requêtes et si tu coinces, reposte

RE

La plage de valeur a été nommée Data et utilisée par la requête Data :
la première étape, Source, est faite en utilisant la barre de formule de PowerQuery avec la formule
= Excel.CurrentWorkbook(){[Name="Data"]}[Content]

De toute évidence tu n'as pas suivi ces 2 indications mais utilisé un lien externe et aucune de tes étapes ne correspond à ce que j'ai posté...

Comme je l'ai indiqué, si tu veux comprendre regarde chaque étape et si tu ne comprends pas on répond mais si tu pars sur une autre voie que celle indiquée...

Bonjour

@78chris,

let...

Je me disais qu'il y avait plus direct que ma jolie division, lol

Tu resteras mon maîtres es List...

oui malheureusement j'ai pas compris les etapes :(

capture d ecran 2020 08 09 19 26 04

quand j'essaie de reproduire cela voila ce que j'ai fait :

capture d ecran 2020 08 09 19 33 08 capture d ecran 2020 08 09 19 31 13

et je me bloque la

je m'excuse que je demande trop ou possible dire que je comprend pas mais bon je veux apprendre

RE

Tu ne lis pas avec attention mes explications : j'ai bien commencé par donner la première étape de la requête Data

Ton tableau source n’étant pas normalisé, je ne l'avais pas converti en tableau structuré mais j'avais nommé Data la plage B4:S34 puis avais ouvert PowerQuery et

la première étape, Source, est faite en utilisant la barre de formule de PowerQuery avec la formule

= Excel.CurrentWorkbook(){[Name="Data"]}[Content]

Toi, tu as a priori mis sous forme de tableau sans en-tête, ce qui facilite la première étape dans PowerQuery mais qui modifie ta source :

  • ajout d'une ligne d'en-tête (masquable),
  • défusion des lignes de dates,
  • et, plus gênant, logique différente selon les lignes ce qui est à proscrire dans un tableau structuré

A noter qu'un tableau structuré ne doit pas conserver son nom automatique mais être nommé avec un nom signifiant

Quoi qu'il en soit, si tu regardes mes étapes de Data qui est la requête initiale :

  • après source, il y a Type modifié et dans le détail de l'action, le typage de la seule 1ère colonne : on supprime le typage automatique et on type cette colonne par Accueil, Type de données, Heure
  • puis Table transposé : Transformer, Transposer
  • Rempli vers le bas : le détail montre que cela est fait sir les 2 premières colonne. On les sélectionne puis Transformer, Remplir, vers le bas
  • Transformer, utiliser la 1èrer ligne comme en-tête
  • sélectionner les 3 premières colonnes, clic droit, Dépivoter les autres colonnes
    dans la barre de formule, remplacer Attribut par Heure
  • sélectionner la 1ère colonne : Accueil, Type de données, Date
  • supprimer le colonne 2
  • sélectionner la colonne Heure : Accueil, Type de données, Heure
  • sélectionner la 3ème colonne : Transformer, Pivoter : Valeur, Ne pas agréger
  • renommer la 1ère colonne Date
  • trier par date et heure

Quand tu en seras là, où, en dehors des heures inexistantes, tu as déjà le résultat, on verra pour les 2 autres requêtes...

Salut Emiros,
Salut les as du Power Query,

il y avait des données que je n'avais pas vu sous le tableau principal ce qui faussait certains calculs.
Supprime ces données dans ce tableau et veille à supprimer toute donnée obsolète dans les prochains et tout ira très bien !


A+

9emiros.xlsm (28.36 Ko)
Rechercher des sujets similaires à "aide convertisseur tableux seule ligne"