PDA

Afficher la version complète : [vb6] lire et écrire des lignes ascii



darkbol10
24/06/2004, 08h48
Bonjour,

je souhaite dans mon code ne retourner que les valeurs d\\\'\\\'un fichier ASCII caractérisées par une tabulation (ou un espacement au choix)

D\\\'où mon code :


Dim texte As String
Dim H_Fichier1 As Integer
Dim H_Fichier2 As Integer

H_Fichier1=FreeFile
Open \\\"H:\\\\Surfin project of the fire\\\\Charisma2Surfer\\\\test00.dat\\\" For Input As #H_Fichier1

H_Fichier2=FreeFile
Open \\\"H:\\\\Surfin project of the fire\\\\Charisma2Surfer\\\\test01.dat\\\" For Output As #H_Fichier2

While Not EOF(H_Fichier1)
Line Input #H_fichier1, texte
If Left(texte,1)<>\\\"\\\" Then Print #H_Fichier2, texte
Wend

Close #H_Fichier1
Close #H_Fichier2

le problème c ke il bloque sur mon line input...

et me dit
attempt to read past end of file alors en quoi le EOF n\\\'est il pas bon ??

Merci pour votre aide c un problème important pour moi.

Visiteur MP
24/06/2004, 09h14
bonjour,


Dim texte As String
Dim H_Fichier1 As Integer
Dim H_Fichier2 As Integer
H_Fichier1=FreeFile
Open \"H:\\Surfin project of the fire\\Charisma2Surfer\\test00.dat\" For Input As #H_Fichier1
H_Fichier2=FreeFile
Open \"H:\\Surfin project of the fire\\Charisma2Surfer\\test01.dat\" For Output As #H_Fichier2
While Not EOF(H_Fichier1)
Line Input #H_fichier1, texte
If len(texte)>0 Then Print #H_Fichier2, texte
Wend
Close #H_Fichier1
Close #H_Fichier2
pourquoi \\\\ \\\" ?
\\ et \" suffisent.
If Left$(texte,1)<>\"\" Then Print #H_Fichier2, texte
test si vide ?
je préfère : IF len(texte)>0 THEN Print #H_Fichier2, texte
pas vu test tabulation et/ou espace ?
pas tout compris donc ?
@+

darkbol10
24/06/2004, 09h31
En fait, les valeurs ascii qui m\'intéressent sont deux valeurs X et Y qui qui présentent un alinéa...

alors je pensais faire avec la lecture d\'un espace.. le


If Left(texte,1)<>\"\" Then Print #H_Fichier2, texte


et puis chais pas pq il me met des antislashes partt..grrr (ds mon code ya pas...)

sinon disons que je veux transformer ca

!Coordinate System:
!Projection System ID:0Initialized Quick: 0
!Secondary Horizontal:Units:m Per/Meter: 1
!Geodetic Datum: EUROP50 Ellipsoid:INTNL
!Projection Method: Transverse Mercator
!Central Meridian: 3
!Base Parallel: 0
!Scale Factor: 0.9996
!FALSE Easting: 500000 m
!FALSE Northing: 0 m
!User Horizontal: Units: m Per/Secondary: 1
(T1,F20.5,T25,F16.5)
->0004
507210.7 6245180.0
507207.6 6247034.5
511326.2 6247043.5
511331.1 6245188.5
507210.7 6245180.0


en ca (avec juste un chiffre supplementaire pour compter le nombre de ligne... le 5 ici):

5
507210.700000000 6245180.00000000
507207.600000000 6247034.50000000
511326.200000000 6247043.50000000
511331.100000000 6245188.50000000
507210.700000000 6245180.00000000


Voilà, sinon j\'ai essayé


If Left(texte,1)<>\"!\" Or Left(texte,1)<>\"(\" Or Left(texte,1)<>\"-\" Then Print #H_Fichier2, texte

mais je suis vraiment pas sur de ma syntaxe (euh en tt cas ca donne le meme resultat = fichier identique)

A +

