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 SubMerci beaucoup, j'ai fait autrement pour finir