Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2011, 09h30   #1
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Par défaut Comment fixer ses formats lors de l'import d'un fichier .csv

Bonjour,

Je suis en face d'un problème qui, j'imagine, est relativement simple quand on sait bien manipuler SAS.

Je dois importer une table qui est au format .csv

J'ai utilisé la PROC IMPORT mais il me fixe plein de formats que je ne connais pas (BEST12.)

Il faudrait donc que je réussisse un import avec les formats que je veux. Voici donc mes questions :

1) J'ai la PROC DATA avec toutes les ATTRIB LABEL et FORMAT qui m'intéressent. Est-ce possible d'importer mon fichier .csv directement dans cette table ? (de "rajouter des lignes" dans une table vierge)

2) J'ai essayé de faire l'étape DATA suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
DATA matable;
ATTRIB id LABEL "clé";
ATTRIB nom LABEL "nom de famille";
...
INFILE "C:/.../matableaimporter.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
INPUT
@1 id 6.
@8 nom $50.
...
;
RUN;
le problème est qu'il ne reconnaît pas quand une variable ne fait pas "toute la longueur" (ex. ici si qqun s'appelle "DUPONT", ça ne fait pas 50 caractères et donc il va mettre les informations de la variable suivante dans le nom...

Merci d'avance
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 09h48   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
hello,
grâce aux deux point ( : ) , t'indique à sas que la longueur tes variables peut variée.
exemple;
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
DATA matable;
ATTRIB id LABEL "clé";
ATTRIB nom LABEL "nom de famille";
...
INFILE "C:/.../matableaimporter.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
INPUT
@1 id 6.
@8 nom  : $50.
...
;
RUN;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 10h57   #3
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Alors effectivement il y a plutôt du mieux... C'est à dire qu'en mettant :

Code :
1
2
@1 id : 6.
@8 nom  : $50.
il reconnait au moins mon Id et peut l'importer (il fait entre 3 et 5 caractères).

Par contre il ne commence pas à lire le nom au bon endroit (il considère que l'id fait toujours 6 caractère quand il veut lire le nom....) Faut-il rajouter quelque chose au niveau du "@8" ?

En plus je viens de m'apercevoir qu'il ne tient pas forcément compte des formats que je lui ai demandé :-(

Ce qui fait que je n'arrive pas à imposer les variables qui m'intéressent. Pourtant j'ai vérifié sur le fichier original et par exemple mon Id ne fait pas plus de 5 de longueur, et il me le met quand même en best12, de longueur 8 (c'est quoi ce format best12 ????).

Ce n'est pas possible de faire comme je pensais dans le point 1) ? (ajouter les lignes à une table déjà existante...)
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 11h35   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Bon ok;

déjà quand tu spécifie le séparateur ( dlm=) tu n'as pas besoin de dire à SAS d'où commence la lecture de tes variables.

le BEST12, c'est un informat numérique, ( format c'est pour l'affichage etl'informat c'est pour les valeur stockée).
et SAS emploie le BEST12 comme valeur numérique par defaut.

En ce qui concerne ton problème avec les ( , tu peux utiliser une proc import et spécifier comme option,

Si t'es en SASV9tu peux remplacer les deux points par
exemple:

Code :
1
2
3
4
5
6
7
8
9
10
 
 
DATA matable;
ATTRIB id LABEL "clé";
ATTRIB nom LABEL "nom de famille";
...
INFILE "C:/.../matableaimporter.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
     input name $ 1-9
         @8 nom   $varying50.   ;
run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 11h37   #5
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
En enlevant le "@nombre" au début des lignes suivant le INPUT c'est bon il me prend les bonnes données aux bons endroits. Par contre il me garde du BEST12 dès que c'est un format numérique (pour les formats textes c'est bon il les prend...). Comment se séparer de ce format ?

Je vais tester une autre table pour voir comment il gère les dates...
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 12h49   #6
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
si tu n'as pas spécifié l'informat SAS donnera le BEST12. par défaut.
est ce que tu peux joindre ton étape data et indiquer quelle variable te cause problème ?

sinon,essaie d'adapter cette syntaxe à ton cas:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
DATA malib.maTable ;
 
 ATTRIB  var1
		LENGTH=7
		LABEL= 'variable numéro 1'
        FORMAT=
        INFORMAT=9.2;/*ici 7 entiers et 2 décimales*/ 
 ATTRIB  var2
		LENGTH=$50
		LABEL= 'variable numéro 2'
        FORMAT=
        INFORMAT=$50;/*ici 50 caractères*/  
 
 
		INFILE "c:\data\monfic.csv"	dlm=";" ;
 
	input var1 var2 ..;
	run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 12h51   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Enfin pour apprendre plus , regardes formats et informat sas.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 21h24   #8
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Merci Sam, j'ai réussi à avancer même si je ne suis pas encore au bout de mes peines

J'ai essayé avec le LENGTH que tu proposais mais finalement il s'en sort bien sans.

Par contre j'ai un nouveau problème, hu hu hu... Je mets une simplification de mon étape data :

Code :
1
2
3
4
5
6
7
8
DATA facture;
	ATTRIB fact_cle LABEL = "Clé facture" FORMAT = 11.;
	(...)
	ATTRIB nais_dt LABEL = "Date de naissance " FORMAT = DDMMYY10. INFORMAT = YYMMDD10.;
(...)
	INFILE "C...\facture.csv" FIRSTOBS = 2 DLM = ";" MISSOVER;
	INPUT fact_cle (...) nais_dt (...);
RUN;
Or, de très nombreux enregistrements ont une valeur manquante pour la nais_dt. La log me retourne ça :

NOTE: Invalid data for nais_dt in line 2 76-84.

D'après ce que j'ai compris le MISSOVER fait que SAS rempli par des données manquante uniquement en fin de ligne.

Mais dans mon programme, ce sont des données qui sont manquantes en milieu de ligne. Or, SAS décale toute ma ligne d'un cran vers la gauche à chaque donnée manquante... Donc ça ne ressemble plus à rien !

N'y a-t-il pas une option à mettre quelque part pour que quand il y a une donnée manquante, il ne mette rien à cette variable et continue (au lieu d'y caser la variable suivante...). Au fait j'ai bien SAS V9.
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 21h27   #9
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
L'option s'appelle DSD.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 09h20   #10
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par Areis Voir le message
J'ai essayé avec le LENGTH que tu proposais mais finalement il s'en sort bien sans.
il faut jouer sur l'informat, le length c'est la place memoire pour le stockage des données.
le format c'est pour l'affichage.
l'informat c'est pour la lecture et surtout pour les valeurs stockées.
donc toi tu dois modifier l'INFORMAT.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h31   #11
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Yes, c'est ça ! Merci Olivier

Ca marche impec.

Maintenant, dernière étape : comment peut-on fixer des format personnalisés par rapport aux données importées ? (pour utiliser des proc format déjà écrits)

1) Si la donnée est stockée selon la valeur saisie : ex. "0" ou "1" pour du oui/non.

2) Si la donnée est stockée déjà selon une bibliothèque de valeur : ex. "oui" ou "non".
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h41   #12
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
De cette façon

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
proc format ;
value  var
1='oui'
2='non'
other='??';
run;
 
DATA test;
 
input var;
cards;
1
2
1
2
3
.
4
;
run;
 
 
 
DATA test1;
SET test;
var1= put(var,var.);
run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 11h09   #13
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Je n'ai pas compris ta réponse, Sam

Je m'en suis sorti pour mon problème 1)

Pour mon problème 2), voici un peu plus de détail avec un exemple concret :

J'ai le format suivant :

Code :
1
2
3
4
5
6
proc format;
value sexe
0 = "Indéterminé"
1 = "Masculin"
2 = "Féminin";
run;
J'ai une table .csv où les valeurs pour la variable sexinit sont saisies "Homme", "Femme" et "Indéterminé". Mon objectif est de récupérer cette variable selon mon format. Voilà une simplification ce que j'ai fait pour l'instant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* 1 - J'importe ma table telle quelle, j'ai laissé dans l'exemple que la variable posant problème */
 
DATA table1;
attrib sexeinit label = "Sexe" format = $11.;
INFILE "C:/...csv" firstobs = 2 dlm = ";" dsd missover;
input sexeinit;
run;
 
/* 2 - Je change la valeur de la variable pour s'accorder à mon format */
 
DATA table2;
length sexe 3;
SET table1;
IF sexeinit = "Homme" then sexe = 1;
IF sexeinit = "Femme" then sexe = 2;
IF sexeinit = "Indéterminé" then sexe = 0;
run;
 
/* 3 - Je ne conserve que ma nouvelle variable */
 
DATA table3 (DROP = sexeinit);
SET table2;
run;
Voilà où j'en suis. Maintenant j'ai quelques questions :

1) Que puis-je faire pour pouvoir à nouveau fixer mes format et mes informat sur ma nouvelle variable sexe ? Dois-je faire une nouvelle étape data comme j'ai fait à mon étape 1/ mais en faisant un infile avec une table SAS ????

2) Pourquoi la longueur minimale fixée lors de mon étape 2/ pour ma nouvelle variable numérique est 3 ? (j'ai testé en caractère on peut fixer 1 seul digit) C'est bizarre non ?
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 12h47   #14
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
essaies ce programme, et dis moi si c'est ce que tu recherches.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
 
 
 
proc format;
value $ sex
"Indéterminé"=0
"Masculin" =1
"Féminin"=2
other=.
;
 
run; 
 
 
 
 
DATA table1;
 
 input sexeinit $20.;
 cards;
Homme
Femme
Indéterminé
Masculin
Féminin
 ;
 run;
 
 
/* 2 - Je change la valeur de la variable pour s'accorder à mon format */
 
DATA table2;
length sexe 3;
SET table1;
 
sexe= put(sexeinit,sex.);
 
run;
 
/* 3 - Je ne conserve que ma nouvelle variable */
 /*
DATA table3 (DROP = sexeinit);
SET table2;
run;
en ce qui concerne le length, c'est toute une autre histoire. Le length = la longueur en BYTES, c'est l'espace mémoire réservé. La longueur minimum d'une variable numérique sous Windows est de 3 BYTES et de 2 sous Gros système (MVS,VM/CMS,...). Pour la variable de type caractère le minimum est de 1 BYTES et elle correspond à un caractère, deux caractères=2 BYTES et ainsi de suite. Pour les valeurs de type numérique c’est un peu compliquer. Regarde ICI
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h23   #15
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Merci pour le lien sur la longueur des variables numérique, je m'endormirai moins bête

J'ai essayé ton programme et ça ne fonctionne pas. Le "data table1" fonctionne (même si je ne sais pas à quoi sert le cards suivis des cas possibles ). Le "data table2" (j'ai remplacé sex. par sexe.) il y a les problèmes suivants :

1) Ma nouvelle variable sexe est vide (et en BEST12...)

2) Mon ancienne variable sexinit est toujours selon le format initial.

Qu'est censée faire l'instruction put ?
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h37   #16
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par Areis Voir le message
J'ai essayé ton programme et ça ne fonctionne pas.
Oh que si.
Au fait j'ai créé un exemple que tu dois supprimer et remplacer par ta table table1


puis j'ai essayé de t'expliquer {par le code} que la proc format ne fait que formater les donner.
Je reviendrai pour les explications toute à l'heure.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 12h58   #17
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Citation:
Envoyé par s_a_m Voir le message
Oh que si.
Au fait j'ai créé un exemple que tu dois supprimer et remplacer par ta table table1
Ca ne fonctionne pas dans le sens où à priori la table obtenue n'a pas les variables que je voulais avec les formats désirés (mais il n'y a pas d'errors quand on exécute les programmes)

Mais j'avoue que je suis assez largué c'est clair...

Citation:
Envoyé par s_a_m Voir le message
puis j'ai essayé de t'expliquer {par le code} que la proc format ne fait que formater les donner.
Je reviendrai pour les explications toute à l'heure.
En tout cas merci pour ta patience !
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h10   #18
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Je t'ai promis des explications , les voici:
supporsons que t'as une table qui s'appel table1 ( moi je vais la créer, toi il est supposé que tu l'as déjà donc cette étape est à zaper).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
DATA table1;
 
 input sexeinit $20.;
 cards;
homme
femme
indéterminé
masculin
féminin
 ;
 run;
Première étape ; création des formats. Attention !! il faut respecter le format des données( majuscule, minuscule,espace, …) car les traitements sur les données sont case sensitives.
dans la proc format qui suit, toutes les valeurs commencent par une lettre majuscule. Celà dit : Féminin est différent de féminin

Code :
1
2
3
4
5
6
7
8
9
 
proc format;
value $ sex
"Indéterminé"=0
"Masculin" =1    
"Féminin"=2
other=.
;
run;
2 éme étape, appliquer le format. avec la fonction PUT
Code :
1
2
3
4
5
6
7
8
 
DATA table2;
length sexe 3;
SET table1;
/* Attention !! la fonction propcase met en majuscule la première lettre*/ 
sexe= put(propcase(sexeinit),sex.);
 
run;
maintenant, si tu veux du sur mesure donne un exemple de ta table.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h44   #19
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Ok, ce n'est pas un problème de casse, toutes les valeurs ont des majuscules au début donc j'en ai tenu compte dans le format. Je te met le tout : création de la table et du format pour commencer :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DATA TABLE;
	ATTRIB cle LABEL = "Clé" FORMAT = 11.;
	ATTRIB sexeinit LABEL = "Sexe" FORMAT = $11.;
	INFILE "&table\table.csv" FIRSTOBS = 2 DLM = ";" DSD MISSOVER;
	INPUT cle sexeinit;
RUN;
 
PROC FORMAT;
	VALUE $ sex
		"Homme" = 1
		"Femme" = 2
		"Indéterminé" = 0
		other = 0;
RUN;
La table est bien importée, les valeurs sont là (avec majuscule au début), le format est dans la library.
Ensuite je fais la seconde partie, à savoir :

Code :
1
2
3
4
5
DATA TABLE;
	LENGTH sexe 3;
	SET TABLE;
	sexe = put (sexinit, sex.);
RUN;
Là log me resort ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
3914
3915  DATA TABLE;
3916      LENGTH sexe 3;
3917      SET TABLE;
3918      sexe = put (sexinit, sex.);
                               ----
                               48
ERROR 48-59: The format SEX was NOT found OR could NOT be
             loaded.
 
3919  RUN;
 
NOTE: Character VALUES have been converted TO numeric
      VALUES at the places given BY: (Line):(COLUMN).
      3918:12
NOTE: The SAS System stopped processing this step because of
      errors.
WARNING: The DATA SET WORK.TABLE may be incomplete.  When this
         step was stopped there were 0 observations AND 4
         VARIABLES.
WARNING: DATA SET WORK.TABLE was NOT replaced because this step
         was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h14   #20
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Code :
1
2
3
4
5
 
ERROR 48-59: The format SEX was NOT found OR could NOT be
             loaded.
 
3919  RUN;
SAS te dit que le format SEX n'existe pas. Comment t'as défini tes formats?
Avec une proc format?
Des formats stockés quelque part ?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h26.


 
 
 
 
Partenaires

Hébergement Web