OVH Cloud OVH Cloud

Remplacer les valeurs d'erreurs

11 réponses
Avatar
GL
Bonjour,

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.

1 réponse

1 2
Avatar
GL
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

objStream.SaveToFile Fichier, adSaveCreateOverWrite

objStream.Close
Set objStream = Nothing
Fichier_CSV_UTF8 = Enlever_BOM(Fichier)

End Function
'====================================================== >
Function Enlever_BOM(Fichier)

Dim Writer, Reader, FileSize
Set Writer = CreateObject("Adodb.Stream")
Set Reader = CreateObject("Adodb.Stream")

Reader.Open
Reader.LoadFromFile Fichier

Writer.Mode = 3
Writer.Type = 1
Writer.Open
Reader.Position = 5
Reader.CopyTo Writer, -1

Writer.SaveToFile Fichier, 2

Enlever_BOM = Fichier

Set Writer = Nothing
Set Reader = Nothing
End Function
'=======================================================
1 2