Base de donnée sur plusieurs ligne

Bonjour,

Tout d'abord je tiens a préciser que je suis débutant dans Excel et toute les fonctions ...

J'ai une feuille excel que je souhaite importer dans ma base de donnée mais le fichier excel est mal rangé voici ce que j'ai :

date nom0 prénom0 nomenfant1 prénomenfant2

date nom0 prénom0 nomenfant2 prénomenfant2

date nom1 prénom1 nomenfant1 prénomenfant1

date nom2 prénom2 nomenfant1 prénomenfant1

date nom2 prénom2 nomenfant2 prénomenfant2

date nom2 prénom2 nomenfant3 prénomenfant3

Voila ce que j'aimerais obtenir :

date nom0 prénom0 nomenfant1 prénomenfant1 nomenfant2 prénomenfant2

date nom1 prénom1 nomenfant1 prénomenfant1

date nom2 prénom2 nomenfant1 prénomenfant1 nomenfant2 prénomenfant2 nomenfant3 prénomenfant3

Mais le faire manuellement sur 1000 ligne

Pouvez vous m'aider en m'indiquant comment faire ?

Merci d'avance de votre aide.

Bonjour,

Mon avis est que contrairement à ce que tu penses ta base de donnée n'est pas forcément mal organisée : Tout dépend en fait de ce qui t'intéresse la famille, le parent ou l'enfant.

En fait toujours à mon avis l'organisation d'un système de base de données hiérarchisé de ce type est très complexe et n'est guère gérable par Excel.

C'est un peu comme si tu voulais gérer tout le personnel d'une multinationale en mettant sur une même ligne les noms, prénoms de chaque salarié...

Mébon je m'avance peut-être, attendons ce qu'en dise les grosses têtes...

A+

Bonjour,

Je suis du même avis que galopin21 !

Dans Access, on évite les doublons et on utilise des tables liées mais dans Excel, qui n'ai pas un gestionnaire de base de données, il est plus judicieux de monter la base comme tu l'as fait et non comme tu veux le faire car si par exemple tu as une personne qui a 7 enfants, il te faudra créer 14 champs (nom et prénoms pour chacun) mais que la majorité des autres personnes n'on que 1, 2 ou 3 enfants, tu auras des trous dans ta base et ça, il est vraiment préférable de l'éviter, ton exemple de ce que tu souhaites démontre bien ce que je dis.

Il vaut mieux avoir le nom du parent en double, triple, quadruple et même plus plutôt que des trous dans la base, un champ doit être renseigné, une base de données doit être toujours pleine.

Bien sûr, ceci n'est que mon avis et n'engage que moi !

Bonjour,

Merci pour vos réponses, le soucis est que la base est déjà créer et ne peut être changé.

De plus les personnes n'ont au maximum que 5 enfants (nombre limité dans notre usage pour des raisons particulière).

Du coup je suis obligé de changer la structure de l'excel pour pouvoir l'importé dans ma base de donnée.

Si quelqu'un sais comment faire ?

Merci encore a vous de vous intéressé a ma problématique.

Bonjour,

Donc, voici un code par rapport avec ton fichier exemple :

Sub Test()

    Dim Plage As Range
    Dim Cel As Range
    Dim Dico As Object
    Dim Cle As Variant
    Dim T
    Dim I As Integer
    Dim J As Long
    Dim Lig As Long

    Set Dico = CreateObject("Scripting.Dictionary")

    'défini la plage sur la colonne B (colonne des noms) de la feuille "Feuil1" à partir de B2 (B1 = entête)
    'la feuille "Feuil1" est celle où doivent être récupérées les valeurs pour être ensuite entrées dans la base
    With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    'récupère les valeurs dans un dictionnaire
    For Each Cel In Plage

        If Dico.exists(Cel.Value) = False Then

            Dico(Cel.Value) = Cel.Offset(, -1).Value _
                              & "_" & _
                              Cel.Value _
                              & "_" & _
                              Cel.Offset(, 1).Value _
                              & "_" & _
                              Cel.Offset(, 2).Value _
                              & "_" & _
                              Cel.Offset(, 3).Value

        Else

            Dico(Cel.Value) = Dico(Cel.Value) _
                              & "_" & _
                              Cel.Offset(, 2).Value _
                              & "_" & _
                              Cel.Offset(, 3).Value

        End If

    Next Cel

    'utilise la fonction Split() pour pouvoir dispatcher les valeurs dans les cellules
    'de la feuille "Feuil2" qui pour le test est la base de données donc, adapter le nom !
    With Worksheets("Feuil2"): Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1: End With 'sur colonne A

    For Each Cle In Dico.Keys

        T = Split(Dico(Cle), "_")

        For I = 0 To UBound(T): Worksheets("Feuil2").Cells(Lig, I + 1) = T(I): Next I
        Lig = Lig + 1

    Next Cle

End Sub

Merci beaucoup, j'ai fait autrement pour finir mais je le garde sous la main.

Rechercher des sujets similaires à "base donnee ligne"