J'ai une appli qui ouvre un fichier .csv "source", qui copie les données qu'il contient vers un second fichier excel, je modifie quelques valeurs de ce fichier avec un coeff, et je l'enregistre vers un dossier spécifique en .csv
Voici le code :
'----------------------Création TABLE 1--------------------
'Ouverture table source
'Try
excel.Workbooks.Open(CheminTableModele & tablesource1)
'Catch ex As Exception
'MsgBox("Accès impossible aux tables sources, vérifier leurs emplacements.", vbCritical, "Erreur d'accès au fichier")
'Exit Sub
'End Try
nomfichiersource = excel.ActiveWorkbook.Name
t = Len(nomfichiersource)
nomfichiersource = Mid(nomfichiersource, 1, t - 4)
'Copies données
excel.Range("A1:I105").Copy()
excel.Application.DisplayAlerts = False
excel.ActiveWorkbook.Close(SaveChanges:=False)
'Création nouvau Tableur Excel
excel.Workbooks.Add()
excel.Sheets("Feuil1").Select()
nomfichiercorrigé = excel.ActiveWorkbook.Name
'Collage données
excel.ActiveSheet.Paste()
excel.Selection.NumberFormat = "0"
r = excel.Range("B2:B105")
' pour chaque cellule
For Each c In r
If c.Value Mod 60 <> 0 Then
' Si on veut on peut passer par une variable pour le calcul
c.Value = c.Value * CoeffTemp1Focale1
End If
Next
r = excel.Range("C2:C105")
' pour chaque cellule
For Each c In r
If c.Value Mod 60 <> 0 Then
' Si on veut on peut passer par une variable pour le calcul
c.Value = c.Value * CoeffTemp1Focale2
End If
Next
r = excel.Range("D2:D105")
' pour chaque cellule
For Each c In r
If c.Value Mod 60 <> 0 Then
' Si on veut on peut passer par une variable pour le calcul
c.Value = c.Value * CoeffTemp1Focale3
End If
Next
r = excel.Range("E2:E105")
' pour chaque cellule
For Each c In r
If c.Value Mod 60 <> 0 Then
' Si on veut on peut passer par une variable pour le calcul
c.Value = c.Value * CoeffTemp1Focale4
End If
Next
r = excel.Range("F2:F105")
' pour chaque cellule
For Each c In r
If c.Value Mod 60 <> 0 Then
' Si on veut on peut passer par une variable pour le calcul
c.Value = c.Value * CoeffTemp1Focale5
End If
Next
r = excel.Range("G2:G105")
' pour chaque cellule
For Each c In r
If c.Value Mod 60 <> 0 Then
' Si on veut on peut passer par une variable pour le calcul
c.Value = c.Value * CoeffTemp1Focale6
End If
Next
r = excel.Range("H2:H105")
' pour chaque cellule
For Each c In r
If c.Value Mod 60 <> 0 Then
' Si on veut on peut passer par une variable pour le calcul
c.Value = c.Value * CoeffTemp1Focale7
End If
Next
'Sécurité 250
If excel.Application.WorksheetFunction.CountIf(excel.Range("A1:H105"), ">250") > 0 Then
MsgBox("Attention : Valeur de tables maximale atteinte (=250), poursuite de création des tables, mais éclairement de l'éclairage + D25/D10 à vérifier !", vbOKOnly + vbInformation, "Avertissement")
For Each Cellule In excel.Range("A1:H105")
i = i + 1
If Cellule.Value > 250 Then
Cellule.Value = "250"
End If
Next Cellule
End If
'Enregistrement
NomFichier = nomfichiersource
chemintabledestination = chemintables & dossiertable
'excel.ActiveWorkbook.Save()
'excel.ActiveWorkbook.SaveCopyAs(chemintabledestination & "" & NomFichier & ".csv")
excel.ActiveWorkbook.SaveCopyAs(chemintabledestination & "" & NomFichier)
excel.ActiveWorkbook.Close()
'FIN Table 1
Sauf que voilà, quand il enregistre, et que j'ouvre le fichier csv, j’obtiens par exemple dans la colonne A :
"0;183;138;92;63;48;43;42;0"
Alors que je voudrais :
En colonne A : 0, B : 183, C : 138.....
J'ai fait il y a peu de temps, une appli similaire mais en VBA. Celle ci m'enregistrait bien le fichier en csv, mais sans ces fichus séparateurs ";" !
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 8 janv. 2013 à 19:28
Les constantes Excel ne sont, en effet, pas reconnues dans le monde .Net, c'est normal.
Il te suffit d'aller dans la fenêtre de débogage du VBA de Excel et de demander l'affichage de la valeur numérique que cette constante représente :
? xlCSV
qui te renverra le chiffre 6.
Soit tu mets 6, soit tu te crées une constante perso.
Mais les fichiers CSV sont, par définition, des fichiers à séparateurs point-virgule.
Les fichiers à séparateur tabulation sont des fichiers texte ... mais rien ne t'empèche de l'appeler .CSV si tu le souhaites. La seule chose que cela change, c'est la méthode de sauvegarde :
Pour info, cette syntaxe est issue de Excel 2010, compatible avec 2003, mais les choix de type de fichiers sont légèrement mieux documentés lorsque tu fais un SaveAs
J'ai fait ce que tu m'as dis, le .csv renvoie bien 6.
J'ai essayé en csv "DOS" (variable 24), et là impeccable, avec le mode local = True, j'ai bien les séparations avec un tab.
Au cas où, mon code :
Dim xlCSVWindows As Integer = 24
excel.ActiveWorkbook.SaveAs(Filename:=chemintabledestination & "" & NomFichier & ".csv", FileFormat:=xlCSVWindows, Local:=True)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 8 janv. 2013 à 09:29
Salut
Dans ton exemple, tu ouvres un fichier CSV et les données sont stockées dans une feuille Excel.
Au moment du "SaveAs", tu as donc des cellules normales à stocker sous forme CSV.
Donner l'extension .CSV a un fichier ne suffit pas à définir son type. Le SaveAs ne suffit pas, il faut aussi lui préciser le type de séparateur choisi (tabulation, point-virgule ...).
Enregistre une macro dans Excel pendant que tu fais toi même un enregistrement de fichier CSV et tu auras la syntaxe VBA que tu pourras ainsi transcrire dans ton code en .Net
As-tu rendu obligatoire la déclaration des variables (avec Option Explicit) ?
Je te le conseille fortement.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
J'ai fait la manip', voici le code VBA qui en résulte :
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\jbotreau\Bureau\pgmX3_T1a.csv", FileFormat:=xlCSV _
, CreateBackup:=False
Pour l'adapter au VB.Net, j'ai retranscris en :
excel.ActiveWorkbook.SaveAs(Filename:="C:\Documents and Settings\xxxx\Bureau\pgmX3_T1a.csv", FileFormat:=xlCSV, CreateBackup:=False)
Mais visiblement dans VB.Net l'élément "ActiveWorkbook.SaveAs" ne prend pas de paramètres "Fileformat" ? j'ai l'impression qu'il n'a qu'un paramètre "Fileformat".
Ce code est donc incompatible VB.NET ?...
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?