Convertir tableau en BDD | une ligne par info

Bonjour,

Je me suis lancé dans une remise en forme d'un fichier.

J'ai commencé à la main mais comme j'ai un semestre à refaire j'ai pensé qu'une macro ne serait peut-être pas une mauvaise idée.

Je manque d'automatisme pour rédiger ce que j'aimerai faire alors je m'en remet à vous.

J'aimerai créer une ligne avec les infos date|nom|type linge|poidsec.

La macro devrait descendre la colonne date puis visiter chaque ligne du tableau. Selon le nombre de cellules avec une valeur sur la ligne, j'aimerai créer autant de ligne dans la BDD, mettre la date et reprendre les infos sur la ligne 1 puis sur la ligne 2 du tableau afin terminer en reprenant la valeur de cellule non vide.

J'ai tout noté dans le fichier avec un exemple.

Merci d'avance pour votre temps.

Leakim

Bonjour,

Sorry pas bien vu

A+

Bonjour Leakim,

voici

j'ai créé un onglet BDD

lance la macro BDD() à partir de l'onglet principal

Je pense qu'il doit y a voir une procédure avec PowerQuery ... mais là dessus je ne suis pas (encore) expert !

Bonjour à tous,

Une autre proposition à étudier.

Prévu pour consolider x feuilles du même format.

Il n'y a plus qu'à finaliser avec un TCD.

Cdlt.

Option Explicit

Public Sub Create_table()
Dim wb As Workbook
Dim ws As Worksheet, wsTable As Worksheet
Dim lo As ListObject
Dim tbl, Arr()
Dim rCell As Range
Dim I As Long, J As Long, k As Long

    Set wb = ActiveWorkbook
    Set wsTable = wb.Worksheets("Synthèse")
    Set lo = wsTable.ListObjects(1)
    With lo
        If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
        Set rCell = .InsertRowRange.Cells(1)
    End With

    For Each ws In wb.Worksheets
        If ws.Name <> wsTable.Name Then
            tbl = ws.Cells(1).CurrentRegion
            For I = 3 To UBound(tbl)
                For J = 2 To UBound(tbl, 2)
                    If tbl(I, J) <> "" Then
                        ReDim Preserve Arr(5, k + 1)
                        Arr(0, k) = CLng(tbl(I, 1))
                        Arr(1, k) = vbNullString
                        Arr(2, k) = tbl(1, J)
                        Arr(3, k) = tbl(2, J)
                        Arr(4, k) = tbl(I, J)
                        k = k + 1
                    End If
                Next J
            Next I
        End If
    Next ws
    'restitution des données
    rCell.Resize(UBound(Arr, 2), 5).Value = Application.Transpose(Arr)

End Sub

Bonjour,

Merci pour vos réponses aussi rapide !

La macro de steelson est fonctionnelle et celle de jean-Eric aussi, même si j'ai pour l'une deux fois la ligne 1 et pour l'autre un format date inversé.

Je vais m'en sortir pas de souci. Merci à vous pour cette rapidité d'exécution !

Respectueusement,

Je peux pas validé vos deux propositions donc honneur au plus rapide mais cela en vaut bien deux !!

Leakim

Re,

Merci de ce retour,

J'ai bien noté que tu préfèrais les propositions de Steelson.

A bientôt.

Cdlt.

Yes ... mais Jean-Eric, j'attendais que quelqu'un propose du PowerQuery.

J'avoue que ton code est plus élégant !

Re,

@ Steelson,

Ta solution en Kiri en pièce jointe.

C''est bon pour les neurones.

Cdlt.

bonjour à tous

avec Excel tout seul (voir sa fonction Power Query)

pas une ligne de code, pas une formule

une unique instruction de dépivotage

par contre, j'ai arrangé la ligne des titres qui était sur 2 lignes : ne JAMAIS mettre 2 lignes de titres

quel est le BUT de ce tableau remanié ?

il est possible qu'on puisse s'en passer

quel est le BUT de ce tableau remanié ?

il est possible qu'on puisse s'en passer

Oui c'est exactement pour s'en passer que je demande une remise en forme en BDD.

J'ai changé de travail, il y a peu, et je reprends la forêt de fichiers excel qui sont pas utilisable en l'état. Il y a encore beaucoup d'entreprise, association et autre structure qui ne sont pas outillées sans logiciel et qui doivent faire avec excel, alors cool ! . Mais quand Excel est utilisé pour faire des tableaux texte que Word pourrait gérer... On pars de loin pour faire des graphiques. Si vous voyez ce que je veux dire

Alors, Jean-Eric à bien compris

[...] Il n'y a plus qu'à finaliser avec un TCD. [...]

Désormais, j'ai reconstitué la BDD depuis le début de l'année et maintenant j'ai mis en place un USF pour renseigner les données et que je puisse les exploiter.

Merci messieurs pour toutes vos compétences.

A bientôt,

Leakim

Ps

Re,

Merci de ce retour,

J'ai bien noté que tu préférais les propositions de Steelson.

A bientôt.

Cdlt.

Pas de préférence seulement une limitation du forum mais tout est bon Merci pur avoir remis la date dans l'ordre dans ta seconde proposition

Jmd: J'ai bien compris la mise en forme en ligne unique, amis je me demande comment tu obtiens la BDD par la suite. c'est Power query ?

D’ailleurs je pourrais aussi ajouter Jmd et galopin à toute cette réussite !

Re,

@ Leakim,

Ma 2e. proposition répond à la question de Steelson qui souhaitait voir une solution Power Query (respectant le format de tes données ).

Je n'ai pas touché à la proposition VBA initiale (je me suis d'ailleurs étonné de ce souci de date, bon, mais !...)

C'est peut être dû au fait que j'ai modifié mes paramètres régionaux pour les date aaaa-mm-jj ald jj/mm/aaaa) ???

A bientôt sur le forum.

Cdlt.

Bonjour,

@ Steelson,

Tu as demandé une proposition Kiri. Je me suis exécuté !...

Qu'en penses-tu ? Compréhensible ?

Cdlt.

Merci Jean-Eric

C'est costaud pour moi ...

j'ai toujours des difficultés de compréhension avec les ReDim Preserve Array, les Resize et Application.Transpose ...

pour le côté tableau, nickel ... le problème ici ce sont les 2 premières lignes ...

en réalité, la ligne 2 devrait être les en-têtes de colonne et la ligne 3 un tableau à part de valeurs fonction de la ligne 2, c'est cela qui fait défaut à la demande initiale

Re,

Rechercher des sujets similaires à "convertir tableau bdd ligne info"