salut kropernic,
Ton idée est bonne .... mais c'est pas les directives que j'ai des etages superieurs .... et pour les faire changer d'avis ....
salut kropernic,
Ton idée est bonne .... mais c'est pas les directives que j'ai des etages superieurs .... et pour les faire changer d'avis ....
Ok bin alors j'ai rien dit
Je ne vois pas bien pourquoi au début tu voulais lister tous les fichiers et les déplacer, et maintenant tu nous parle de ne déplacer qu'un fichier ?
Et je ne vois pas non plus ou est ton problème, tu as le code pour déplacer un fichier, au lieu de tous les déplacer tu déplaces seulement le bon et voilà ...
Ensuite je ne vois pas ce qui t'empêche de lancer une commande dos (même si tu n'en as pas besoin puisque le framework permet de faire la même chose) en invisible, tes "etages supérieurs" n'en verront rien ...
parce qu'entre temps les directives ont changées tout simplement.
Je n'y peux strictement rien, le cahier des charges est inexistant et je dois composer avec malheureusement.
Maintenant je dois :
- downloader tous les .xls d'un folder a la racine de notre site via FTP : c'est bon
- Les mettre dans un repX en local : c'est bon
- charger un des fichiers .xls du repX dans mon appli a partir d'une dialbox (donc je choisis visuellement mon fichier) : c'est bon
- traiter ledit fichier : c'est bon
- deplacer enfin ce .xls traite dans repY : c'est presque bon
j'ai juste du mal a traduire en vb : deplacer seulement ce fichier et pas un autre. Mon probleme est la en fait
et bien tu charges ton fichier dans l'appli, tu connais donc son nom (que tu dois stocker quelque part), tu as juste à déplacer seulement celui là plutôt que de tout reparcourir et tout déplacer.
bon alors j'ai essaye et reessaye pendant plusieurs jours ... eh bien ca ne fonctionne pas ....
J'arrive sans probleme a deplacer tous les fichiers d'un rep a un autre, mais deplacer le fichier utilise et uniquement celui la, je n'y arrive pas.
- J'ai, dans un repC de mon DD differents fichiers .xls
- Je choisis un des fichiers .xls et je charge les valeurs de ses cellules dans
un formulaire grace à (version simplifiée de la sub) :
a ce moment les données sont chargées je n'ai plus besoin du fichier excel, je ferme donc le fichier grace a CloseAppExcel()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54
55
56 Private Sub chargement() ' Fichier Excel Dim CheminFicher As String Dim BoiteDialogue As New OpenFileDialog If AppExcel IsNot Nothing Then MessageBox.Show("Excel Worksheet is closing please wait") If xlWorkSheetOne IsNot Nothing Then xlWorkSheetOne = Nothing End If If xlWorkSheetTwo IsNot Nothing Then xlWorkSheetTwo = Nothing End If If xlWorkbook IsNot Nothing Then xlWorkbook = Nothing End If AppExcel.Quit() AppExcel = Nothing End If With BoiteDialogue ' Initialisation de la boite de dialogue .Title = "Load Data" .InitialDirectory = "\\nas\repA\repB\repC\" ' répertoire de telechargement des fiches .Filter = "Fichiers Excel |*.xls; *.xlsx" ' vérification de la séléction If .ShowDialog() = System.Windows.Forms.DialogResult.OK Then CheminFicher = .FileName Else MessageBox.Show("No Excel file selected") Exit Sub ' Abandon de la routine End If 'ouvre l'onglet 1 de l'application AppExcel = New OXL.Application xlWorkbook = AppExcel.Workbooks.Open(CheminFicher) xlWorkSheetOne = CType(xlWorkbook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet) AppExcel.Visible = False 'chargement des data en Textbox Dim rng As OXL.Range = Nothing rng = CType(Me.xlWorkSheetOne.Cells(10, 4), Microsoft.Office.Interop.Excel.Range) Me.tbDestinaraire.Text = CType(rng.Value, String) rng = CType(Me.xlWorkSheetOne.Cells(10, 7), Microsoft.Office.Interop.Excel.Range) Me.txtPRENOM.Text = CType(rng.Value, String) rng = CType(Me.xlWorkSheetOne.Cells(10, 6), Microsoft.Office.Interop.Excel.Range) Me.txtNOM.Text = CType(rng.Value, String) rng = CType(Me.xlWorkSheetOne.Cells(10, 8), Microsoft.Office.Interop.Excel.Range) Me.TxtNAISSANCE.Text = CType(rng.Value, String) CloseAppExcel() End With End sub
Mon souci est que je ne vois absolument pas ou et comment j'ai en memoire le nom du fichier excel que je viens d'utiliser pour le deplacer.
Je suis bien obligé de faire un premier le closeAppExcel() pour pouvoir deplacer le fichier non ?
hum, je ne sais pas moi, peut être
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim CheminFicher As String
ben j'ai deja essaye de faire un move avec le contenu de cheminfichier mais cela ne fonctionne pas
Comment ça "ça ne fonctionne pas" ?
Le fichier n'est pas déplacé ?
Tu as une erreur ?
A quoi correspond "CloseAppExcel()" ?
Pense à faire un xlWorkbook.Close (ce que tu fais peut être dans "CloseAppExcel")
alors en ce qui concerne la sub CloseAppExcel(), la voila :
et pour etre plus précis, effectivement il n'y a pas de déplacement du tout. Je n'ai ni erreur ni avertissement a l'execution. Je me demande dailleurs si le deplacement du fichier ne pourrait pas être fait dans le CloseAppExcel() ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub CloseAppExcel() 'procedure de fermeture du fichier excel If xlWorkSheetOne IsNot Nothing Then xlWorkSheetOne = Nothing End If If xlWorkSheetTwo IsNot Nothing Then xlWorkSheetTwo = Nothing End If If xlWorkbook IsNot Nothing Then xlWorkbook = Nothing End If If AppExcel IsNot Nothing Then AppExcel.Quit() AppExcel = Nothing End If End Sub
ça n'a pas de sens de faire ça dans la fermeture d'excel.
Es-tu allé en pas à pas vérifier les chemin quand tu arrives sur ton move ?
Vérifie la valeur de ton fichier d'origine et la valeur de ton fichier de destination.
Et poste le code avec le move si ça ne fonctionne pas.
Difficile de reposter le move file que j'avais fait vu que je l'ai enlevé pour cause d'inefficacite.
Je viens de tester en debug pour voir, en mettant mon point d'arret sur le CloseAppExcel(), "CheminFicher" me renvoie "\\nas\repA\repB\repC\le_bon_fichier_utilise.xls" ce qui correspond bien au path + au fichier que je voudrais deplacer.
Comme j'ai (partie de mon code initial)
j'ai teste .Filename qui me renvoie egalement la bonne valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ' vérification de la séléction If .ShowDialog() = System.Windows.Forms.DialogResult.OK Then CheminFicher = .FileName
J'en avais conclu que je pouvais faire un filename.move mais je pense avoir un probleme de formulation du code.
Est ce qu'au moins je suis sur la bonne voie ?
J'ai du faire un gestionnaire de fichier ...
ça va peut-être t'aider
ça, c'est pour te montrer comment jouer avec un fichier particulier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Dim CheminPhy As String = DossierName If My.Computer.FileSystem.DirectoryExists(CheminPhy) Then Dim Folder As New IO.DirectoryInfo(CheminPhy) For Each fic In Folder.GetFiles fic.Delete() Next End If
NB: Imports System.IO
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim CheminPhy As String = DossierName Dim FicPhys As New IO.FileInfo(CheminPhy & "/" & e.CommandArgument.ToString) FicPhys.Delete() ' Suppression physique
Et bien oui, donc dans "CheminFichier" on a le bon chemin, essaye de remetre le Move, et si tu as toujours l'erreur c'est que ton répertoire de destination n'est peut être pas correct.
merci BROWNIE pour ton aide, ca va me permettre de me familliariser plus en avant avec les manipulations de fichiers
Je reteste mon file.move pour voir asmduty
alors j'ai fait ca :
sauf que ........ je ne vois pas comment definir le chemin de destination (filedestination) du coup rien ne peut eventuellement fonctionner
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Private Sub filemove() Dim myDate As DateTime If Not (DateTime.TryParse(TxtDate.Text, myDate)) Then MessageBox.Show(" Date Error ") Exit Sub End If Try Dim FileSource As String = CheminFichier Dim FileDestination As String = .. If File.Exists(FileSource) = False Then MessageBox.Show("File not found") Exit Sub End If If File.Exists(FileDestination) Then File.Delete(FileDestination) End If File.Move(FileSource, FileDestination) Catch ex As Exception MessageBox.Show(String.Format("The process failed: {0}", ex.ToString())) End Try End Sub
Et que veux tu qu'on fasse ?
C'est à nous de te dire ou mettre ton fichier ?
mais non mais je me suis mal exprime
je sais tres bien ou le mettre c'est quasi me même chemin que l'ancien, j'ai du mal a trouver l'expression pour definir le filedestination, je pourrais mettre un truc du genre Dim FileDestination As String = "\\nas\repA\repB\RepC\" mais je n'ai pas le chemin complet puisque je n'ai pas le nom du xls dedans.
C'est ce que je ne comprends pas, pour moi un chemin c'est un chemin, un fichier c'est un fichier et ca je ne capte pas
bon alors maintenant j'ai essaye la chose suivante :
je reprends mon sub qui load les datas du fichier excel choisi vers le printform
je mets juste apres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 Private Sub Buttonload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonload.Click ' Fichier Excel Dim CheminFicher As String Dim BoiteDialogue As New OpenFileDialog txtDocteur2.Text = txtDocteur.Text If AppExcel IsNot Nothing Then MessageBox.Show("Excel Worksheet is closing please wait") If xlWorkSheetOne IsNot Nothing Then xlWorkSheetOne = Nothing End If If xlWorkSheetTwo IsNot Nothing Then xlWorkSheetTwo = Nothing End If If xlWorkbook IsNot Nothing Then xlWorkbook = Nothing End If AppExcel.Quit() AppExcel = Nothing End If With BoiteDialogue ' Initialisation de la boite de dialogue .Title = "Load Data" .InitialDirectory = "\\nas\Calculateur\data\encours\" ' répertoire de l'application .Filter = "Fichiers Excel |*.xls; *.xlsx" ' vérification de la séléction If .ShowDialog() = System.Windows.Forms.DialogResult.OK Then CheminFicher = .FileName Else MessageBox.Show("Aucun fichier Excel séléctionné") Exit Sub ' Abandon de la routine End If If Etiqoeiltraite.Text = "OD" Then Dim Filesource As String = .FileName Dim Filedestination As String = "\\NAS\calculateur\data\traites" 'ouvre l'onglet 1 de l'application AppExcel = New OXL.Application xlWorkbook = AppExcel.Workbooks.Open(CheminFicher) xlWorkSheetOne = CType(xlWorkbook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet) AppExcel.Visible = False 'chargement des data en Textbox Dim rng As OXL.Range = Nothing rng = CType(Me.xlWorkSheetOne.Cells(10, 4), Microsoft.Office.Interop.Excel.Range) Me.tbDestinaraire.Text = CType(rng.Value, String) rng = CType(Me.xlWorkSheetOne.Cells(10, 7), Microsoft.Office.Interop.Excel.Range) Me.txtPRENOM.Text = CType(rng.Value, String) rng = CType(Me.xlWorkSheetOne.Cells(10, 6), Microsoft.Office.Interop.Excel.Range) Me.txtNOM.Text = CType(rng.Value, String) MessageBox.Show("Data loaded in the form") CloseAppExcel() File.Move(Filesource, Filedestination) end if End If Je ne remets pas le cas pour if etiquette = OG c'est la même chosela dimension des filesource et filedestinationIf Etiqoeiltraite.Text = "OD" Then
et en fin de traitement, juste après avoir fermé le fichier excel, je demande le deplacement du dit fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim Filesource As String = .FileName Dim Filedestination As String = "\\NAS\repa\repb\repD"je verifie en debug,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CloseAppExcel() File.Move(Filesource, Filedestination) end if End If
filesource vaut "\\NAS\repa\repb\repc\le_bon_nom_de_fichier.xls"
Filedestination vaut "\\NAS\repa\repb\repD" (et non pas "\\NAS\repa\repb\repD\le_bon_nom_de_fichier.xls")
J'ai un message d'erreur a l'execution me disantJ'avoue que je commence a deprimer serieusement avec cette histoire de file.move.Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus.
Essaye de faire
plutôt que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If xlWorkbook IsNot Nothing Then xlWorkbook.close xlWorkbook = Nothing End If
dans ton CloseAppExcel()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 If xlWorkbook IsNot Nothing Then xlWorkbook = Nothing End If
L'histoire de le définir à nothing sans le fermer me parait étrange ...
Si le soucis persiste, rajout un system.threading.thread.sleep(2000) avant de déplacer le fichier, il est possible que le PC n'ai pas encore relaché le fichier d'Excel au moment ou tu essayes de le déplacer.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager