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
qui peu faire cela ou possible avec des formules??
Merci d'avance le fichier en pièce jointe pour mieux comprendre
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+
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
Je pensais que c'était clair...Bonjour
Une solution PowerQuery intégré à ta version Excel
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'autreSi 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
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
TypeBonjour à 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...
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+



