Importe données d'un fichier Excel dans un autre fichier Excel
Bonjour,
Je dois réaliser une application VBA me permettant de lire les données d'un fichier excel pour les importer dans un autre fichier excel. J'ai réussis à réaliser cette application pour copie et coller les information d'un fichiers textes(CSV), mais cependant je n'arrive pas a réussir pour les fichiers excel.
Je vous joins mon fichier ainsi que mon code
Mon code est le suivant :
Dim ligne_debut As Integer:
Dim colonne_debut As Integer:
Dim ligne_fin As Integer:
Dim colonne_fin As Integer:
Dim ligne_enCours As Integer:
Dim colonne_enCours As Integer:
Private Sub exporter_Click()
Dim nom_fichier As String
ligne_debut = 2: 'signifie que l'importation des données se fera en cellule B2
colonne_debut = 2:
ligne_enCours = ligne_debut: colonne_enCours = colonne_debut
Cells.Clear
For i = 0 To liste_fichiers.ListCount - 1
lecture (liste_fichiers.List(i))
Next i
traitement
nom_fichier = Application.GetSaveAsFilename(fileFilter:="Text Files (*.txt),*.txt")
sortie.Value = nom_fichier
ecriture (nom_fichier)
End Sub
Private Sub fermer_Click()
End Sub
Private Sub importer_Click()
Dim fichier_choisi As String
fichier_choisi = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Selectionner un fichier CSV")
If (LCase(fichier_choisi) <> "faux" And fichier_choisi <> "0") Then
liste_fichiers.AddItem (fichier_choisi)
End If
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub lecture(fichier As String)
Dim depart As Integer, position As Integer
Dim texte As String, tampon As String
Open fichier For Input As #1
Do While Not EOF(1)
Line Input #1, texte
depart = 1: position = 1
Do While (position <> 0)
position = InStr(depart, texte, ";", 1)
If position = 0 Then
tampon = Mid(texte, depart)
Sheets("import").Cells(ligne_enCours, colonne_enCours).Value = tampon
Exit Do
Else
tampon = Mid(texte, depart, position - depart)
End If
Sheets("import").Cells(ligne_enCours, colonne_enCours).Value = tampon
depart = position + 1
colonne_enCours = colonne_enCours + 1
Loop
colonne_enCours = colonne_debut
ligne_enCours = ligne_enCours + 1
Loop
Close #1
End Sub
Merci de votre aide,
CR
Bonjour
De facon plus claire, mon projet est le suivant
Mise en contexte: Je suis chargé de réalisé un fichier excel permettant de récupérer les données d'un autre fichier excel, les collés et faire plusieurs page de calcul via ces données.
Problématique: J'aimerais faciliter l'importation de cette liste d'outillage par un bouton "sélectionner" qui ouvre une fenêtre permettant de sélectionner le fichier afin d'avoir son chemin, j'ai suivi qui permettait de le faire avec un fichier .txt ou .csv, j'aimerais maintenant l'adapter à un fichier .xlsx et ensuite, une fois selectionner, grâce à un bouton importer, copier coller ce fichier contenant uniquement une feuille, dans la feuille "Liste outillage" du fichier.
J'espère que la problématique est assez claire.
Bonjour,
Voici un essai à tester avec un code standard trouvé sur internet, qui a priori, devrait répondre à votre besoin :
Sub Utilisation_FileDialog_Ouvrir()
Dim objOuvrir As FileDialog
Dim objFichiers As FileDialogSelectedItems
Dim Wb As Workbook
Set objOuvrir = Application.FileDialog(msoFileDialogOpen)
With objOuvrir 'Affiche la fenêtre "Ouvrir"
.Filters.Clear 'Efface les filtres existants.
.Filters.Add "Classeurs Excel", "*.xls; *.xlsx; *.xlsm" 'Définit une liste de filtres pour le champ "Type de fichiers".
.Show
Set objFichiers = .SelectedItems 'Définit les fichiers sélectionnés
End With
If not objFichiers.Count = 1 Then Exit Sub 'On sort si aucun fichier n'a été sélectionné
Application.ScreenUpdating = False
Set Wb = Workbooks.Open(objFichiers(1))
'traitement
Wb.Close False
Application.ScreenUpdating = True
End SubSinon, il suffisait de modifier votre ligne comme ceci :
Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx",,"Sélectionner un fichier Excel")Cdlt,
Bonjour,
Ok merci j'ai reussis.
Comment choisir quel feuille du fichier copié maintenant ? Par exemple je veux copié la feuille 3 ?
Merci de votre aide
Copier, c'est-à-dire ? en créant un nouvel onglet sur le classeur destinataire ?
Dim wbsource as workbook, wbdest as workbook '<<<<MODIF A FAIRE
'....code
Set wbdest = thisworkbook 'classeur exécutant où sera collée la feuille '<<< ajouter
Set wbsource = Workbooks.Open(objFichiers(1)) '<<< MODIF
wbsource.sheets(3).copy after:=wbdest.worksheets(wbdest.worksheets.count) 'copie feuille 3 source à la fin du classeur dest
wbsource.Close FalseBonjour,
Je me suis mal exprimé pardon. En gros je recupère les infos de la feuille 1 par defaut, comment récupérer celle de la feuille 3 par exemple
Cdlt
Ici, avec mon dernier code, vous récupérez la feuille à la position 3 (entière) du fichier sélectionné sur la boite de dialogue sur votre fichier courant (elle se place en dernière position).
Bonjour,
Je ne veux pas la récupérer, je veux copier son contenu pour la coller dans l'onglet de mon choix dans l'autre fichier,
Cdlt
Et bien, expliquez moi précisément votre besoin, en détaillant les éléments significatifs (index de la feuille dont le contenu est à copier, nom de la feuille de destination, éventuellement plage de destination), comme ça on pourra tomber juste sans avoir à réévaluer le besoin.
Bonjour,
Excusez moi si je ne suis pas claire, je reprend depuis le début.
Disons que le document Excel dont je veux importer certaines informations est composé de 3 feuilles(le fichier s'appelle jules). Celui dont je veux coller ces informations est composé de 4 feuilles( le fichier s'appelle Paul)
Mon code actuel me permet de récupérer les informations de la première feuille du fichier jules pour les coller dans la première feuille du fichier Paul. Cela est fonctionnel.
Maintenant je veux pouvoir copié les informations de la feuilles 3(appelé Villes) du fichier Jules pour la coller dans la feuille 2(appelé informations) du fichier Paul.
Je pense avoir été plus claire,
Mon code est actuellement le suivant :
Sub Rectangleàcoinsarrondis1_Cliquer()
On Error GoTo Fin
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
'déclarer les variable
Dim wb As Workbook
Dim sh As Worksheet
Dim n As Long
Dim I As Long
Dim j As Long
Dim dsh As Worksheet
Dim arr
'Affecter une valeur à la variable
Set sh = ThisWorkbook.Sheets("Armoire")
'Déterminer la dernire ligne vide dans le fichier de destination (la collonne R)
ligne_collage = sh.Range("A" & Application.Rows.Count).End(xlUp).Row + 1
'déclarer les variable
'application pour ouvrir les fichier
arr = Application.GetOpenFilename(filefilter:="excel files, *.xls*", Title:="open excel files", MultiSelect:=True)
'effacer le contenu des collonne
sh.Range("A3:BZ5000").ClearContents
For I = LBound(arr) To UBound(arr)
ligne_collage = sh.Range("A" & Application.Rows.Count).End(xlUp).Row + 2
'Affecter une valeur- le classeur source
Set wb = Workbooks.Open(arr(I))
'la feuille dans le classeur source
Set dsh = wb.Sheets(1)
'nombre de ligne à copier dans le tableau dans la feuille source
nbl_copier = dsh.Range("B" & Application.Rows.Count).End(xlUp).Row - 2
'copier et coller le tableau dans la feuille source
dsh.Range("A3:A" & nbl_copier + 2).Copy sh.Range("A" & ligne_collage)
dsh.Range("B3:B" & nbl_copier + 2).Copy sh.Range("B" & ligne_collage)
dsh.Range("C3:C" & nbl_copier + 2).Copy sh.Range("C" & ligne_collage)
dsh.Range("D3:D" & nbl_copier + 2).Copy sh.Range("D" & ligne_collage)
dsh.Range("E3:E" & nbl_copier + 2).Copy sh.Range("E" & ligne_collage)
dsh.Range("F3:F" & nbl_copier + 2).Copy sh.Range("F" & ligne_collage)
dsh.Range("G3:G" & nbl_copier + 2).Copy sh.Range("G" & ligne_collage)
dsh.Range("H3:H" & nbl_copier + 2).Copy sh.Range("H" & ligne_collage)
dsh.Range("I3:I" & nbl_copier + 2).Copy sh.Range("I" & ligne_collage)
dsh.Range("J3:J" & nbl_copier + 2).Copy sh.Range("J" & ligne_collage)
dsh.Range("K3:K" & nbl_copier + 2).Copy sh.Range("K" & ligne_collage)
dsh.Range("L3:L" & nbl_copier + 2).Copy sh.Range("L" & ligne_collage)
dsh.Range("M3:M" & nbl_copier + 2).Copy sh.Range("M" & ligne_collage)
dsh.Range("N3:N" & nbl_copier + 2).Copy sh.Range("N" & ligne_collage)
dsh.Range("O3:O" & nbl_copier + 2).Copy sh.Range("O" & ligne_collage)
dsh.Range("P3:P" & nbl_copier + 2).Copy sh.Range("P" & ligne_collage)
dsh.Range("Q3:Q" & nbl_copier + 2).Copy sh.Range("Q" & ligne_collage)
dsh.Range("R3:R" & nbl_copier + 2).Copy sh.Range("R" & ligne_collage)
dsh.Range("S3:S" & nbl_copier + 2).Copy sh.Range("S" & ligne_collage)
dsh.Range("T3:T" & nbl_copier + 2).Copy sh.Range("T" & ligne_collage)
dsh.Range("U3:U" & nbl_copier + 2).Copy sh.Range("U" & ligne_collage)
dsh.Range("V3:V" & nbl_copier + 2).Copy sh.Range("V" & ligne_collage)
dsh.Range("W3:W" & nbl_copier + 2).Copy sh.Range("W" & ligne_collage)
dsh.Range("X3:X" & nbl_copier + 2).Copy sh.Range("X" & ligne_collage)
dsh.Range("Y3:Y" & nbl_copier + 2).Copy sh.Range("Y" & ligne_collage)
dsh.Range("Z3:Z" & nbl_copier + 2).Copy sh.Range("Z" & ligne_collage)
dsh.Range("AA3:AQ" & nbl_copier + 2).Copy sh.Range("AA" & ligne_collage)
dsh.Range("AB3:AB" & nbl_copier + 2).Copy sh.Range("AB" & ligne_collage)
dsh.Range("AC3:AC" & nbl_copier + 2).Copy sh.Range("AC" & ligne_collage)
dsh.Range("AD3:AD" & nbl_copier + 2).Copy sh.Range("AD" & ligne_collage)
dsh.Range("AE3:AE" & nbl_copier + 2).Copy sh.Range("AE" & ligne_collage)
dsh.Range("AF3:AF" & nbl_copier + 2).Copy sh.Range("AF" & ligne_collage)
dsh.Range("AG3:AG" & nbl_copier + 2).Copy sh.Range("AG" & ligne_collage)
dsh.Range("AH3:AH" & nbl_copier + 2).Copy sh.Range("AH" & ligne_collage)
dsh.Range("AI3:AI" & nbl_copier + 2).Copy sh.Range("AI" & ligne_collage)
dsh.Range("AJ3:AJ" & nbl_copier + 2).Copy sh.Range("AJ" & ligne_collage)
dsh.Range("AK3:AK" & nbl_copier + 2).Copy sh.Range("AK" & ligne_collage)
dsh.Range("AL3:AL" & nbl_copier + 2).Copy sh.Range("AL" & ligne_collage)
dsh.Range("AM3:AM" & nbl_copier + 2).Copy sh.Range("AM" & ligne_collage)
dsh.Range("AN3:AN" & nbl_copier + 2).Copy sh.Range("AN" & ligne_collage)
dsh.Range("AO3:AO" & nbl_copier + 2).Copy sh.Range("AO" & ligne_collage)
dsh.Range("AP3:AP" & nbl_copier + 2).Copy sh.Range("AP" & ligne_collage)
dsh.Range("AQ3:AQ" & nbl_copier + 2).Copy sh.Range("AQ" & ligne_collage)
dsh.Range("AR3:AR" & nbl_copier + 2).Copy sh.Range("AR" & ligne_collage)
dsh.Range("AS3:AS" & nbl_copier + 2).Copy sh.Range("AS" & ligne_collage)
dsh.Range("AT3:AT" & nbl_copier + 2).Copy sh.Range("AT" & ligne_collage)
dsh.Range("AU3:AU" & nbl_copier + 2).Copy sh.Range("AU" & ligne_collage)
dsh.Range("AV3:AV" & nbl_copier + 2).Copy sh.Range("AV" & ligne_collage)
dsh.Range("AW3:AW" & nbl_copier + 2).Copy sh.Range("AW" & ligne_collage)
dsh.Range("AX3:AX" & nbl_copier + 2).Copy sh.Range("AX" & ligne_collage)
dsh.Range("AY3:AY" & nbl_copier + 2).Copy sh.Range("AY" & ligne_collage)
dsh.Range("AZ3:AZ" & nbl_copier + 2).Copy sh.Range("AZ" & ligne_collage)
dsh.Range("BA3:BQ" & nbl_copier + 2).Copy sh.Range("BA" & ligne_collage)
dsh.Range("BB3:BB" & nbl_copier + 2).Copy sh.Range("BB" & ligne_collage)
dsh.Range("BC3:BC" & nbl_copier + 2).Copy sh.Range("BC" & ligne_collage)
dsh.Range("BD3:BD" & nbl_copier + 2).Copy sh.Range("BD" & ligne_collage)
dsh.Range("BE3:BE" & nbl_copier + 2).Copy sh.Range("BE" & ligne_collage)
dsh.Range("BF3:BF" & nbl_copier + 2).Copy sh.Range("BF" & ligne_collage)
dsh.Range("BG3:BG" & nbl_copier + 2).Copy sh.Range("BG" & ligne_collage)
dsh.Range("BH3:BH" & nbl_copier + 2).Copy sh.Range("BH" & ligne_collage)
dsh.Range("BI3:BI" & nbl_copier + 2).Copy sh.Range("BI" & ligne_collage)
dsh.Range("BJ3:BJ" & nbl_copier + 2).Copy sh.Range("BJ" & ligne_collage)
dsh.Range("BK3:BK" & nbl_copier + 2).Copy sh.Range("BK" & ligne_collage)
dsh.Range("BL3:BL" & nbl_copier + 2).Copy sh.Range("BL" & ligne_collage)
dsh.Range("BM3:BM" & nbl_copier + 2).Copy sh.Range("BM" & ligne_collage)
dsh.Range("BN3:BN" & nbl_copier + 2).Copy sh.Range("BN" & ligne_collage)
dsh.Range("BO3:BO" & nbl_copier + 2).Copy sh.Range("BO" & ligne_collage)
dsh.Range("BP3:BP" & nbl_copier + 2).Copy sh.Range("BP" & ligne_collage)
dsh.Range("BQ3:BQ" & nbl_copier + 2).Copy sh.Range("BQ" & ligne_collage)
dsh.Range("BR3:BR" & nbl_copier + 2).Copy sh.Range("BR" & ligne_collage)
dsh.Range("BS3:BS" & nbl_copier + 2).Copy sh.Range("BS" & ligne_collage)
dsh.Range("BT3:BT" & nbl_copier + 2).Copy sh.Range("BT" & ligne_collage)
wb.Close False
Next I
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
Fin:
End SubExcusez moi pour les messages précedent,
Cdlt
Pas la peine de s'excuser autant, c'est pas grave
Alors c'est clair mais il demeure juste la question de la référence de la plage à copier et celle de la plage à recevoir. Alors dans le doute, je vous propose un essai assez générique que vous pourrez adapter selon votre besoin précis :
Sub Utilisation_FileDialog_Ouvrir()
Dim objOuvrir As FileDialog
Dim objFichiers As FileDialogSelectedItems
Dim wbsource as workbook, wbdest as workbook
Set objOuvrir = Application.FileDialog(msoFileDialogOpen)
With objOuvrir 'Affiche la fenêtre "Ouvrir"
.Filters.Clear 'Efface les filtres existants.
.Filters.Add "Classeurs Excel", "*.xls; *.xlsx; *.xlsm" 'Définit une liste de filtres pour le champ "Type de fichiers".
.Show
Set objFichiers = .SelectedItems 'Définit les fichiers sélectionnés
End With
If not objFichiers.Count = 1 Then Exit Sub 'On sort si aucun fichier n'a été sélectionné
Application.ScreenUpdating = False
Set wbdest = thisworkbook 'classeur exécutant où sera collée la feuille
Set wbsource = Workbooks.Open(objFichiers(1))
wbsource.sheets("Villes").usedrange.copy destination:=wbdest.Sheets("informations").range("A1") '<<<<ADAPTER
wbsource.Close False
Application.ScreenUpdating = True
End SubC'est un début...
Et je retouche un petit peu votre autre macro pour l'alléger :
Sub Rectangleàcoinsarrondis1_Cliquer()
Dim wb As Workbook
Dim sh As Worksheet, dsh As Worksheet
Dim n&, I&, j&
Dim arr
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'application pour ouvrir les fichier
arr = Application.GetOpenFilename(filefilter:="excel files, *.xls*", Title:="open excel files", MultiSelect:=True)
if typename(arr) = "Boolean" then exit sub
'On Error GoTo Fin
Set sh = ThisWorkbook.Sheets("Armoire") 'Affecter une valeur à la variable
With sh
ligne_collage = .Range("A" & .Rows.Count).End(xlUp).Row + 1 '<<<< ???? (colonne R ?) premiere non vide en A
.Range("A3:BZ" & .rows.count).ClearContents 'effacer le contenu des colonnes
For I = LBound(arr) To UBound(arr)
ligne_collage = .Range("A" & .Rows.Count).End(xlUp).Row + 2
Set wb = Workbooks.Open(arr(I)) 'Affecter une valeur- le classeur source
Set dsh = wb.Sheets(1) 'la feuille dans le classeur source
nbl_copier = dsh.Range("B" & dsh.Rows.Count).End(xlUp).Row 'derniere ligne tableau dans la feuille source
dsh.Range("A3:BT" & nbl_copier).Copy .Range("A" & ligne_collage) 'copier et coller le tableau dans la feuille source
wb.Close False
Set dsh = Nothing
Set wb = Nothing
Next I
End with
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Fin:
End SubMerci pour votre retouche de maccro, la votre est bien plus maitrisé que la mienne ahah..
Concernant l'autre partie, il me reste juste a définir la plage de reception des données?
Merci de votre aide
Oui, enfin les 2 plages. Si ce n'est pas toute la zone utilisée que vous voulez copier, alors il faudra remplacer usedrange par la range à cibler. Et pour la plage de destination, il faut juste adapter. En vous inspirant de votre première macro, ça devrait aller je pense.
Bonjour,
Merci pour votre aide,
J'ai ajouté votre code dans le même sub que l'autre. Du coup quand je lance en cliquant sur mon bouton le volée pour choisir mon fichier va s'ouvrir deux fois. Comment l'adapter facilement ? les codes etant différent il faut tout changer !
Autre chose, le programme fonctionne mais ne copie que jusqu'a la colone AK alors qu'elle va jusqu'a BZ. J'ai pourtant completer le range comme ceci Range("A3:BZ5000"). Merci de votre aide
Bonjour,
Oui, c'est normal parce que votre problème initial concernait la procédure avec l'onglet Villes. J'ai donc considéré qu'il s'agissait de 2 procédures distinctes.
La première procédure se comporte indifféremment avec les fichiers sélectionnés et va prendre les données de la feuille 1. La seconde est plus précise car elle prend les données de la feuille Villes (n°3). Il y a plusieurs options :
AVEC UNE SEULE BOITE DE DIALOGUE (sans sélectionner le fichier Jules) :
- si vous connaissez le nom du fichier (Jules dans votre exemple) et qu'il ne changera pas, alors on peut se passer de boite de dialogue et importer les données directement en ciblant son chemin (ce serait l'idéal),
- s'il s'agit d'un fichier émanant d'un modèle de fichiers périodiques et évolutifs, alors c'est plus compliqué mais toujours possible si ces fichiers ont un modèle commun (une partie du chemin et une partie du nom - ex : "C:\2019\Jules 2019.xlsx", "C:\2020\Jules 2020.xlsx").[s=co-95b3d7][s=co-4f81bd][/s][/s]
AVEC UNE SEULE BOITE DE DIALOGUE (en sélectionnant le fichier Jules) :
- sinon, s'il n'y a pas de dénominateur commun mais que vos fichiers de la première procédure ne contiennent qu'un unique onglet, on peut dire que si nombre d'onglets > 1 alors on prend les données de l'onglet Villes.
AVEC 2 BOITES DE DIALOGUE :
- sinon, si on arrive pas à trouver une solution parmi les précédentes, je peux réorganiser le code mais je pense qu'il faudra faire avec 2 boites de dialogue...
Pour la copie, je ne peux pas m'avancer pour l'instant car je ne sais pas comment vous avez modifié le code. Dans la nouvelle procédure, on avait :
wbsource.sheets("Villes").usedrange.copy destination:=wbdest.Sheets("informations").range("A1") '<<<<ADAPTERJ'avais prévu de copier la zone utilisée (et de coller en A1 de la destination). Si la zone utilisée s'arrête en AK, c'est normal. Si vous voulez aller jusqu'à BZ, il faut mettre (c'est un exemple car je ne sais pas quelles lignes vous prendrez) :
wbsource.sheets("Villes").range("A1:BZ5000").copy destination:=wbdest.Sheets("informations").range("A1") '<<<<ADAPTERDans votre ancienne procédure :
dsh.Range("A3:BT" & nbl_copier).Copy .Range("A" & ligne_collage) 'copier et coller le tableau dans la feuille J'ai juste compacté les quelques 60 lignes de code répétant l'opération de copier/coller pour chaque colonne en une seule. Je ne crois pas avoir modifié quoi que ce soit.
Mais si vous voulez prendre jusqu'à BZ, alors modifiez ainsi :
dsh.Range("A3:BZ" & nbl_copier).Copy .Range("A" & ligne_collage) 'copier et coller le tableau dans la feuille Mais il n'y a aucune raison de se retrouver sans les colonnes AL à BT, à moins que vous ayez changé quelque chose.
Bonjour,
A l"aide de votre aide j'ai réalisé le code suivant qui me semble fonctionnel ! Qu'en pensez vous ?
Merci encore,
CR
Sub Rectangleàcoinsarrondis1_Cliquer()
Dim objOuvrir As FileDialog
Dim objFichiers As FileDialogSelectedItems
Dim wbsource As Workbook, wbdest As Workbook
Set objOuvrir = Application.FileDialog(msoFileDialogOpen)
With objOuvrir 'Affiche la fenêtre "Ouvrir"
.Filters.Clear 'Efface les filtres existants.
.Filters.Add "Classeurs Excel", "*.xls; *.xlsx; *.xlsm" 'Définit une liste de filtres pour le champ "Type de fichiers".
.Show
Set objFichiers = .SelectedItems 'Définit les fichiers sélectionnés
End With
Worksheets("Armoires").Range("A2:BZ5000").ClearContents
Worksheets("Supports + Foyers").Range("A2:BZ5000").ClearContents
If Not objFichiers.Count = 1 Then Exit Sub 'On sort si aucun fichier n'a été sélectionné
Application.ScreenUpdating = False
Set wbdest = ThisWorkbook 'classeur exécutant où sera collée la feuille
Set wbsource = Workbooks.Open(objFichiers(1))
wbsource.Sheets("Armoire").UsedRange.Copy Destination:=wbdest.Sheets("Armoires").Range("A1") '<<<<ADAPTER
wbsource.Sheets("Support + Foyer").UsedRange.Copy Destination:=wbdest.Sheets("Supports + Foyers").Range("A1")
wbsource.Close False
Application.ScreenUpdating = True
Fin:
End SubBonjour,
Oui, sur le papier, ça parait pas mal. Après, je n'ai pas vu les fichiers mais si ça fonctionne pour l'instant, c'est très bien, vous pourrez toujours apporter des améliorations quand vos besoins évolueront et se préciseront.