Je suis en train de me fabriquer une macro d'exportation
(notamment au format csv). D'ailleurs c'est bizarre qu'il
n'existe pas une fonctionnalité d'exportation d'une plage
donnée en natif...
Je recopie donc par valeur les données à exporter puis lance
l'exportation et je voudrais l'option "remplacer les valeurs d'erreurs"
(en général par vide).
Mais il n'existe pas de
.SpecialCells(xlCellValueContainsAnErrorIdentifierProvidedByMicroMouAfterUsersRequestsToFulfillTheirCustomersDesires)
Comment feriez-vous au plus simple ?
Merci d'avance.
Si tu as des caractères spéciaux dans une plage de cellules, cette procédure "Test()" permet d'enregistrer cette plage de cellule au format CSV utilisant directement le format UTF8.
Lorsque le fichier .CSV est créé, dans l'explorateur Windows, tu fais un clic droit sur le fichier et tu choisis la commande "ouvrir avec" et tu retiens l'application "NotePad".
Pour exécuter ce code, tu as besoin d'ajouter la référence suivante à partir de la barre des menus de la fenêtre de l'éditeur de code / Références / et tu coches : "Microsoft Activex Data Objects 2.8 Library"
Dans la procédure test() tu n'as qu'à spécifier le chemin et le nom du fichier .csv à générer. N'oublie pas de spécifier le nom du classeur, le nom de la feuille de calcul et l'adresse de la plage de cellules à traite
Alors là je suis scotché !! ;-) Je vais regarder cela de plus près ce weekend.
Dans l'esprit, c'est bien ce que je voulais : pouvoir spécifier le Character-Set à l'ouverture du fichier.
Merci.
r.
'====================================================== > Sub Test() 'Requiert : "Microsoft Activex Data Objects 2.8 Library"
Dim Fichier As String, Tblo As Variant
'Chemin + nom du fichier où se retrouveront 'les données au format UTF8 Fichier = "c:UsersdenisDocumentsMichD2.csv"
On Error Resume Next 'Le fichier Excel désigné doit être ouvert With Workbooks(ThisWorkbook.Name) 'Nom feuille à adapter With .Worksheets("Feuil1") With .Range("A1:E" & .Range("A65536").End(xlUp).Row) .SpecialCells(xlCellTypeFormulas, xlErrors) = "" .SpecialCells(xlCellTypeConstants, xlErrors) = "" Tblo = .Value End With End With End With
Fichier = Fichier_CSV_UTF8(Fichier, Tblo)
End Sub
'====================================================== > Function Fichier_CSV_UTF8(Fichier As String, Tblo As Variant) Dim A As Long, B As Long Dim Texte As String Dim objStream As ADODB.Stream
Set objStream = New ADODB.Stream objStream.Open objStream.Charset = "utf-8" objStream.Type = adTypeText objStream.LineSeparator = adCRLF objStream.Position = 0
For A = 1 To UBound(Tblo, 1) Texte = "" For B = 1 To UBound(Tblo, 2) Texte = Texte & Replace(Replace(Replace(Tblo(A, B), _ "r", " "), "n", " "), ";", ".") & ";" Next objStream.WriteText Texte, adWriteLine Next
Set Writer = Nothing Set Reader = Nothing End Function '=======================================================
Le 08/05/2014 20:52, MichD a écrit :
Si tu as des caractères spéciaux dans une plage de cellules, cette
procédure "Test()" permet d'enregistrer cette plage de cellule au format
CSV utilisant directement le format UTF8.
Lorsque le fichier .CSV est créé, dans l'explorateur Windows, tu fais un
clic droit sur le fichier et tu choisis la commande "ouvrir avec" et tu
retiens l'application "NotePad".
Pour exécuter ce code, tu as besoin d'ajouter la référence suivante à
partir de la barre des menus de la fenêtre de l'éditeur de code /
Références / et tu coches :
"Microsoft Activex Data Objects 2.8 Library"
Dans la procédure test() tu n'as qu'à spécifier le chemin et le nom du
fichier .csv à générer. N'oublie pas de spécifier le nom du classeur, le
nom de la feuille de calcul et l'adresse de la plage de cellules à traite
Alors là je suis scotché !! ;-)
Je vais regarder cela de plus près ce weekend.
Dans l'esprit, c'est bien ce que je voulais : pouvoir
spécifier le Character-Set à l'ouverture du fichier.
Merci.
r.
'====================================================== > Sub Test()
'Requiert : "Microsoft Activex Data Objects 2.8 Library"
Dim Fichier As String, Tblo As Variant
'Chemin + nom du fichier où se retrouveront
'les données au format UTF8
Fichier = "c:UsersdenisDocumentsMichD2.csv"
On Error Resume Next
'Le fichier Excel désigné doit être ouvert
With Workbooks(ThisWorkbook.Name)
'Nom feuille à adapter
With .Worksheets("Feuil1")
With .Range("A1:E" & .Range("A65536").End(xlUp).Row)
.SpecialCells(xlCellTypeFormulas, xlErrors) = ""
.SpecialCells(xlCellTypeConstants, xlErrors) = ""
Tblo = .Value
End With
End With
End With
Fichier = Fichier_CSV_UTF8(Fichier, Tblo)
End Sub
'====================================================== > Function Fichier_CSV_UTF8(Fichier As String, Tblo As Variant)
Dim A As Long, B As Long
Dim Texte As String
Dim objStream As ADODB.Stream
Set objStream = New ADODB.Stream
objStream.Open
objStream.Charset = "utf-8"
objStream.Type = adTypeText
objStream.LineSeparator = adCRLF
objStream.Position = 0
For A = 1 To UBound(Tblo, 1)
Texte = ""
For B = 1 To UBound(Tblo, 2)
Texte = Texte & Replace(Replace(Replace(Tblo(A, B), _
"r", " "), "n", " "), ";", ".") & ";"
Next
objStream.WriteText Texte, adWriteLine
Next
Si tu as des caractères spéciaux dans une plage de cellules, cette procédure "Test()" permet d'enregistrer cette plage de cellule au format CSV utilisant directement le format UTF8.
Lorsque le fichier .CSV est créé, dans l'explorateur Windows, tu fais un clic droit sur le fichier et tu choisis la commande "ouvrir avec" et tu retiens l'application "NotePad".
Pour exécuter ce code, tu as besoin d'ajouter la référence suivante à partir de la barre des menus de la fenêtre de l'éditeur de code / Références / et tu coches : "Microsoft Activex Data Objects 2.8 Library"
Dans la procédure test() tu n'as qu'à spécifier le chemin et le nom du fichier .csv à générer. N'oublie pas de spécifier le nom du classeur, le nom de la feuille de calcul et l'adresse de la plage de cellules à traite
Alors là je suis scotché !! ;-) Je vais regarder cela de plus près ce weekend.
Dans l'esprit, c'est bien ce que je voulais : pouvoir spécifier le Character-Set à l'ouverture du fichier.
Merci.
r.
'====================================================== > Sub Test() 'Requiert : "Microsoft Activex Data Objects 2.8 Library"
Dim Fichier As String, Tblo As Variant
'Chemin + nom du fichier où se retrouveront 'les données au format UTF8 Fichier = "c:UsersdenisDocumentsMichD2.csv"
On Error Resume Next 'Le fichier Excel désigné doit être ouvert With Workbooks(ThisWorkbook.Name) 'Nom feuille à adapter With .Worksheets("Feuil1") With .Range("A1:E" & .Range("A65536").End(xlUp).Row) .SpecialCells(xlCellTypeFormulas, xlErrors) = "" .SpecialCells(xlCellTypeConstants, xlErrors) = "" Tblo = .Value End With End With End With
Fichier = Fichier_CSV_UTF8(Fichier, Tblo)
End Sub
'====================================================== > Function Fichier_CSV_UTF8(Fichier As String, Tblo As Variant) Dim A As Long, B As Long Dim Texte As String Dim objStream As ADODB.Stream
Set objStream = New ADODB.Stream objStream.Open objStream.Charset = "utf-8" objStream.Type = adTypeText objStream.LineSeparator = adCRLF objStream.Position = 0
For A = 1 To UBound(Tblo, 1) Texte = "" For B = 1 To UBound(Tblo, 2) Texte = Texte & Replace(Replace(Replace(Tblo(A, B), _ "r", " "), "n", " "), ";", ".") & ";" Next objStream.WriteText Texte, adWriteLine Next