begin process at 2010 03 20 22:43:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VB.NET

 > UTILISATION DU PORT COM VS2005

UTILISATION DU PORT COM VS2005


 Information sur la source

Note :
Aucune note
Catégorie :VB.NET Source .NET ( DotNet ) Classé sous :rs232, serialport, serie, com, mscomm Niveau :Débutant Date de création :11/04/2007 Date de mise à jour :27/06/2007 13:14:11 Vu / téléchargé :20 260 / 43 244

Auteur : lesdis

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Après avoir parcouru le forum et les différentes sources sur ce site, je me suis aperçu qu'il y avait très peu de documentation sur l'utilisation du port COM.

Avec le framework .NET 2.0, la classe SerialPort à fait son apparition, permettant de gérer simplement un port RS232. Ce code n'a aucune prétention, seulement de faire connaître cette classe au maximum de gens.


Source

  • Public Class Test_RS232
  • Private Delegate Sub _Affiche_ASCII(ByVal donnee As String)
  • Private Delegate Sub _affiche_Hexa(ByVal donnee As String)
  • Private Sub Test_RS232_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • Dim ports() As String = IO.Ports.SerialPort.GetPortNames() ' tableau de string acceuillant les ports present sur la machine
  • 'configuration du port RS232
  • RS232.BaudRate = 9600 'vitesse du port
  • RS232.Parity = IO.Ports.Parity.None 'pas de parité
  • RS232.StopBits = IO.Ports.StopBits.One 'un bit d'arrêt par octet
  • RS232.DataBits = 8 'nombre de bit par octet
  • RS232.RtsEnable = False 'ligne Rts désactivé
  • RS232.DtrEnable = False 'ligne Dtr désactivé
  • Choix_Port.Items.AddRange(ports) ' on ajoute le nom des ports dans le combobox
  • Try
  • Choix_Port.SelectedIndex = 0 ' on donne le focus au premier port du combobox
  • Catch ' message d'erreur si aucun port COM n'est détecté sur la machine et on ferme l'application
  • MsgBox("Il semble ne pas y avoir de port RS232 sur votre machine, cette application ne pourra pas marcher")
  • Application.Exit()
  • End Try
  • End Sub
  • Private Sub Connexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Connexion.Click
  • If Connexion.Text = "Connexion" Then
  • Try
  • 'on ouvre le port désiré
  • RS232.PortName = Choix_Port.Text
  • RS232.Open()
  • Catch ' message d'erreur si l'on ne peut pas ouvrir le port
  • MsgBox("Il semble que le port choisi est déjà en cours d'utilisation par une autre application, merci de choisir un port libre pour se connecter")
  • Exit Sub
  • End Try
  • Vitesse.Text = RS232.BaudRate & Space(1) & "Bauds" 'on affiche la vitesse du port
  • Connexion.Text = "Déconnexion" ' on change l'intitulé du bouton
  • Choix_Port.Enabled = False ' on désactive le combobox pendant l'utilisation du port
  • Else
  • Vitesse.Text = "" 'on efface la vitesse
  • Connexion.Text = "Connexion" ' on change l'intitulé du bouton
  • RS232.Close() 'on ferme le port
  • Choix_Port.Enabled = True 'on réactive le combobox
  • End If
  • End Sub
  • 'Evènement se déclenchant lors de l'arrivée de données sur le port RS232
  • Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
  • Dim nb_octet As Integer = RS232.BytesToRead ' on récupère le nombre d'octet présent dans le tampon
  • Dim trame(nb_octet - 1) As Byte ' Tableau acceuillant les données au format byte
  • RS232.Read(trame, 0, nb_octet) 'on lit le port
  • Dim donnee As String = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII
  • 'L'évènement DataReceived se situe sur un thread différent que le form, nous devons donc appelé un délégué pour afficher le résultat à l'écran
  • If Me.InvokeRequired Then
  • Me.Invoke(New _Affiche_ASCII(AddressOf Affiche_ASCII), donnee)
  • End If
  • 'On va convertir tous les octets du tableau en valeurs Hexadecimal pour les afficher à l'écran
  • Array.ForEach(Of Byte)(trame, AddressOf Trt_Trame)
  • End Sub
  • Private Sub Trt_Trame(ByVal bit As Byte)
  • 'on appelle le délégué pour afficher les données
  • If Me.InvokeRequired Then
  • Me.Invoke(New _affiche_Hexa(AddressOf Affiche_Hexa), Hex(bit).PadLeft(2, "0") & "H" & Space(1)) ' on convertit l'octet en valeur Hexadécimal en faisant attention qu'il reste codé sur 2 caractères et on ajoute un espace pour faciliter la lecture
  • End If
  • End Sub
  • Private Sub Affiche_ASCII(ByVal donnee As String)
  • RTB_ASCII.AppendText(donnee) 'On affiche les données à l'écran
  • End Sub
  • Private Sub Affiche_Hexa(ByVal donnee As String)
  • RTB_Hexa.AppendText(donnee) 'on affiche les données à l'écran
  • End Sub
  • End Class
Public Class Test_RS232

    Private Delegate Sub _Affiche_ASCII(ByVal donnee As String)
    Private Delegate Sub _affiche_Hexa(ByVal donnee As String)

    Private Sub Test_RS232_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ports() As String = IO.Ports.SerialPort.GetPortNames() ' tableau de string acceuillant les ports present sur la machine

        'configuration du port RS232
        RS232.BaudRate = 9600 'vitesse du port
        RS232.Parity = IO.Ports.Parity.None 'pas de parité
        RS232.StopBits = IO.Ports.StopBits.One 'un bit d'arrêt par octet
        RS232.DataBits = 8 'nombre de bit par octet
        RS232.RtsEnable = False 'ligne Rts désactivé
        RS232.DtrEnable = False 'ligne Dtr désactivé


        Choix_Port.Items.AddRange(ports) ' on ajoute le nom des ports dans le combobox

        Try

            Choix_Port.SelectedIndex = 0 ' on donne le focus au premier port du combobox

        Catch ' message d'erreur si aucun port COM n'est détecté sur la machine et on ferme l'application

            MsgBox("Il semble ne pas y avoir de port RS232 sur votre machine, cette application ne pourra pas marcher")
            Application.Exit()

        End Try
    End Sub


    Private Sub Connexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Connexion.Click

        If Connexion.Text = "Connexion" Then

            Try

                'on ouvre le port désiré
                RS232.PortName = Choix_Port.Text
                RS232.Open()

            Catch ' message d'erreur si l'on ne peut pas ouvrir le port

                MsgBox("Il semble que le port choisi est déjà en cours d'utilisation par une autre application, merci de choisir un port libre pour se connecter")
                Exit Sub

            End Try

            Vitesse.Text = RS232.BaudRate & Space(1) & "Bauds" 'on affiche la vitesse du port
            Connexion.Text = "Déconnexion" ' on change l'intitulé du bouton
            Choix_Port.Enabled = False ' on désactive le combobox pendant l'utilisation du port
        Else

            Vitesse.Text = "" 'on efface la vitesse
            Connexion.Text = "Connexion" ' on change l'intitulé du bouton
            RS232.Close() 'on ferme le port
            Choix_Port.Enabled = True 'on réactive le combobox

        End If
    End Sub

    'Evènement se déclenchant lors de l'arrivée de données sur le port RS232
    Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
        Dim nb_octet As Integer = RS232.BytesToRead ' on récupère le nombre d'octet présent dans le tampon
        Dim trame(nb_octet - 1) As Byte ' Tableau acceuillant les données au format byte

        RS232.Read(trame, 0, nb_octet) 'on lit le port

        Dim donnee As String = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII

        'L'évènement DataReceived se situe sur un thread différent que le form, nous devons donc appelé un délégué pour afficher le résultat à l'écran
        If Me.InvokeRequired Then
            Me.Invoke(New _Affiche_ASCII(AddressOf Affiche_ASCII), donnee)
        End If

        'On va convertir tous les octets du tableau en valeurs Hexadecimal pour les afficher à l'écran
        Array.ForEach(Of Byte)(trame, AddressOf Trt_Trame)
    End Sub

    Private Sub Trt_Trame(ByVal bit As Byte)
        'on appelle le délégué pour afficher les données
        If Me.InvokeRequired Then
            Me.Invoke(New _affiche_Hexa(AddressOf Affiche_Hexa), Hex(bit).PadLeft(2, "0") & "H" & Space(1)) ' on convertit l'octet en valeur Hexadécimal en faisant attention qu'il reste codé sur 2 caractères et on ajoute un espace pour faciliter la lecture
        End If
    End Sub

    Private Sub Affiche_ASCII(ByVal donnee As String)
        RTB_ASCII.AppendText(donnee) 'On affiche les données à l'écran
    End Sub

    Private Sub Affiche_Hexa(ByVal donnee As String)
        RTB_Hexa.AppendText(donnee) 'on affiche les données à l'écran
    End Sub
End Class

 Conclusion

Pour plus d'information, consultez la doc Msdn : http://msdn2.microsoft.com/fr-fr/library/system.io .ports.serialport_members(VS.80).aspx

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 avril 2007 16:08:40 :
Correction de l'ortographe ;)
11 avril 2007 17:38:03 :
mise en ligne du projet entier
27 juin 2007 13:14:11 :
Nouvelle version du code. Affichage des données en Hexadécimal

 Sources du même auteur

Source avec une capture Source .NET (Dotnet) CONTROLE IMAGE ZOOM/DÉZOOM
Source avec Zip Source avec une capture Source .NET (Dotnet) DIAGRAMME CAMEMBERT
Source avec Zip Source avec une capture Source .NET (Dotnet) DIAGRAMME BATON

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) SÉRIALISTION - DÉSERIALISATION DE TABLEAUX ET COLLECTIONS par AlexMS
Source avec Zip Source avec une capture Source .NET (Dotnet) [LAMEGRID] SÉRIALISATION - DÉSERIALISATION par AlexMS
Source avec Zip Source avec une capture Source .NET (Dotnet) INSERER TOUT TYPE DE FICHIERS DANS ORACLE EN VB.NET par SKY32
Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOYER DES EMAILS AVEC PIECES JOINTES EN EXÉCUTANT BLAT par mays
Source avec Zip Source avec une capture Source .NET (Dotnet) PILOTER DES AFFICHEURS 7 SEGMENTS À PARTIR DU PORT SÉRIE OU ... par mays

 Sources en rapport avec celle ci

Source avec Zip COMMANDE EXTERNE TELEVISEUR LG PAR SA PRISE RS232 par domikdomik
Source avec Zip LECTURE NMEA SUR PDA par Bobdesbois
UTILISATION DES COMPOSANTS COM (AXCOM SERIALPORT) par perceval_59
Source avec Zip Source avec une capture PORT SERIE: PROGRAMMATEUR DE MÉMOIRES I2C AVEC ÉDITEUR HEXAD... par rylryl
Source avec Zip Source avec une capture OUVRIR/FERMER LES PORTS AVEC VISUEL ET CHECKBOX par Frank9321

Commentaires et avis

Commentaire de NHenry le 11/04/2007 17:13:00

Bonjour,

Peux-tu mettre ta solution (projet) (ne serais-ce que pour un exemple d'utilisation, ce sera nettement plus pratique)?

Il faut connecter 2 ordis entre eux avec un câble Null-modem ?

Commentaire de lesdis le 11/04/2007 17:44:49

MAJ et ajout du projet entier.

Pour ma part j'ai 2 ports com sur mon ordi que je relie avec un cable RS232 acheté en supermarché.
Il suffit ensuite d'avoir un logiciel permettant d'écrire sur le port COM.

Commentaire de NHenry le 13/04/2007 13:09:19

Bonjour,

Je garde le projet en stock, il peux toujours servir. (pas encore testé).

Le code a l'air propre et commenté.

Remarques bonus :
évite le noms par défauts (Button1, Form4) donne des noms plus explicites.

Commentaire de nicho le 25/05/2007 10:49:47

bonjour,

aurai tu la fonction GetPortNames

j'ai l'erreur
'GetPortNames' is not a member of 'SerialPort'.

Commentaire de nicho le 25/05/2007 11:00:30

ok j'ai remplacé
SerialPort.GetPortNames()
par
IO.Ports.SerialPort.GetPortNames()
merci.

Commentaire de BenJ2Tours le 05/06/2007 12:36:36

Salut j'ai exploiter ton code mais il ne me reconnait pas "PortsRS232".

Que dois-je faire ???

Commentaire de NHenry le 05/06/2007 12:57:12

Bonjour,

Tu as exécuter le code contenu dans le zip ou uniquement le code mis à disponible sur la page ?

Commentaire de BenJ2Tours le 05/06/2007 13:48:18

Juste celui present sur la page pourquoi??

Commentaire de NHenry le 05/06/2007 13:49:47

Normal, télécharge le zip et execute, tu verra qu'il y a un controle de type SetialPort (ou un truc du genre) qui porte le nom PortsRS232.

Commentaire de zn415 le 24/06/2007 15:56:44

bonjour, impossible de lancer le programme, j'utilise visual basic 2005 express .

J'ai plusieurs erreurs, d'ou viens le problème?

Qui a testé ce prog? Avec quelle version de vb?

Commentaire de NHenry le 25/06/2007 09:02:21

Quelles erreurs ?

Commentaire de zn415 le 25/06/2007 11:03:49

J'ai laissé un message sur cette page http://www.vbfrance.com/infomsg_RS232-VB-2005-NET_969519.aspx

Je teste actuellement avec un modem j'envoi des commandes at du genre at&v pour lire la configuration mais ça n'affiche rien alors que sa fonctionne avec l'hyperterminal.

liste des commandes sur cette page http://fr.wikipedia.org/wiki/Modem
j'ai ajoute un textbox et un boutton avec le code suivant dans le bouton:

PortRS232.Write(TextBox1.Text)

Commentaire de nicho le 25/06/2007 14:42:07

il faut peut être positionner le RTS/CTS et DTR/DSR pour que le modem réponde !!

Commentaire de NHenry le 25/06/2007 14:44:01

Probable.

Commentaire de zn415 le 25/06/2007 15:33:09

J'ai rien specifié de special a ce sujet dans l'hyperterminal, pourquoi se serait different ici?

Commentaire de lesdis le 27/06/2007 13:19:20

MAJ du code.

Testé avec un soft qui envoit des données sur le port COM3 et ce programme qui récupère sur le port COM4.

Ne travaillant qu'avec des protocoles propriétaires, je ne pense pas pouvoir vous aider pour l'échange de données avec des modems.

Commentaire de nape le 06/07/2007 13:47:26

Moi je voudrais utiliser mon portable com modem GSM pour envoyer des sms sur portable. Puis-je trouver dans ce post une ouverture pour la réalisation de mon pojet?

Commentaire de Solenoyde le 04/05/2008 23:29:45

Bah moi je l'ai testouillé ...
J'ai un potar connecté a un PIC 16F*** ...je ressort par mon MAX232 pour la com en RS232 avec mon PC ... j'ai fais un mini acquision en VB pour tracer une courbe ... ca marche impecable (enfin aprés quelque petites modif pour l'adapter) ... Merci encore pour ce bout de code ...

Commentaire de tgoubbaa le 23/03/2009 15:45:47

salut tout le monde
merci pour c code, je vois qu'il est interessant pour mon projet fin d'étude,
En fait je veux developper une solution fax avec vb.net à l'aide de commandes AT
j'utilisé la classe SerialPort de .net pour interroger le modem, sa marche très bien et le modem répend correctement,j'ai tous les commande AT pour la mode fax,
mon problème c'est comment passer un bit au modem pour l'envoyer sur la ligne téléphonique (je dois envoyer un fichier TIFF comme fax), est je dois 2crire mes données sur la mémoire temp du port sériri à l'aide de méthode Write ou il ya un registre spécifique du modem dont lequel je dois envoyer mes donnés??
merci d'avance.

Commentaire de Rou25 le 22/06/2009 11:22:20

Bonjour, merci beaucoup pour ton code, je travail actuellement sur mon projet de stage qui consiste a piloter un module bluetooth a distance. Effectivement il n'y a pas beaucoup d'aides sur ce site concernant les liaisons port série. Voila ma question est: comment faire pour envoyer un 0 sur le RX de mon module via RS 232 pendant un temps assez long? En fait, en faisant ca, je fais un reset de mon module mais j'arrive pas a le faire.

Merci pour tout! A bientot!

Commentaire de lesdis le 22/06/2009 14:22:33

bonjour,
Lorsque tu utilises la fonction write de serialport, cela envoi les données automatiquement sur le Tx relié au pc et donc sur le Rx relié au module avec un câble croisé.
Dans ton cas de bluetooth, je pense que c'est la même chose et qu'il n'y a pas de manip spéciale a faire.

La solution que je pourrais te donner serais d'envoyer un tableau de byte de longueur n à travers la fonction write.

ex:

Dim port as New serialport
Dim tab(200) as byte

port.write(tab,0,tab.length)


Suivant la vitesse configurer au niveau du port, cela prendra plus ou moins de temps pour transmettre les 200 octets.

Bonne prog :)

Commentaire de Rou25 le 22/06/2009 15:14:59

Salut, un énorme merci pour ta réponse,

je l'ai essayé mais j'ai une erreur qui s'affiche lors de la mise en route. l'erreur est sur le port.write(tab,0,tab.length). j'ai un message comme quoi le port est fermé.  et si je met open.port()

j'ai un message d'erreur me disant que le port est deja ouvert.  

Tu pourrai m'aider stp. Merci!

Commentaire de lesdis le 22/06/2009 16:48:50

effectivement dans mon exemple j'estimais que le port était déjà ouvert. Pour ce faire, je te laisse te rapporter à la source de cette page.

Si lors de la connexion du port, tu reçois un message d'erreur te disant que le port est déjà ouvert, c'est qu'une autre application l'utilise. Il te faut donc trouver laquelle et la déconnecter du port.
Avec l'objet serialport du framework, il n'est pas possible de se connecter 2 fois au même port série.

Commentaire de lemabs le 27/10/2009 16:15:14

slt tt le monde, g exécuter cet exemple
g une carte connectée au pc via RS232
mais je récupere aucune chose ds richtextBOX
je pense que je dois y avoir quelque chose???
mercii

Commentaire de tommasi le 04/11/2009 18:28:21

Bonjour,

Merci pour ce code, je l'ai testé avec un appareil de ma fabrication envoyant de manière répété des données sur le port COM. Les données sont très bien récupérées mais le soft plante lorsque je désire déconnecter en appuyant sur le bouton "déconnexion" . La seule façon pour qu'il ne plante pas c'est de retirer le câble préalablement.
Y'a t'il une explication simple?

Cordialement

Commentaire de lesdis le 05/11/2009 09:47:27

@Lemabs :
Avez-vous vérifié la configuration du port COM (vitesse, nombre de bit, bit de stop...). Si votre carte attend un handshake ou bien un signal RTS ou DTR, cet exemple ne le traite pas, mais tout ceci est supporté par l'objet serialport (http://msdn.microsoft.com/fr-fr/library/system.io.ports.serialport_members%28VS.80%29.aspx)

@Tommas! :
Pourriez-vous être plus explicite sur l'erreur soulevé lors de votre appui sur déconnexion ?

Commentaire de tommasi le 05/11/2009 10:41:58

Bonjour,
Merci de votre réponse. Pour être plus précis, j'ai réalisé un capteur à base d'un DSPIC33F. Le DSPIC envoie les données sur le port série de manière continue, c'est à dire toutes les 12,5ms. Le réglage du port COM coté DSPIC est des lus simple (baudrate:115200, nombre de bits: 8, parité:None, Bit d'arrêt:1, Contrôleur de flux: Aucun).
J'ai utilisé l'application dans l'environnement VS2008 et pas en exécutable (il y a peut être une incidence). Le problème que je rencontre lorsque j'appuie sur le bouton déconnecter, c'est que je n'ai plus la main sur l'application, c'est à dire que je ne peux rien faire avec les contrôles, le bouton ne change pas non plus de nom. J'ai l'impression que le programme plante lorsque l'on demande de fermer le port COM. La seule manière que j'ai d'arrêter le programme c'est d'utiliser le bouton arrêt du déboggeur.
J'espère que ces renseignements seront utile à trouver une explication.
Cordialement

Commentaire de lesdis le 05/11/2009 14:29:29

Personnellement, j'ai rencontré un problème similaire dans une autre application lors de la connexion.
L'application avait un protocole de type XonXoff d'activé et si l'on essaie de connecter le port COM alors que rien n'est connecté, le programme se bloque.

Essai de voir sans connecter ta carte si l'application se connecte et se déconnecte normalement. Si c'est le cas, essai de voir du côté de readTimeOut et de WriteTimeOut ou bien d'effacer les buffer de réception ou d'écriture.

Je ne pourrais t'en dire plus :(

Bonne prog !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

MSComm.help [ par jackky ] salut question tech...Je voulais savoir si avec seulement mscomm je pouvais controler les pin de mon port serie suivants? port serie:pin 1 :DCD pin 6 Recuperation de donnees via port serie RS232 [ par doume14 ] Bonjour a tous! Je voudrais recuperer des donnees d'une balance via un port serie RS232 DB-9. Vitesse 2400bps, longueur de mot 8bits. Et le tout sur u MSCOMM Serie [ par BarthOlivier ] Salut. Je voudrai savoir s'il est possible d'envoyer facilement une structure par voie série.Exemple1 :PortOpen=trueOutput = "Toto" & chr(13)PortOpen= Probleme avec MSComm_OnComm () [ par thomas10c ] Bonjour,Je suis debutant en visual basic 6.Je voudrais recevoir des donnees sur un port serie, pour ca j'ai utilise la fonction: Private Sub MSComm_On comment attendre qu'une communication rs232 ait a nouveau lieu?? [ par mathieuleydier ] bonjourvoila j'ai un modem wavecom qui appelle un numéro distant quand je lui envoie l'ordre ATDnuméro en cliquant sur un bouton via rs232 (contole ms Récuperer donnée sur serie (Mscomm) [ par crazylion ] Bonjour à tous,Je débute en VB, et je souhaiterais savoir comment peut-on, lorsqu'une donnée est présente dans le buffer d'entrée d'un port (avec MSCo Rs232/serie [ par boutterinth ] Bonjour.Je suis actuellemen en train de consevoir un allumage cartographique avec courbe a depresion.mon boitier comunique avec l'ordinateur a l'ede d Portable sur Port Serie et SMCOmm [ par Phymo2 ] Je dispose d'un sony Ericsson T68 , lié a mon pc par un cable serie.J'ai reussie a faire des appels sortants vers fixes et portables grace au composan rs232 Boutons et Leds sur port serie????? au secours! [ par djazer ] Salut à tous et meilleurs voeux!Je souaiterai créer une petite console avec des  boutons , des encodeur rotatifs et des affic utiliser le port serie ( rs232 ) pour controler des led [ par duteux ] Bonjour tout le monde, je veux realiser une carte electronique qui me permettrais de controler l'eclairage de 3 led (ou de 3 relais) a trave


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales