Copier un nombre très important de lignes
Bonjour à tous,
Je suis intervenu auprès d'un demandeur de notre Forum pour essayer de l'aider. Pas de problèmes c'est fait mais je me pose une grosse question :
Il désire, après triage parmi 7200 lignes d'une feuille, copier dans une autre feuille toutes les lignes dans lesquelles apparait le nom de la feuille, et ceci est à réaliser sur une bonne dizaine de feuilles différentes
Je lui ai proposé ceci :
MaFeuille = ActiveSheet.Name
der = Sheets("Base de données").Cells(Rows.Count, 1).End(xlUp).Row ' der vaut 7200
rg = 1
For i = 1 To der
Sheets("Base de données").Activate
If Sheets("Base de données").Range("B" & i).Value = MaFeuille Then ' c'est dans les cellules de la colonne B que l'on trouve les noms des feuilles
Sheets("Base de données").Range("A" & i & ":O" & i).Copy
Sheets(MaFeuille).Activate
Sheets(MaFeuille).Range("A" & rg).Select
rg = rg + 1
ActiveSheet.Paste
End If
Next iet je réponds bien à sa question si ce n'est, et je m'en doutais, que ça met un temps fou pour se réaliser. Même à un moment on me signale qu'il y a saturation.
Pourriez vous me proposer une solution plus agréable
Bonsoir,
l'idée est de passer par VBA car en effet chaque accès feuille ralenti énormément le déroulé du code VBA, c'est ce que fait le fichier joint :
On demande la recherche de la valeur d_10 pour l'exemple, le programme "sort" toutes les lignes comportant cette données.
Tout est fait en mémoire vu que le tableau de données est injecté dans la variable TabDonnées, les résultats des recherches se trouve dans la variable TabRésultat.
Ici le résultat est mis dans une ListeBox, mais on peut très bien le mettre sur une feuille avec Transpose.
N'hésitez pas si besoin d'aide, mais peut-être qu'une solution PowerQuerry....
@ bientôt
LouReeD
Bonsoir LouReed,
En effet chaque accès à une feuille ralenti le déroulé, je m'en étais rendu compte et c'est bien pour cela que j'ai soulevé le problème sur le Forum
Ce que tu me proposes me parait intéressant, je vais donc approfondir ta proposition
Quant à powerQuerry, je ne connais pas, la aussi il faudra m'y pencher
merci pour ta réactivité et tes conseils
Au plaisir sur le Forum
Bonsoir,
voici le code adapter avec une shape comme bouton sur la feuille Données :
Sub CréerFeuilles()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = flase
On Error GoTo fin
Dim Der, I As Integer
Dim Nom_Feuille As String
Dim TabRésultat(), TabEntête()
' on récupère la dernière ligne
Der = Sheets("Base de données").Cells(Rows.Count, 1).End(xlUp).Row
' on récupère les données du tableau de la feuille données
TabDonnées = Range("A1:O" & Der)
TabEntête = Range("A1:O1")
For I = 2 To Der
Nom_Feuille = TabDonnées(I, 2)
' si la valeur de la donnée est différente de rien
If Nom_Feuille <> "" Then
' Ajouter la feuille seulement si elle n'existe pas déjà et que son nom contient plus de 0 caractères
If Feuille_Existe(Nom_Feuille) = False Then
Worksheets.Add(After:=Sheets(Sheets.Count)).Name = Nom_Feuille
' valeur recherchée
Recherche = TabDonnées(I, 2)
' si ligne = -1 alors c'est ColExtract qui est pris en compte, sinon c'est ligne
' si ligne = 0 alors extraction de toutes les colonnes sans mélange
Ligne = 0
' ici facultatif vu que l'on extrait toutes les colonnes
' mais on pourrait en profiter pour modifier l'ordre de ces colonnes
ColExtract = Array(1, 5, 11, 8)
' on remplie le tableau résultat avec la fonction LRD
TabRésultat = LRD(Recherche, 2, TabDonnées, ColExtract, Ligne)
ActiveSheet.Range("A2").Resize(UBound(TabRésultat, 1), 15) = Application.Transpose(Application.Transpose(TabRésultat))
' on copie la ligne d'entête
ActiveSheet.Range("A1").Resize(, 15) = TabEntête
End If
End If
Next I
fin:
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
Function Feuille_Existe(Nom_Feuille As String) As Boolean
' test feuille existante en gestion d'erreur
' on essaie de récupérer la valeur de la cellule A1
' si erreur feuille inconnue
' sinon feuille existante
Dim Test As Variant
' on met la fonction à VRAI
Feuille_Existe = True
' gestion des erreurs
On Error Resume Next
' on récupère la valeur en cellule A1 de la feuille testée
Test = Sheets(Nom_Feuille).Range("A1")
' s'il y a une erreur la feuille n'existe pas
If Err > 0 Then Feuille_Existe = False
End Function
Function LRD(Recherche, ColRecherche, TabDonnées, ColExtractArr, Ligne)
Dim TabRésultat(), Cpt, I, J
Cpt = 0
' Scan pour récupérer les données en fonction d'un test (ou plus) sur une ou plusieurs colonnes
For I = 2 To UBound(TabDonnées)
' la condition recherchée
If TabDonnées(I, 2) = Recherche Then
' on agrandi le tableau résultat
ReDim Preserve TabRésultat(Cpt)
' on y met les résultats trouvés
TabRésultat(Cpt) = WorksheetFunction.Index(TabDonnées, I, IIf(Ligne = -1, ColExtractArr, Ligne))
Cpt = Cpt + 1
End If
Next I
LRD = TabRésultat
End FunctionPas testé...
@ bientôt
LouReeD
bonjour le fil, salut LouReeD,
je pense que votre macro est encore lent, mais pourquoi pas utiliser la méthode oldschool avec filtrer la source, copier et coller le résultat vers une nouvelle feuille ?
Je vous laisse le soin de le faire !
Moi je suis bloqué en 2014 avec mes pauvres connaissances !
Il est vrai qu'un filtre copier/coller et hop !
Mais je ne maitrise pas les codes de filtrage alors j'attends de voir et on verra à l'avenir si j'arrive à m'en souvenir !
Mais surtout cette méthode à l'origine était faite pour extraire qu'une partie des données de la ligne qui "match" avec une donnée cherché dans n'importe quelle colonne, tout en ayant la possibilité de mélanger les colonnes dans le tableau TabRésultat.
Mais avec un filtre cela irait encore plus vite en effet !
@ bientôt
LouReeD
bonjour LouReeD,
"Blad1" contient des chiffres de 1 à 100 plage de 500*27 cellules, la macro "Jacky" les cherche 1 par 1 et les met dans une nouvelle feuille.
Chez moi, supprimer 100 feuilles = 0,6 sec, ajouter 100 feuilles vides = 0.9 sec, ajouter 100 feuilles avec valeurs "filtrées" + MFC = 1.6 sec (mais variable), donc le temps supplémentaire pour coller les données filtrées + appliquer une MFC 100 fois = 0.7 sec (oubien 0.007 sec par valeur)
@Jacky, vous avez un fichier ?
Salut Bart, salut LouReed
Le fichier que je peux te procurer n'est ni plus ni moins que celui que m'avait fourni le demandeur et que j'ai non pas modifié mais alimenter afin de répondre à sa première question.
Il dispose d'une base données énorme environ 7200 lignes et 15 colonnes, soit environ 108 000 données à gérer. Il désirait d'abord créé autant de feuille qu'une certaine donnée le demandait, mais sans répétition. Ce que je lui ai réalisé.
Ensuite dans ces feuilles il fallait transposer les données de la base selon un filtre. C'est là que j'ai réalisé un petit bout de code (celui en début de ces messages) mais qui ne me plait pas.
Voila
Vos interventions me laisse un peu perplexe, car je suis loin d'être un expert comme vous
Je vous communique le post initial déposé par ce demandeur
https://forum.excel-pratique.com/excel/copier-donnees-dans-un-nouvel-onglet-et-creer-un-tcd-196748
et le produit que j'ai aménagé qui est encore à l'état d'élaboration
Bien le bonsoir à vous deux et au plaisir de vous rencontrer de nouveau sur le Forum
re, j'ai lu assez vite, donc si je me trompe ...
macro "Jacky"
J'aime bien l'idée du dictionnaire sur la colonne 2 afin d'avoir une liste de nom pour les futurs feuilles sans doublons !
Moi je reviens à la charge avec mon fichier optimisé avec votre façon de faire sur certaine choses, mais il garde ma lourdeur de programmation...
Il a la possibilité de donner les colonnes choisie en sortie, ainsi que le choix dans les colonnes de recherche.
Le Fichier :
Le code :
Option Compare Text
Sub CréerFeuilles()
Dim Der, I As Long, Nom_Feuille As String, TabRésultat(), TabEntête(), ColExtract, ColCherche
' on arrête la mise à jour de l'écran
Application.ScreenUpdating = False
On Error GoTo fin
' on récupère les données du tableau de la feuille données
TabDonnées = Sheets("Blad1").Range("A1").CurrentRegion.Value
' on boucle sur les données de la colonne 2
For I = 2 To UBound(TabDonnées)
' on récupère la donnée pour créer la feuille
Recherche = TabDonnées(I, 2)
' Ajouter la feuille seulement si elle n'existe pas
If Feuille_Existe(Recherche) = False Then
' on crée la feuille en dernière position
Worksheets.Add(after:=Sheets(Sheets.Count)).Name = Recherche
' ici des données qui permettent :
' - de choisir les colonnes à mettre en résultat toutes ou pas et l'ordre voulu
' - de choisir les colonnes de recherche soit toutes soit une liste au choix
' si ligne = -1 alors c'est ColExtract qui est pris en compte pour les colonnes à afficher
' les colonnes sur le tableau de sortie ainsi que l'ordre
' si ligne = 0 alors extraction de toutes les colonnes sans mélange
Ligne = -1
' numéro et ordre des colonnes d'origine sur la feuille résultat
ColExtract = Array(1, 20, 7, 9, 15, 2, 5, 11, 12, 23, 8)
' si Colonne = -1 alors c'est ColCherche qui est pris en compte pour la recherche de la données voulue
' si Colonne = 0 alors on recherche sur toutes les colonnes
Colonne = -1
' tableau des colonnes de recherche
ColCherche = Array(2, 5)
' on remplie le tableau résultat avec la fonction LRD
TabRésultat = LRD(Recherche, ColCherche, Colonne, TabDonnées, ColExtract, Ligne)
' on affiche le tableau sur la feuille active
ActiveSheet.Range("A1").Resize(UBound(TabRésultat) + 1, IIf(Ligne = -1, UBound(ColExtract) + 1, UBound(TabDonnées, 2))).Value = _
Application.Transpose(Application.Transpose(TabRésultat))
' on applique une MFC pour faire ressortir la donnée cherchée
With ActiveSheet.UsedRange
.FormatConditions.Add Type:=xlExpression, Formula1:="=A1=" & Recherche
.FormatConditions(1).Interior.Color = RGB(0, 255, 0)
.EntireColumn.AutoFit
End With
End If
Next I
fin:
MsgBox Timer - tempo
' on réactive la feuille du bouton
Sheets("Blad1").Activate
End Sub
Function LRD(Recherche, ColRecherche, Colonne, TabDonnées, ColExtractArr, Ligne)
Dim TabRésultat(), Cpt, I, J
Cpt = 0
' on insère la ligne d'entête
ReDim Preserve TabRésultat(Cpt)
TabRésultat(Cpt) = WorksheetFunction.Index(TabDonnées, 1, IIf(Ligne = -1, ColExtractArr, Ligne))
' en fonction de la variable Colonne on fait une recherche "précise" ou bien complète
If Colonne = -1 Then
' Scan pour récupérer les données en fonction d'un test (ou plus) sur une ou plusieurs colonnes
For I = 2 To UBound(TabDonnées)
' on boucle sur la sélection de colonne
For J = 0 To UBound(ColRecherche)
' la condition recherchée
If TabDonnées(I, ColRecherche(J)) = Recherche Then
Cpt = Cpt + 1
' on agrandi le tableau résultat
ReDim Preserve TabRésultat(Cpt)
' on y met les résultats trouvés
TabRésultat(Cpt) = WorksheetFunction.Index(TabDonnées, I, IIf(Ligne = -1, ColExtractArr, Ligne))
Exit For
End If
Next J
Next I
Else
' Scan pour récupérer les données en fonction d'un test (ou plus) sur une ou plusieurs colonnes
For I = 2 To UBound(TabDonnées)
' on boucle sur toutes les colonnes de la base de données
For J = 1 To UBound(TabDonnées, 2)
' la condition recherchée
If TabDonnées(I, J) = Recherche Then
Cpt = Cpt + 1
' on agrandi le tableau résultat
ReDim Preserve TabRésultat(Cpt)
' on y met les résultats trouvés
TabRésultat(Cpt) = WorksheetFunction.Index(TabDonnées, I, IIf(Ligne = -1, ColExtractArr, Ligne))
Exit For
End If
Next J
Next I
End If
LRD = TabRésultat
End Function
Function Feuille_Existe(Nom_Feuille) As Boolean
' test feuille existante en gestion d'erreur
' on essaie de récupérer la valeur de la cellule A1
' si erreur feuille inconnue
' sinon feuille existante
Dim Test As Variant
' on met la fonction à VRAI
Feuille_Existe = True
' gestion des erreurs
On Error Resume Next
' on récupère la valeur en cellule A1 de la feuille testée
Test = Sheets(CStr(Nom_Feuille)).Range("A1")
' s'il y a une erreur la feuille n'existe pas
If Err > 0 Then Feuille_Existe = False
End Function
Sub EffaceFeuilles()
' on arrête la mise à jour de l'écran
Application.ScreenUpdating = False
' on arrête les alertes
Application.DisplayAlerts = False
' on boucle sur les feuille pour les supprimer sauf la "1"
For I = Sheets.Count To 2 Step -1
' on efface
Sheets(I).Delete
Next
' on remet les alertes en place
Application.DisplayAlerts = True
End SubPeut-être avez vous une réponse pour moi : Si je ne met pas le double Application.Transpose, les feuilles sont vident de données !
@ bientôt
LouReeD
voici ma macro avec une plaisanterie, chaque 5eme ligne est une ligne vide (pas difficile à appliquer).
Votre fonction LRD est une ligne dans ma macro
Une autre plaisanterie = les colonnes "X" qui n'existent pas dans la source
Bonjour Bart,
Je trouve ta proposition formidable et surtout très rapide, toutefois en voulant l'étudier de plus près je me pose plusieurs questions.
La première :
' ici des données qui permettent :
' - de choisir les colonnes à mettre en résultat toutes ou pas et l'ordre voulu
' - de choisir les colonnes de recherche soit toutes soit une liste au choix
' si ligne = -1 alors c'est ColExtract qui est pris en compte pour les colonnes à afficher
' les colonnes sur le tableau de sortie ainsi que l'ordre
' si ligne = 0 alors extraction de toutes les colonnes sans mélange
Ligne = -1
' numéro et ordre des colonnes d'origine sur la feuille résultat
ColExtract = Array(1, 20, 7, 9, 15, 2, 5, 11, 12, 23, 8)
' si Colonne = -1 alors c'est ColCherche qui est pris en compte pour la recherche de la données voulue
' si Colonne = 0 alors on recherche sur toutes les colonnes
Colonne = -1
' tableau des colonnes de recherche
ColCherche = Array(2, 5)
' on remplie le tableau résultat avec la fonction LRD
TabRésultat = LRD(Recherche, ColCherche, Colonne, TabDonnées, ColExtract, Ligne)j'ai très bien réalisé la nécessité d'affecter la valeur -1 à Ligne et Colonne (j'ai essayé avec 0 et j'en ai constaté la très grosse différence)
De ce fait tu limites et ordonnes les colonnes à afficher avec ColExtract et leur recherche avec ColCherche
ColExtract = Array(1, 20, 7, 9, 15, 2, 5, 11, 12, 23, 8)pourquoi à tu choisi ces colonnes et cet ordre, ordre qui me semble bizarre (1 et ensuite 20, colonne 20 que je ne vois pas, ou erreur de ma part) ?
Je suppose que cet ordre concerne la feuille en construction
ColCherche = Array(2, 5)Pourquoi rechercher dans les colonnes 2 à 5 alors que la donnée que l'on recherche est en colonne 2 ?
Je suis certainement naïf, mais surtout curieux et je tiens absolument à me perfectionner dans l'utilisation de VBA Excel
Un très grand merci et bien cordialement, à bientôt pour d'autres questions.
Jacky
Bonjour à tous
Je viens sans doute après la bataille mais voici une autre manière de faire - du moins je l'espère car je n'ai pas étudié les autres méthodes dans ce fil (ce n'est pas bien ça
Le but était de faire un code court (enfin avec mes petites moyens). Ce n'est sans doute pas le plus rapide mais il n'est ridicule : 1 sec. la première fois avec la création de toutes les feuilles puis 0,7 sec. sur ma bécane.
Le code dans module 1 :
Sub Ventiler()
Dim der&, t, i&, n&, xrg1 As Range, xrg2 As Range, wks As Worksheet, rep, deb#
deb = Timer: Application.ScreenUpdating = False
With Sheets("Base de données")
If Sheets.Count > 1 Then .Move before:=Sheets(1): .Select
.[a1].CurrentRegion.Sort key1:=.[b1], order1:=xlAscending, MatchCase:=False, Header:=xlYes
Set xrg1 = .[b2]: n = -1
Do
If xrg1 = "" Then Exit Do Else n = n + 1
Set xrg2 = .Columns(2).Find(What:=xrg1, after:=xrg1, LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlPrevious, MatchCase:=False)
On Error Resume Next
Set wks = Worksheets(xrg1.Value)
If Err.Number <> 0 Then Set wks = Worksheets.Add(before:=Sheets(1))
wks.Name = xrg1: wks.Move after:=Sheets(.Index + n): wks.Cells.Clear
.Rows(1).Copy wks.Rows(1)
.Rows(xrg1.Row).Resize(xrg2.Row - xrg1.Row + 1).Copy wks.Rows(2)
Set xrg1 = xrg2.Offset(1)
Loop
MsgBox "Ventilation sur " & (n + 1) & " feuilles en " & Format(Timer - deb, "0.0\ sec.")
rep = MsgBox("Voulez-ne garder que les feuilles fraichement ventilées et la source ?", vbQuestion + vbYesNo + vbDefaultButton1)
Application.DisplayAlerts = False
If rep = vbYes Then For i = Sheets.Count To Sheets(xrg2.Value).Index + 1 Step -1: Sheets(i).Delete: Next
.Select
End With
End Sub@mafraise,
malin, ce triage avant de copier. On veut aussi copier les n° qui se trouvent dans la 5eme colonne (mais je ne vois pas des n° dans cette colonne ?)
@Jacky,
je suppose que ce sont plutot des questions pour LouReeD, ma macro s'appèle "Jacky"
Les colonnes à extraire chez moi, si la feuille n'existe pas encore, c'est la séquence de "ColExtract" (à modifier 2eme ligne de "Jacky", et oui, on n'a que 15 colonnes, donc ces chiffres sont <=15). Si la feuille existe, je regarde à la 1iere ligne et les noms et la séquence des entêtes me disent les colonnes à extraire. Si l'entête n'existe pas dans la source, cette colonne reste vide.
Les colonnes à chercher, ici c'est 2 et 5, mais si vous voulez changer cela, c'est la 3eme ligne de "Jacky".
Les autres remarques, certaines choses, je les trouve aussi bizarres, dont je ne connais pas l'origine.
Bart
j'ai étudié le contenu du module 10 qui n'a pas été écrit par toi mais par LooReed d'après ce que tu me dis, d'où mon intervention mal venue (Excuses)
dans le module 31 je retrouve alors ton intervention que je vais "éplucher"
Une première question : pourquoi blague ?
aA = .Resize(.Rows.Count + 1, .Columns.Count + 1).Value 'lire la plage en 1 fois 'blague = avec une ligne&colonne supplémentaire videje suppose que tu veux simplement redimensionner ton tableau en évitant la ligne d'entête
Bonjour BsAlv
La question que tu poses est :
On veut aussi copier les n° qui se trouvent dans la 5eme colonne (mais je ne vois pas des n° dans cette colonne ?)
Mais dans le message de 12h34, Jacky nous dit :
Pourquoi rechercher dans les colonnes 2 à 5 alors que la donnée que l'on recherche est en colonne 2 ?
Je me suis donc cantonné aux propos du demandeur
Salut Jacky,
Salut LouReed, BsAlv,
une solution, sans fioritures stylistiques, en 0"8 selon Timer... Le Dico moins rapide ? Je sens qu'une réaction se prépare!
Un double-clic sur la feuille 'Base de donnes' démarre la macro.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tTab, tTitre, tData, iRow1%, iCol%, vNum
'
Cancel = True
iRow = Range("A" & Rows.Count).End(xlUp).Row
iCol = Cells(1, 1).End(xlToRight).Column
'
t = Timer
Application.EnableEvents = False
Application.ScreenUpdating = False
'
Application.DisplayAlerts = False
For X = Sheets.Count To 2 Step -1
Sheets(X).Delete
Next
Application.DisplayAlerts = True
'
Range("A1").Resize(iRow, iCol).Sort key1:=Range("A1"), order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlYes
tTitre = Range("A1").Resize(1, iCol).Value
tTab = Range("A1").Resize(iRow + 1, iCol).Value
'
iRow = 2
vNum = tTab(2, 2)
For X = 2 To UBound(tTab, 1)
If tTab(X, 2) <> vNum Then
Worksheets.Add(After:=Sheets(Sheets.Count)).Name = vNum
With Worksheets(vNum)
.Range("A1").Resize(1, iCol).Value = tTitre
.Range("A2").Resize(X - iRow, iCol).Value = Range("A" & iRow).Resize(X - iRow, iCol).Value
.UsedRange.Columns.AutoFit
End With
vNum = tTab(X, 2)
iRow = X
X = X - 1
End If
Next
'
MsgBox Timer - t
Application.EnableEvents = True
Application.ScreenUpdating = True
'
End Sub
A+
Ooops, je n'avais pas pris en compte la formule en [O:O]!
Correction..
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tTab, tTitre, tData, iRow1%, iCol%, vNum
'
Cancel = True
t = Timer
iRow = Range("A" & Rows.Count).End(xlUp).Row
iCol = Cells(1, 1).End(xlToRight).Column
'
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'
Application.DisplayAlerts = False
For X = Sheets.Count To 2 Step -1
Sheets(X).Delete
Next
Application.DisplayAlerts = True
'
Range("A1").Resize(iRow, iCol).Sort key1:=Range("A1"), order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlYes
tTitre = Range("A1").Resize(1, iCol).Value
tTab = Range("A1").Resize(iRow + 1, iCol).Value
'
iRow = 2
vNum = tTab(2, 2)
For X = 2 To UBound(tTab, 1)
If tTab(X, 2) <> vNum Then
Worksheets.Add(After:=Sheets(Sheets.Count)).Name = vNum
With Worksheets(vNum)
.Range("A1").Resize(1, iCol).Value = tTitre
.Range("A2").Resize(X - iRow, iCol - 1).Value = Range("A" & iRow).Resize(X - iRow, iCol - 1).Value
.Range("O2").FormulaLocal = "=SIERREUR(RECHERCHEV($H" & 2 & ";'https://telecomsante.sharepoint.com/sites/ADMINISTRATIF/Documents partages/COMPTA FRS/QUERY BI/01 - Controle des comptes/[Query_HF_compta_cpte 61 suivi contrat hors loc financiere&telephonie.xlsx]TYPE CLT'!A:C;" & 3 & ";FAUX);" & 0 & ")"
.Range("O2").AutoFill Destination:=.Range("O2").Resize(X - iRow, 1), Type:=xlFillDefault
.UsedRange.Columns.AutoFit
End With
vNum = tTab(X, 2)
iRow = X
X = X - 1
End If
Next
'
MsgBox Timer - t
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
'
End SubDéso pour cette distraction!
A+
Bon ben j'ai compris... j'vais me coucher... après PQ, il ne me reste plus grand chose pour m'amuser ici...
@ bientôt
LouReeD