Visiteur MP
24/06/2004, 10h10
donc :
tester le 1er caractère, s\'il est >=\"0\" et
<=\"9\" il faudra écrire l\'enrgt lu.
_ s\'il est indispensable d\'avoir le nombre
de lignes écrite [ mais je ne vois pas
pourquoi ], il va falloir lire 2 fois le fichier
en entrée, la 1ère fois pour compter le
nombre de lignes à écrire, la 2ème fois
pour les écrire.
_ s\'il est indispensable de structurer les valeurs
avec un nombre fixe de décimales [ mais je
ne vois pas pourquoi ], il faudra éclater la
ligne lue ( test \"espace\" ou \"tabulation\" ),
en 2 valeurs et mettre les 0 nécessaires.
@+

NoFutur
24/06/2004, 13h44
Bonjour,

Voici un exemple qui te complète les valeurs numériques d\'une chaine en rajoutant 5 zéros supplémentaires. Donc le code récupère tout ton ancien fichier dans un nouveau fichier avec les modifications.

Si c\'est ça que tu cherchais c tout bénef :wink:


Dim Tempo As String

\' Ouvre ton fichier sur le disque (mode lecture)
Open App.Path & \"\\Essai.txt\" For Input As #1

\' Ouvre un deuxième fichier sur le disque (mode écriture)
Open App.Path & \"\\Essai.txt\" For Output As #2

\' Lecture ligne par ligne du 1er fichier
Do While Not EOF(1)

\' Récupère la ligne de texte du 1er fichier
Line Input #1, Tempo

\' Si le 1er caractère de Tempo est une valeur
\' numérique comprise entre 0 et 9...
If Asc(Mid$(Tempo, 1, 1)) >= 48 And Asc(Mid$(Tempo, 1, 1)) <= 57 Then

\' On remplace l\'espace contenu dans la chaine par cinq zéros plus 1 espace
Tempo = Replace(Trim(Tempo), Chr$(32), String(5, \"0\") & Chr$(32), 1, Len(Trim(Tempo)), 1)

\' Ecrit la valeur dans le 2eme fichier
Print #2, Tempo

\' Sinon
Else

\' Ecrit la ligne de texte dans le 2eme fichier
Print #2, Tempo

End If

Loop

\' Ferme le 1er fichier
Close #1

\' Ferme le 2eme fichier
Close #2

Qui a dit que le VB CT compliqué :roll:

darkbol10
29/06/2004, 08h47
salut !

Tout d\'abord merci !

C vrai que c ca ki me manquait :


If Asc(Mid$(Tempo, 1, 1)) >= 48 And Asc(Mid$(Tempo, 1, 1)) <= 57 Then

mais pourtant cela me redonne exactement le même fichier?

Bon j\'ai une reputation de newbie à tenir alors voici une question sur les fonctions utilisées..

Pq utilise t on un mid alors que l\'on veut lire le premier caractère?

a plus

...je sens que c bientôt tout benef...

NoFutur
29/06/2004, 11h18
Salut,

Alors ça te redonne le même fichier parceque dans ma condition if... then... je lui fais réécrire tous le fichier. Donc si tu ne veux récupérer que les valeurs numériques modifiées tu dois supprimer les deux lignes de code suivante de ta condition :

\' Sinon
Else

\' Ecrit la ligne de texte dans le 2eme fichier
Print #2, Tempo

de sorte que ton nouveau fichier ne contiendra que les valeurs numériques, tout est clair non ?!

Et pour répondre à ta question j\'ai pour habitude de toujours utiliser le mid$ parceque cette fonction me parle mieux que left$ ou right$ je m\'explique :

Mid$ permet de récupérer un caractère, un mot une expression suivant la longueur de ta chaine, voici un exemple c\'est mieux lol :

Je souhaite récupérer dans la phrase \"le ciel est bleu\" le mot \"est\" j\'utilise donc :

Mid$(\"le ciel est bleu\", 9, 3)

9 correspond à la position du premier caractère du mot à chercher.
3 fait référence au nombre de caractère du même mot que je souhaite extraire.

Mais left$ marche aussi bien et est plus simple je l\'avoue :wink:

darkbol10
29/06/2004, 11h39
Aaah c ce ke je m\'étais dit...

en enlevant cette partie du code, j\'obtenais un fichier vide et là comprenais plus les algos...

En fait, l\'erreur provient du fait que le premier caractère est une TABULATION (he he on me la fait pas à moi), du coup j\'ai mis un :


If Asc(Left$(Tempo, 1)) = 9 Then

et ca roule....

Par consequent, cela revient au même (puisque TAB aussi) pour le replace et en mettant un :


Tempo = Replace(Trim(Tempo), Chr$(9), String(5, \"0\") & Chr$(9), 1, Len(Trim(Tempo)), 1)

Enfin, ca marche et je me suis même trouvé ingénieux... Par contre là où je fais moins le malin, c ke le résultat ne correspond pas vraiment puisque l\'on a des TAB qu\'en début de ligne et entre les deux valeurs....

euh une idée? je vais essayer de bidouiller avec un \"right\" mais en tt cas j\'avance et c grace à toi

merci

NoFutur
29/06/2004, 13h45
Re Salut,

L\'instruction Replace est vachement pratique mais le gros défaut de cette fonction c\'est qu\'elle va te remplacer autant de fois un caractère (ou une tabulation) qu\'elle va en trouver dans la même chaine.

Evidemment pour contrer ce problème on peut passer par des fonctions du style Instr ou InstRev mais c\'est plus fastidieux à mettre en oeuvre.

Ravi d\'avoir pu t\'aider sur ce coup là :wink:

darkbol10
29/06/2004, 16h10
Resalut,

dis moi, comment faire pour compter le nombres de lignes contenant les valeurs et insérer ce nombre dans une ligne qui partagerait chaque groupe comme on peut le voir dans mes premières questions?

Parce que je sens que ca devient un grain compliqué pour moi...

d\'ailleurs je n\'ai tjrs pas réussi à mettre les zeros, je trifouille avec un format(value, ####0000).

Merci

NoFutur
29/06/2004, 17h19
Re re re re et re

Pour compter le nombre de lignes dans un fichier tu es obligé de l\'ouvrir avant en utilisant cette méthode :



Dim NbrLignes As Integer
Dim Tempo As String

Open \"f:\\lefichier.txt\" For Input As #1

Do While Not EOF(1)
Line Input #1, Tempo
NbrLignes = NbrLignes + 1
Loop

Close #1

MsgBox NbrLignes


Ensuite tu réutilise le code donné précédemment en récupérant cette fois-ci la variable NbrLignes.

@+++

darkbol10
30/06/2004, 09h51
Coucou!

Un peu de pub pour ta fonction Replace...

Contrairement à ce qui a été dit précédemment, elle peut ne pas tout remplacer... car une syntaxe plus avancée est :

Replace(expression, find, replacewith, [start], [count], [compare])


J\'ai donc pu bidouillé un pitit :


Tempo = Replace(Replace(Tempo, Chr$(9), String(8, \"0\") & String(8, Chr$(32)), 2, 1), Chr$(9), String(7, \"0\") & String(5, Chr$(32)), 3, 1)

Pour faire mes deux remplacements, j\'utilise dc 2 replace. Grâce au start, je commence aux 2e et 3e TAB comptés et Count permet d\'assurer qu\'un seul remplacement à chaque fois....

Et là ca marche!!!

Morale de l\'histoire : Replace, c de la balle!

... Me reste plus qu\'à compter mes lignes et insérer ce chiffre au début de chaque groupe...

A plus :o:

Ps : j\'espère que tu ne le savais pas... car ca maurait fait plaisir de t\'aider (koi?! tt le monde le savait déjà?... snif..)

NoFutur
30/06/2004, 13h10
Ben tiens j\'ai appris un truc là :8O: comme quoi c\'est bien de s\'entraider :D: :D:

@+++ :wink:

darkbol10
05/07/2004, 10h17
Salut

Ben c pas tout ca mais j\'ai bo batailler pour pouvoir finir ma conversion mais j\'y arrive tjrs pas...

Je resitue :

avt de frimer avec double replace, il me manque l\'étape intermédiaire qui est de remplacer \"l\'entête\" de chaque paquet de valeurs par le nb de lignes dudit paquet.

ex :

->0004
507210.7 6245180.0
507207.6 6247034.5
511326.2 6247043.5
511331.1 6245188.5
507210.7 6245180.0



transformation...

5
507210.7 6245180.0
507207.6 6247034.5
511326.2 6247043.5
511331.1 6245188.5
507210.7 6245180.0


alors j\'ai testé ca :


Do While Not EOF(1)

Line Input #1, Tempo

Dim nbrlig As Long
Dim tem As String
Dim i As Long

If Asc(Left$(Tempo, 1)) = 45 Or Asc(Left$(Tempo, 1)) = 9 Then
Print #2, Tempo
End If

nbrlig = 0
Do While Not EOF(2)
Line Input #2, Tempo
tem = Split(Tempo, Chr$(45))
For i = 0 To 5000
If Asc(Left$(tem(i), 1)) = Chr$(9) Then
nbrlig = nbrlig + 1

Else
Tempo = Replace(Tempo, , nbrlig & String(5, Chr$(9)), 1, 1)
End If

Print #3, Tempo
Loop
Loop


je dirai que c le fruit de ma réflexion la plus poussée mais ca marche pas trop car mon tem(i) ne prend pas les blocs en question (debug print maffiche que ligne pe du au print line)... enfin plus c complexe plus je me perds....

Comment faire pour avoir la separation des blocs plus propre afin d\'en remplacer \"l\'entête\"? Ou alors quelle autre méthode y a til ?

merci pour le coup de main pasque je peine vraiment....

A +

PS : bul, pourrais tu me développer ton idée sur la lecture et le comptage? car j\'ai essayé un truc (très moche) s\'en rapprochant mais je lis pas deux fois le même fichier, merci...

darkbol10
05/07/2004, 14h44
euh je voulais rajouter un ptit truc

est ce qu\'il est possible de faire 2 boucles do while not EOF() ? pasque avec mon machin, il ne veut même suivre les instructions de ma deuxième boucle... Sans faire de jeu de mot honteux, il loupe tout et repasse au do et ainsi de suite... c pas très sympa pour mes instructions..

help

++

Biboup
05/07/2004, 14h52
Si le EOF est le meme :Par experience je te reponds que ca marche pas des masses et c\'est plutot casse tete!!


Il faut des eof differents pour que ca marche reelement!!!

je sai pas si je suis clair!!!

NoFutur
05/07/2004, 17h02
Salut Gars,

Regarde bien ton code, tu a oublié de déclarer la variable Tem en tableau dynamique :

Tu as fait ça : Dim Tem as string
Il faut faire ça : Dim Tem() as string

Ensuite plutot que de faire une boucle fixe de 5000, utilise une boucle comme ceci :
For i = 0 To UBound(Tem)
...ton code...
next i

En effet ta boucle utilisera alors la valeur maximal de ton tableau au lieu des 5000 que tu as défini par défaut.

Peut être que ça débloquera tout ça !

@+++ :wink:

PS : Plutot c\'est le chien de Mickey :lol:

darkbol10
06/07/2004, 10h25
Yo

Pour biboup : 2 EOF différents cad eof(1) et eof(2)? si c ca c bon, de ttes facons je pense avoir compris (c juste que mon pas à pas était prenait un peu de tps) merci

Pour Odile2raie : hehe javais vu Ubound mais après... par contre le coup du tableau dynamique, euh si on me le dit pas je pouvais continuer avec mes strings (et rester au nivo basique... mes jeux de mots n\'en parlons pas...)

J\'avais choisi de spliter avec les traits d\'union (est ce judicieux?) ; Car ubound(tem())=1 (zarbi non?) et en plus mon if prend pas du coup.


If Asc(Left$(tem(i), 1)) = 9 Then

left et tem() sont ils incompatibles?

++ :():

\"n\'entrez pas, c\'est une vraie boucherie...\"

darkbol10
06/07/2004, 10h25
Yo

Pour biboup : 2 EOF différents cad eof(1) et eof(2)? si c ca c bon, de ttes facons je pense avoir compris (c juste que mon pas à pas était prenait un peu de tps) merci

Pour Odile2raie : hehe javais vu Ubound mais après... par contre le coup du tableau dynamique, euh si on me le dit pas je pouvais continuer avec mes strings (et rester au nivo basique... mes jeux de mots n\'en parlons pas...)

J\'avais choisi de spliter avec les traits d\'union (est ce judicieux?) ; Car ubound(tem())=1 (zarbi non?) et en plus mon if prend pas du coup.


If Asc(Left$(tem(i), 1)) = 9 Then

left et tem() sont ils incompatibles?

++ :():

\"n\'entrez pas, c\'est une vraie boucherie...\"

NoFutur
06/07/2004, 14h38
Re re Areuh,

Left et tem() sont compatible a partir du moment ou ton tableau est de type String d\'ailleurs si tu passe par une variable intermédiaire tu notera que la valeur contenu dans Tem(1) par exemple est bien une chaine de caractères...

Je confirme ubound(tem())=1 ça fait zarbi :lol:

Sinon tu peux splitter avec tout ce que tu veux du moment ou le caractère que tu utilise se retrouve bien à chaque fois dans ton fichier.

Voilà !

\" Quand je suis content, je vomi ! \" :oops:

darkbol10
07/07/2004, 10h36
et voilà ca marche...

Grand moment de bonheur, je peux mettre la mention résolue

(chus hyper content)

voici donc la conversion que j\'ai bataillé à avoir, c un peu bourrin mais ca marche :


Dim Tempo As String

Open \"H:\\Surfin project of the fire\\Charisma2Surfer\\charisma_Licenses.dat\" For Input As #1
Open \"H:\\Surfin project of the fire\\Charisma2Surfer\\test01.bln\" For Output As #2
Open \"H:\\Surfin project of the fire\\Charisma2Surfer\\test00.bln\" For Output As #3

Do While Not EOF(1)

Line Input #1, Tempo

Dim temp() As String

If Asc(Left$(Tempo, 1)) = 45 Or Asc(Left$(Tempo, 1)) = 9 Then
temp = Split(Tempo, Chr$(9))
Tempo = Replace(Replace(Tempo, temp(1), temp(1) & String(8, \"0\") & String(8, Chr$(32))), temp(2), temp(2) & String(7, \"0\") & String(5, Chr$(32)))
Print #2, Tempo

End If
Loop

Close #1
Close #2

Open \"H:\\Surfin project of the fire\\Charisma2Surfer\\test01.bln\" For Input As #2

Dim Chaine As String
Dim Splitage() As String
Dim Splitage1() As String
Dim ChaineInter As String
Dim i As Integer
Dim j As Integer

Chaine = StrConv(InputB(LOF(2), 2), vbUnicode)
Close #2

Splitage() = Split(Chaine, \"->\")

For i = 1 To UBound(Splitage())
Splitage1() = Split(Splitage(i), vbCrLf) ChaineInter = ChaineInter & (UBound(Splitage1()) - 1) & vbCrLf

For j = 1 To UBound(Splitage1())
ChaineInter = ChaineInter & Splitage1(j) & vbCrLf
Next j

Next i

Print #3, ChaineInter

Close #2

Close #3


Merci à tous et ptite dédicace à Simon et Odile...
A pluuuuuuuuus :wink:

Hai

PS : et ainsi se clôt l\'un des messages les plus lus (par moi)
Je reviens très vite vs inquiétez pas...

\"Ben vous voyez bien je mange de la choucroute\"

darkbol10
26/07/2004, 09h17
Salut Nofutur,

Je reviens avec un petite question... Je reviens avec la conversion d\'un autre fichier mais là j\'arrive pas résoudre le problème :

Je rappelle la conversion qui écrivait un fichier ASCII par blocs (avec comme entete le nbre de ligne du bloc).

Mon problème présent est que j\'aimerais séparer mes blocs et faire le comptage en fonction du dernier caractère de la ligne, je m\'explique, de ca :

691860.10 6514398.00 SFSB-89-40
690860.10 6414398.00 SFSB-89-40
695567.10 6361817.00 SFSB-89-41 695566.90 6361841.60 SFSB-89-41
695566.60 6361866.20 SFSB-89-41

je veux ca :

2
691860.10 6514398.00 SFSB-89-40
690860.10 6414398.00 SFSB-89-40
3
695567.10 6361817.00 SFSB-89-41 695566.90 6361841.60 SFSB-89-41
695566.60 6361866.20 SFSB-89-41

La séparation par blocs s\'effectue donc par le changement du 40 en 41 (puis 42...) et je n\'y arrive pas...

Voilà merci pour le coup de main!

++

Biboup
26/07/2004, 09h58
POur compter les blocs dans ta boucle t\'ajoute right(...) si ca existe j\'ai pas pris le temps de vérifier!!!
et tu compte....

Ca peut t\'aider ou pas du tout?

darkbol10
26/07/2004, 10h05
euh si je vois l\'idée.. idée que j\'ai essayée de mettre en place... mais le problème est que je dois séparer par blocs et je sais pas quelle méthode utiliser car spliter ne serait pas trop efficace ici (spliter sur kel caratère?)

je pourrais utiliser right kune ke mes blocs seront séparés.. tous les -89-40 ensemble, bloc suivant tous les -89-41 etc.

++

Biboup
26/07/2004, 10h14
Comment sont mis tes blocs (dans ton fichier)?
comment tu les récupère??

J\'ai un peu décrocher pendant un moment et jai du mal à comprendre la!!! :o:

darkbol10
26/07/2004, 10h26
En fait, javais déjà fait qq manip sur le fichier premier (petit nettoyage quoi...), en gros un peu comme ca :

H2600 DATA SOURCE IS 2D TRACE COORDINATES FROM THE GEOMODEL DATABASE
SCNST86-32 000 -49581146.18N 2 835.22E 449626.06451017.0 0.0
SCNST86-32 000 -48581146.04N 2 833.72E 449601.36451013.0 0.0
SCNST86-32 000 -47581145.91N 2 832.21E 449576.76451009.0 0.0
SCNST86-32 000 -46581145.77N 2 830.71E 449552.06451005.1 0.0

et moi les seuls trucs ki minteressent c les lignes ou ya :

SCNST86-32 449626.06451017.0

Alors j\'ai fait ca :


Dim Tempo As String
Dim SurferApp As Object
Static nb As Long

Set SurferApp = GetObject(, \"Surfer.application\")

Open SurferApp.Path & \"\\import Data\\CharismaGeoframe Non Converted Data\\\" & File2(23).FileName For Input As #1 \'opens the file to import im reading mode
Open SurferApp.Path & \"\\import Data\\CharismaGeoframe Non Converted Data\\tempG.bln\" For Output As #2

Do While Not EOF(1)

Line Input #1, Tempo
If Asc(Left$(Tempo, 1)) = 83 Then \'if the first character is \"S\"
Tempo = Mid$(Tempo, 47, 9) & \",\" & Mid$(Tempo, 55, 10) & Chr$(9) & Mid$(Tempo, 1, 10)
Print #2, Tempo
End If
Loop

Close #1
Close #2

Open SurferApp.Path & \"\\import Data\\CharismaGeoframe Non Converted Data\\tempG.bln\" For Input As #2
Open SurferApp.Path & \"\\import Data\\CharismaGeoframe Converted Data\\\" & File3(33).FileName For Output As #3

Dim tempo2 As String
Dim temp() As String
Dim splitlig() As String

Do While Not EOF(2)
Line Input #2, tempo2
temp = Split(tempo2, Chr$(9))
tempo2 = Replace(Replace(Replace(tempo2, Chr$(9), String(3, Chr$(32))), temp(1), temp(1) & \"0\" & String(2, Chr$(32))), temp(2), temp(2) & \"0\" & String(4, Chr$(32))) \'adds the needed decimal zeros
Print #3, tempo2
Loop

Close #2
Close #3


Du coup ca me donne un fichier comme ca en un seul pavé!!

405923.20 6444214.90 SCNST86-32
405898.60 6444211.00 SCNST86-32
405874.00 6444207.00 SCNST86-32
274855.70 6453462.30 SCNST86-33
274880.30 6453466.50 SCNST86-33
274905.00 6453470.80 SCNST86-33

Les blocs dont je parle et que je veux séparer sont lorsque le troisième terme (SCN machin) diffère... de plus, le format que je veux obtenir nécessite en début de chacun de ces blocs le nombre de lignes contenues ds lesdits blocs... (ca jy arrive pas non plus...)

dc le résultat c un truc du genre :

2
405923.20 6444214.90 SCNST86-32
405898.60 6444211.00 SCNST86-32
3
274855.70 6453462.30 SCNST86-33
274880.30 6453466.50 SCNST86-33
274905.00 6453470.80 SCNST86-33

C un peu plus clair? ou tjrs pas?

Biboup
26/07/2004, 10h34
une fois qut tu as ton fichier \"final\"
utilise un tableau de string pour enregistré les valeurs ou right(line,2) sont égale!!
après affiche le compteur utilisé pour avoir le total et affiche ton tableau grâce à une boucle!!

Je sais pas si t\'arrive à lire ligne par ligne ca me semble faisable!!!
(si tu sais lire ligne par ligne tu pourrais me donner le codes!!)

Merci et j\'espere que mon aide t\'illumine :idea: :wink: