Accueil > Forum > > > > Copie de fichiers .exe via des Treeviews
Copie de fichiers .exe via des Treeviews
lundi 22 octobre 2012 à 16:24:09 |
Copie de fichiers .exe via des Treeviews

swohard
|
Voilà ce que je veux faire en .Net:
1. Sélectionner un (les) fichier(s) .exe ou .msi dans un Treeview.
2. Cliquer sur le bouton Add.
3. Faire un FileCopy du (des) fichier(s) sélectionné(s) vers le dossier temporaire du PC.
A priori, rien de bien compliqué. Seulement, j'ai commencé le VB.Net il y a peu de temps, et ça fait plusieurs jours maintenant que je suis penchée sur ce problème, je piétine.
Voici le code:
Code Visual Basic : Private Sub btn_Transfert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Node As System.Windows.Forms.TreeNode
Try
For Each Node In tView_Serveur.SelectedNode
tView_Temporaire.FileCopy("Z:\Dossier\Sous dossier\Sous sous dossier\".fichier récupéré, "%system root%\temp")
Next
Catch erreur As Exception
MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
End Try
End Sub
Est-ce qu'il y aurait un moyen d'éviter le For Each aussi?
Merci d'avance.
|
|
mercredi 24 octobre 2012 à 12:04:00 |
Re : Copie de fichiers .exe via des Treeviews

Le Pivert
|
Pour pouvoir t'aider il faut savoir le chemin que tu as quand tu cliques sur ton fichier.
Tout d'abord
Tu cliques sur ta treeview pour obtenir l'evenement: _AfterSelect
et tu mets une msgBox
Ce qui donne ceci:
Code Visual Basic : Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
MsgBox(e.Node.FullPath)
End Sub
Tu cliques sur ton fichier.
En fonction de ce que tu vas obtenir tu mettras une variable à la place de la msgBox nommé par exemple cheminfichier.
Il faudra ensuite extraire de cette chaine le nom du fichier avec son extension pour pouvoir le copier avec un variable nommé fichier.
Il ne te restera plus qu'a faire ta copie
Avec la chemin de la source et le chemin de la destination
@+Le Pivert
|
|
mercredi 24 octobre 2012 à 14:52:41 |
Re : Copie de fichiers .exe via des Treeviews

swohard
|
Merci pour ta réponse Le Pivert
Pour que tu es plus de précision, voilà le code aujourd'hui:
Code Visual Basic : Imports System.IO
Imports System
Imports System.Net
Imports System.Windows
Imports System.Collections
Imports System.Object
Imports System.MarshalByRefObject
Imports System.Windows.Forms.TreeNode
Public Class Form_Principale
Const Source As String = "Z:\tech\! Softhèque\! PackSofts"
Const Destination As String = "C:\WINDOWS\Temp"
Private Sub Form_Principale_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'--------------------------------------------------------------------------------------------------------
'------------------------------ TRAITEMENT TREEVIEW POUR LE COTE SERVEUR --------------------------------
'--------------------------------------------------------------------------------------------------------
'Définit le premier noeud
Me.tView_Serveur.TopNode = Me.tView_Serveur.Nodes.Add(Source, Source)
'Arborescence du premier noeud
For Each Dossier As String In Directory.GetDirectories(Source)
Me.tView_Serveur.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
'Récursif
ListeArborescenceDossier(Dossier, Me.tView_Serveur.TopNode)
Next
'Fichiers du premier noeud
For Each Fichier As String In Directory.GetFiles(Source)
Me.tView_Serveur.TopNode.Nodes.Add(Path.GetFileName(Fichier))
Next
'--------------------------------------------------------------------------------------------------------
'--------------------------- TRAITEMENT TREEVIEW POUR LE COTE DOSSIER TEMPORAIRE ------------------------
'--------------------------------------------------------------------------------------------------------
'Définit le premier noeud
Me.tView_Temporaire.TopNode = Me.tView_Temporaire.Nodes.Add(Destination, Destination)
'Arborescence du premier noeud
For Each Dossier As String In Directory.GetDirectories(Destination)
Me.tView_Temporaire.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
'Récursif
ListeArborescenceDossier(Dossier, Me.tView_Temporaire.TopNode)
Next
'Fichiers du premier noeud
For Each Fichier As String In Directory.GetFiles(Destination)
Me.tView_Temporaire.TopNode.Nodes.Add(Path.GetFileName(Fichier))
Next
'--------------------------------------------------------------------------------------------------------
'----------------------------------- TRAITEMENT FICHIERS .EXE ET .MSI -----------------------------------
'--------------------------------------------------------------------------------------------------------
' /!\ Partie modifié /!\
Try
Dim node As TreeNode
node.SelectAction = TreeNodeSelectAction.Select
If File.Exists("Fichier .exe") Then
tView_Serveur.SelectedNode.Text
CopierFichier()
End If
Catch erreur As Exception
MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
End Try
End Sub
'Private Sub btn_ClickAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ClickAdd.Click
'Dim Node As System.Windows.Forms.TreeNode
' Try
' If File.Exists("Fichier .exe") Then
' For Each Node In tView_Serveur.SelectedNode
' FileCopy(Node."Z:\tech\! Softhèque\! PackSofts\", "%system root%\temp")
' Next
' End If
' Catch erreur As Exception
' MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
' End Try
'End Sub
Sub ListeArborescenceDossier(ByVal DossierActuel As String, ByVal NodeActuel As TreeNode)
'Recupère le node dans lequel on est
Dim Node As TreeNode = NodeActuel.Nodes(DossierActuel)
'Répertoires de ce noeud
For Each Dossier As String In Directory.GetDirectories(DossierActuel)
Node.Nodes.Add(Dossier, Path.GetFileName(Dossier))
'Récursive
ListeArborescenceDossier(Dossier, Node)
Next
'Fichiers de ce noeud
For Each Fichier As String In Directory.GetFiles(DossierActuel)
Node.Nodes.Add(Path.GetFileName(Fichier))
Next
End Sub
Sub CopierFichier()
Dim Node As System.Windows.Forms.TreeNode
FileCopy(Node."Z:\tech\! Softhèque\! PackSofts\", "%system root%\temp")
End Sub
End Class
Il y a eu des modifications depuis:
- J'ai supprimé les 2 boutons add et remove, la tâche sera plus simple, y compris pour les futurs utilisateurs.
- J'ai supprimé par la même occasion le For Each, pour remplacer ça avec un traitement par SelectAction.
l'Algo, le voilà:
* Quand tu ouvres le programme, tu tombes directement sur l'interface avec mes 2 Treeviews:
- Le Treeview (tView_Serveur) qui pointera directement sur un dossier du serveur dans
lequel il y aura des
fichiers .exe et .msi.
- Et le Treeview (tView_Temporaire) qui pointera directement sur le dossier temporaire du
Pc (%system root%\temp), dans lequel je vais vouloir copier les fichiers .exe au choix.
* Et là, on oublis les boutons Add et Remove!
* Lorsque que clique sur un fichier, on vérifie qu'il existe bien (File.Exists) avant même qu'il déclenche un évènement.
- Si Oui: On déclenche un évènement.
- Sinon : Message d'Erreur.
* Si le fichier existe, alors on déclenche l'évènement (SelectAction je crois):
- On copie le fichier sélectionné du dossier serveur au dossier temporaire (FileCopy (Path source, Path destination).
* Puis une fois tous les fichiers copiés, je clique sur un bouton "Installé" pour une installe automatique des .exe (mais ça c'est une autre histoire).
Et pour chaque fichier cliqué, le traitement vérifiera qu'il existe puis si c'est bon, il le copie dans le temporaire de suite.
Seulement, il me met: Erreur 1 'SelectAction' n'est pas un membre de 'System.Windows.Forms.TreeNode'.
Code Visual Basic : Try
Dim node As TreeNode
node.SelectAction = TreeNodeSelectAction.Select
If File.Exists("Fichier .exe") Then
tView_Serveur.SelectedNode.Text
CopierFichier()
End If
Catch erreur As Exception
MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
End Try
Par quoi je dois remplacer alors?
|
|
mercredi 24 octobre 2012 à 16:02:26 |
Re : Copie de fichiers .exe via des Treeviews

Le Pivert
|
Réponse acceptée !
Je t'ai mis la copie dans un bouton.
Attention à tes chemins source et destination. Evite les espaces et fait les terminé par \
Voici le code, j'ai laissé mes chemin pour mes essais pour que tu comprennes bien:
Code Visual Basic : Imports System.IO
Imports System
Imports System.Net
Imports System.Windows
Imports System.Collections
Imports System.Object
Imports System.MarshalByRefObject
Imports System.Windows.Forms.TreeNode
Public Class Form1
Const Source As String = "C:\Documents and Settings\Propriétaire\Mes documents\Mes images\Chambre\"
Const Destination As String = "C:\Documents and Settings\Propriétaire\Mes documents\Mes images\Nouveau dossier\"
Dim nomfichier As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'--------------------------------------------------------------------------------------------------------
'------------------------------ TRAITEMENT TREEVIEW POUR LE COTE SERVEUR --------------------------------
'--------------------------------------------------------------------------------------------------------
'Définit le premier noeud
Me.tView_Serveur.TopNode = Me.tView_Serveur.Nodes.Add(Source, Source)
'Arborescence du premier noeud
For Each Dossier As String In Directory.GetDirectories(Source)
Me.tView_Serveur.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
'Récursif
ListeArborescenceDossier(Dossier, Me.tView_Serveur.TopNode)
Next
'Fichiers du premier noeud
For Each Fichier As String In Directory.GetFiles(Source)
Me.tView_Serveur.TopNode.Nodes.Add(Path.GetFileName(Fichier))
Next
'--------------------------------------------------------------------------------------------------------
'--------------------------- TRAITEMENT TREEVIEW POUR LE COTE DOSSIER TEMPORAIRE ------------------------
'--------------------------------------------------------------------------------------------------------
reset() 'on affiche la treeview destination
End Sub
Sub ListeArborescenceDossier(ByVal DossierActuel As String, ByVal NodeActuel As TreeNode)
'Recupère le node dans lequel on est
Dim Node As TreeNode = NodeActuel.Nodes(DossierActuel)
'Répertoires de ce noeud
For Each Dossier As String In Directory.GetDirectories(DossierActuel)
Node.Nodes.Add(Dossier, Path.GetFileName(Dossier))
'Récursive
ListeArborescenceDossier(Dossier, Node)
Next
'Fichiers de ce noeud
For Each Fichier As String In Directory.GetFiles(DossierActuel)
Node.Nodes.Add(Path.GetFileName(Fichier))
Next
End Sub
Private Sub tView_Serveur_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tView_Serveur.AfterSelect
nomfichier = tView_Serveur.SelectedNode.ToString
nomfichier = nomfichier.Replace("TreeNode: ", "") 'supprime TreeNode:
End Sub
'on copie
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
If File.Exists(Destination & nomfichier) Then
MessageBox.Show("Un fichier du même nom existe déjà!", "Copie fichier")
Exit Sub
Else
FileCopy(Source & nomfichier, Destination & nomfichier)
MessageBox.Show("Copie éffectuée", "Copie fichier")
reset()'on réinitialise la treeview
End If
Catch erreur As Exception
MessageBox.Show("Copie échouée. " & erreur.GetBaseException.Message)
End Try
End Sub
' TRAITEMENT TREEVIEW POUR LE COTE DOSSIER TEMPORAIRE
Private Sub reset() 'on réinitialise la treeview à chaque copie
Me.tView_Temporaire.Nodes.Clear()
'Définit le premier noeud
Me.tView_Temporaire.TopNode = Me.tView_Temporaire.Nodes.Add(Destination, Destination)
'Arborescence du premier noeud
For Each Dossier As String In Directory.GetDirectories(Destination)
Me.tView_Temporaire.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
'Récursif
ListeArborescenceDossier(Dossier, Me.tView_Temporaire.TopNode)
Next
'Fichiers du premier noeud
For Each Fichier As String In Directory.GetFiles(Destination)
Me.tView_Temporaire.TopNode.Nodes.Add(Path.GetFileName(Fichier))
Next
End Sub
End Class
Tu noteras que j'ai fait un Sub pour la treeview destnation pour qu'elle se réinitialise à chaque opération
@+Le Pivert
|
|
mercredi 24 octobre 2012 à 16:10:19 |
Re : Copie de fichiers .exe via des Treeviews

Le Pivert
|
Réponse acceptée !
Si tu veux faire la copie en cliquant sur le fichier tu mets cela:
Code Visual Basic : Private Sub tView_Serveur_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tView_Serveur.AfterSelect
nomfichier = tView_Serveur.SelectedNode.ToString
nomfichier = nomfichier.Replace("TreeNode: ", "") 'supprime TreeNode:
Try
If File.Exists(Destination & nomfichier) Then
MessageBox.Show("Un fichier du même nom existe déjà!", "Copie fichier")
Exit Sub
Else
FileCopy(Source & nomfichier, Destination & nomfichier)
MessageBox.Show("Copie éffectuée", "Copie fichier")
reset()
End If
Catch erreur As Exception
MessageBox.Show("Copie échouée. " & erreur.GetBaseException.Message)
End Try
End Sub
Le Pivert
|
|
mercredi 24 octobre 2012 à 17:00:29 |
Re : Copie de fichiers .exe via des Treeviews

swohard
|
Et bah merci beaucoup Le Pivert!
Mais attends, si j'ai bien compris, Code Visual Basic : nomfichier = nomfichier.Replace("TreeNode: ", "")
On utilise parce qu'on a pas le droit d'attribuer le même nom à la source et à la destination? C'est bien ça?
Et après, je comprend pas vraiment le reste ("TreeNode: ", "") 'supprime TreeNode:
dans Code Visual Basic : nomfichier = nomfichier.Replace("TreeNode: ", "") 'supprime TreeNode:
... C'est là qu'on remplace les caractères non? Ca équivaux à ça non: MonString = MonString.Replace("test", "test2")
Cela n'empêche que je comprend mal comment fonctionne SelectAction, ainsi que TreeNodeSelectAction.Select et toute la clique ...
Excuses moi pour ces questions, mais j'essaye de bien comprendre. Ca fait une semaine que je suis sur ce problème qui est censé être facile (censé), donc j'essaye d'éviter de faire les mêmes erreurs.
|
|
mercredi 24 octobre 2012 à 17:02:07 |
Re : Copie de fichiers .exe via des Treeviews

swohard
|
Je vais voir ça, et je te dis si c'est bon. 
|
|
mercredi 24 octobre 2012 à 17:42:52 |
Re : Copie de fichiers .exe via des Treeviews

ucfoutu
|
Bonjour,
Etes-vous certain de ce que n'existe pas, comme sous VB6, la propriété FullPath de l'objet selectedItem ? ===>> et que par exemple ===>>>
TreeView1.SelectedItem.FullPath ne retournerait pas tout seul comme un grand une chaine de caractères représentant le chemin complet de l'élément sélectionné dans la TreeView ?
Bien sur (si marche, comme je veux le croire) : pas le selectedItem mais pour chaque machin dans les items sélectionnés : machin.Fullpath est un chemin complet de l'item machin.
Et dès lors que l'on a ce chemin, le reste devrait être simple (selecteditem retournant quant à lui, le nom seul du fichier ou dossier) : contrôler si fichier ou dossier et agir en conséquence.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
|
|
mercredi 24 octobre 2012 à 18:01:18 |
Re : Copie de fichiers .exe via des Treeviews

Le Pivert
|
C'est tout à fait exact UCFOUTU il y a un code pour récupérer le chemin complet:
tView_Serveur.SelectedNode.FullPath
Mais vu que les chemin sont en durs j'ai pensé qu'il valait mieux extraire le nom du fichier pour le chemin de destination.
Pour showhard quand tu mets ceci dans l'evenement AfterSelect
MsgBox(tView_Serveur.SelectedNode.ToString)
Tu obtiens : TreeNode: nom du fichier.
Donc pour avoir le nom seul du fichier tu utilises Replace pour éliminer TreeNode:
Car pour le chemin de destination il te faut le nom du fichier.
Pour ce qui est de cela
"Cela n'empêche que je comprend mal comment fonctionne SelectAction, ainsi que TreeNodeSelectAction.Select et toute la clique ..."
Je ne sais pas. Mais en le mettant dans l'evenement Form1_Load cela ne risque pas de fonctionner
Il faut que tu saches que Form1_Load est l'evenement qui se produit à l'ouverture de l'application et AfterSelect comme son nom l'indique cela se produit après avoie sélectionné un noeud
Comme je te l'ai fait cela fonctionne correctement
@+Le Pivert
|
|
jeudi 25 octobre 2012 à 11:10:24 |
Re : Copie de fichiers .exe via des Treeviews

swohard
|
MsgBox(tView_Serveur.SelectedNode.ToString)
Tu obtiens : TreeNode: nom du fichier.
Donc pour avoir le nom seul du fichier tu utilises Replace pour éliminer TreeNode:
Car pour le chemin de destination il te faut le nom du fichier.
D'accord! Merci pour la précision Le Pivert  Et merci beaucoup pour toutes ces réponses apportés et d'y avoir consacré du temps dessus!
Comme je te l'ai fait cela fonctionne correctement
J'en ai aucun doute et d'ailleurs tout fonctionne. J'espère qu'un jour ça sera moi qui serait en mesure d'aider les autres!
D'après ce que tu me dis, il faudrait en faite mettre SelectAction en méthode alors, et l'appeler ensuite (en dehors du Form_Load bien entendu). Je vais étudier cette piste là pour une prochaine fois!
Maintenant, je dois voir comment appeler l'interface de connexion au NAS avant de lancer ces instructions... Je vais me marrer!
Merci à vous pour vos interventions et passez une bonne journée. 
|
|
Cette discussion est classée dans : fichier, exe, dossier, system, copie
Répondre à ce message
Sujets en rapport avec ce message
Copie de dossier [ par jimy neutron ]
Bonsoir,Quelqu'un connaitrait-il comment copier un dossier (folder) d'un disk à un autre, sans se soucier du contenu. (donc, pas de copie de fichier p
Ouverture unique dossier et copie [ par lemonwarez ]
Bonjour,Je suis en train de faire un programme Console mais, malheureusement, j'ai un gros problème.Le programme doit ouvrir et copier un fichier d'un
Erreur sur copie de fichier. "system.UnauthorizedAccessException" [ par docserta06 ]
Bonsoir, J'ai systématiquement le message d'erreur suivant lorsque je copie un fichier en ecrasant un fichier existant. "system.UnauthorizedAccessE
Copie de fichiers [ par Mercure ]
Salut!J'aimerais savoir comment copier un fichier des ficheirs dans un autre repertoire dependant de da la date de creation et de modification de ceux
test + copie de fichier marche pas !argh [ par Enderk ]
Dans mon prog, je test la presence d'un fichier, si il est present le prog se stop mais si il est absent je copie la sauvegarde dans le rep. Il faut s
Programme [ par milo2009 ]
milo2009Salut,j'ai fait un programme, que j'ai mis dans un dossier appelé "com", j'ai mis aussi un fichier txt, jpg, com, exe.et un executable avec vb
Copie System [ par Farquaad ]
Bonjours, j'aimerai savoir s'il est possible de recuperer les informations de nom de fichier,taille copier,etat d'avancement quand windows fait une co
Prob... mon prog detecter par norton ???? [ par castor62 ]
BonjourJ'ai utilisé une fonction suivante dans mon prog :Dim fsSet fs = CreateObject("Scripting.FileSystemObject")'Copie fichier.exe vèrs le_fichier.e
un exe qui se copie automatiquement dans un dossier défini !!! [ par mric51188 ]
voila je suis débutant et je cherche la source pour que mon programme se copie automatiquement vers un dossier defini (pour mon ca ces le dossier de d
*** COPIE D'UN FICHIER *** [ par Heny ]
Salut a tous'================================================'****Enregistrement d'un fichier de sauvgarde****'Créer le dossierSet fs = CreateObject("
Livres en rapport
|
Derniers Blogs
SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet [ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS.[ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS. par Patrick Guimonet
C'est un point peu mis en avant mais SharePoint 2013 a été l'occasion de remettre de l'ordre dans les modèles de sites. Tout d'abord, un certain nombre de modèles ont été tout simplement rendus obsolètes (cf. Fonctionnalités déco...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Forum
RE : DEAMANDE RE : DEAMANDE par bassomarosa
Cliquez pour lire la suite par bassomarosa
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|