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.
Pour supprimer les cellules ayant une valeur d'erreur :
Pour supprimer les cellules '------------------------------------------ Sub test() On Error Resume Next With Worksheets("Feuil1") With .Range("A1:G25") .SpecialCells(xlCellTypeFormulas, xlErrors).Delete .SpecialCells(xlCellTypeConstants, xlErrors).Delete End With End With End Sub '------------------------------------------
Pour vider le contenu des cellules affichant des valeurs d'erreur '------------------------------------------ Sub test() On Error Resume Next With Worksheets("Feuil1") With .Range("A1:G25") .SpecialCells(xlCellTypeFormulas, xlErrors)="" .SpecialCells(xlCellTypeConstants, xlErrors)="" End With End With End Sub '------------------------------------------
Bonjour,
Pour supprimer les cellules ayant une valeur d'erreur :
Pour supprimer les cellules
'------------------------------------------
Sub test()
On Error Resume Next
With Worksheets("Feuil1")
With .Range("A1:G25")
.SpecialCells(xlCellTypeFormulas, xlErrors).Delete
.SpecialCells(xlCellTypeConstants, xlErrors).Delete
End With
End With
End Sub
'------------------------------------------
Pour vider le contenu des cellules affichant des valeurs d'erreur
'------------------------------------------
Sub test()
On Error Resume Next
With Worksheets("Feuil1")
With .Range("A1:G25")
.SpecialCells(xlCellTypeFormulas, xlErrors)=""
.SpecialCells(xlCellTypeConstants, xlErrors)=""
End With
End With
End Sub
'------------------------------------------
Pour supprimer les cellules ayant une valeur d'erreur :
Pour supprimer les cellules '------------------------------------------ Sub test() On Error Resume Next With Worksheets("Feuil1") With .Range("A1:G25") .SpecialCells(xlCellTypeFormulas, xlErrors).Delete .SpecialCells(xlCellTypeConstants, xlErrors).Delete End With End With End Sub '------------------------------------------
Pour vider le contenu des cellules affichant des valeurs d'erreur '------------------------------------------ Sub test() On Error Resume Next With Worksheets("Feuil1") With .Range("A1:G25") .SpecialCells(xlCellTypeFormulas, xlErrors)="" .SpecialCells(xlCellTypeConstants, xlErrors)="" End With End With End Sub '------------------------------------------
MichD
Et par macro, tu peux enregistrer au format CSV avec virgule ou point-virgule la plage de ton choix en utilisant cette macro. Elle enlève aussi les valeurs d'erreur.
'----------------------------------- Sub EnregistrerFormatSpecial()
Dim Plage As Range, Séparateur As String Dim NomFichierSauvegarde As String
On Error Resume Next With Worksheets("Feuil1") 'Nom feuille à déterminer With .Range("A1:G25") 'Plage de cellules à définir .SpecialCells(xlCellTypeFormulas, xlErrors) = "" .SpecialCells(xlCellTypeConstants, xlErrors) = "" Set Plage = .Cells End With End With
End Sub '----------------------------------- Sub SaveAsCSV(Plage As Range, Séparateur As String, _ NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1 For Each R In Plage.Rows Temp = "" For Each C In R.Cells Temp = Temp & C & Séparateur Next Temp = Left(Temp, Len(Temp) - 3) Print #1, Temp Next Close Set Plage = Nothing: Set C = Nothing: Set R = Nothing End Sub '-----------------------------------
Et par macro, tu peux enregistrer au format CSV avec virgule ou
point-virgule
la plage de ton choix en utilisant cette macro. Elle enlève aussi les
valeurs
d'erreur.
'-----------------------------------
Sub EnregistrerFormatSpecial()
Dim Plage As Range, Séparateur As String
Dim NomFichierSauvegarde As String
On Error Resume Next
With Worksheets("Feuil1") 'Nom feuille à déterminer
With .Range("A1:G25") 'Plage de cellules à définir
.SpecialCells(xlCellTypeFormulas, xlErrors) = ""
.SpecialCells(xlCellTypeConstants, xlErrors) = ""
Set Plage = .Cells
End With
End With
End Sub
'-----------------------------------
Sub SaveAsCSV(Plage As Range, Séparateur As String, _
NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1
For Each R In Plage.Rows
Temp = ""
For Each C In R.Cells
Temp = Temp & C & Séparateur
Next
Temp = Left(Temp, Len(Temp) - 3)
Print #1, Temp
Next
Close
Set Plage = Nothing: Set C = Nothing: Set R = Nothing
End Sub
'-----------------------------------
Et par macro, tu peux enregistrer au format CSV avec virgule ou point-virgule la plage de ton choix en utilisant cette macro. Elle enlève aussi les valeurs d'erreur.
'----------------------------------- Sub EnregistrerFormatSpecial()
Dim Plage As Range, Séparateur As String Dim NomFichierSauvegarde As String
On Error Resume Next With Worksheets("Feuil1") 'Nom feuille à déterminer With .Range("A1:G25") 'Plage de cellules à définir .SpecialCells(xlCellTypeFormulas, xlErrors) = "" .SpecialCells(xlCellTypeConstants, xlErrors) = "" Set Plage = .Cells End With End With
End Sub '----------------------------------- Sub SaveAsCSV(Plage As Range, Séparateur As String, _ NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1 For Each R In Plage.Rows Temp = "" For Each C In R.Cells Temp = Temp & C & Séparateur Next Temp = Left(Temp, Len(Temp) - 3) Print #1, Temp Next Close Set Plage = Nothing: Set C = Nothing: Set R = Nothing End Sub '-----------------------------------
GL
Le 06/05/2014 16:33, MichD a écrit :
Et par macro, tu peux enregistrer au format CSV avec virgule ou point-virgule la plage de ton choix en utilisant cette macro. Elle enlève aussi les valeurs d'erreur.
'----------------------------------- Sub EnregistrerFormatSpecial()
Dim Plage As Range, Séparateur As String Dim NomFichierSauvegarde As String
On Error Resume Next With Worksheets("Feuil1") 'Nom feuille à déterminer With .Range("A1:G25") 'Plage de cellules à définir .SpecialCells(xlCellTypeFormulas, xlErrors) = "" .SpecialCells(xlCellTypeConstants, xlErrors) = "" Set Plage = .Cells End With End With
Ok Merci beaucoup !
Pour l'export en CSV pour l'instant je passe par :
Mais le plus bizarre, c'est que j'ai un fichier .csv séparé par des VIRGULES (alors que les paramètres de windows, et donc l'export par le menu, me donne un fichier séparé par des point-virgules ;)
End Sub '----------------------------------- Sub SaveAsCSV(Plage As Range, Séparateur As String, _ NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1 For Each R In Plage.Rows Temp = "" For Each C In R.Cells Temp = Temp & C & Séparateur Next Temp = Left(Temp, Len(Temp) - 3) Print #1, Temp Next Close Set Plage = Nothing: Set C = Nothing: Set R = Nothing End Sub '-----------------------------------
Le 06/05/2014 16:33, MichD a écrit :
Et par macro, tu peux enregistrer au format CSV avec virgule ou
point-virgule
la plage de ton choix en utilisant cette macro. Elle enlève aussi les
valeurs
d'erreur.
'-----------------------------------
Sub EnregistrerFormatSpecial()
Dim Plage As Range, Séparateur As String
Dim NomFichierSauvegarde As String
On Error Resume Next
With Worksheets("Feuil1") 'Nom feuille à déterminer
With .Range("A1:G25") 'Plage de cellules à définir
.SpecialCells(xlCellTypeFormulas, xlErrors) = ""
.SpecialCells(xlCellTypeConstants, xlErrors) = ""
Set Plage = .Cells
End With
End With
Ok Merci beaucoup !
Pour l'export en CSV pour l'instant je passe par :
Mais le plus bizarre, c'est que j'ai un fichier .csv
séparé par des VIRGULES (alors que les paramètres de windows,
et donc l'export par le menu, me donne un fichier séparé par
des point-virgules ;)
End Sub
'-----------------------------------
Sub SaveAsCSV(Plage As Range, Séparateur As String, _
NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1
For Each R In Plage.Rows
Temp = ""
For Each C In R.Cells
Temp = Temp & C & Séparateur
Next
Temp = Left(Temp, Len(Temp) - 3)
Print #1, Temp
Next
Close
Set Plage = Nothing: Set C = Nothing: Set R = Nothing
End Sub
'-----------------------------------
Et par macro, tu peux enregistrer au format CSV avec virgule ou point-virgule la plage de ton choix en utilisant cette macro. Elle enlève aussi les valeurs d'erreur.
'----------------------------------- Sub EnregistrerFormatSpecial()
Dim Plage As Range, Séparateur As String Dim NomFichierSauvegarde As String
On Error Resume Next With Worksheets("Feuil1") 'Nom feuille à déterminer With .Range("A1:G25") 'Plage de cellules à définir .SpecialCells(xlCellTypeFormulas, xlErrors) = "" .SpecialCells(xlCellTypeConstants, xlErrors) = "" Set Plage = .Cells End With End With
Ok Merci beaucoup !
Pour l'export en CSV pour l'instant je passe par :
Mais le plus bizarre, c'est que j'ai un fichier .csv séparé par des VIRGULES (alors que les paramètres de windows, et donc l'export par le menu, me donne un fichier séparé par des point-virgules ;)
End Sub '----------------------------------- Sub SaveAsCSV(Plage As Range, Séparateur As String, _ NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1 For Each R In Plage.Rows Temp = "" For Each C In R.Cells Temp = Temp & C & Séparateur Next Temp = Left(Temp, Len(Temp) - 3) Print #1, Temp Next Close Set Plage = Nothing: Set C = Nothing: Set R = Nothing End Sub '-----------------------------------
MichD
| affreusement buggué VBA...
Non, c'est normal. Tu es dans une fenêtre VBA et dans cette fenêtre, le code utilise par défaut les paramètres américains comme pour le séparateur décimal, le format des dates...etc.
Si tu utilises la commande "enregistrer sous" du menu fichier et que tu choisis comme type de fichier .Csv, tu auras le point-virgule comme séparateur.
La macro proposée lorsque la plage n'est pas très grande permet de choisir le séparateur d'éléments du futur fichier .csv.
| affreusement buggué VBA...
Non, c'est normal. Tu es dans une fenêtre VBA et dans cette fenêtre, le code
utilise par défaut les paramètres américains comme pour le séparateur
décimal, le format des dates...etc.
Si tu utilises la commande "enregistrer sous" du menu fichier et que tu
choisis comme type de fichier .Csv, tu auras le point-virgule comme
séparateur.
La macro proposée lorsque la plage n'est pas très grande permet de choisir
le séparateur d'éléments du futur fichier .csv.
Non, c'est normal. Tu es dans une fenêtre VBA et dans cette fenêtre, le code utilise par défaut les paramètres américains comme pour le séparateur décimal, le format des dates...etc.
Si tu utilises la commande "enregistrer sous" du menu fichier et que tu choisis comme type de fichier .Csv, tu auras le point-virgule comme séparateur.
La macro proposée lorsque la plage n'est pas très grande permet de choisir le séparateur d'éléments du futur fichier .csv.
GL
Le 06/05/2014 21:46, MichD a écrit :
| affreusement buggué VBA...
Non, c'est normal. Tu es dans une fenêtre VBA et dans cette fenêtre, le code utilise par défaut les paramètres américains comme pour le séparateur décimal, le format des dates...etc.
Si tu utilises la commande "enregistrer sous" du menu fichier et que tu choisis comme type de fichier .Csv, tu auras le point-virgule comme séparateur.
La macro proposée lorsque la plage n'est pas très grande permet de choisir le séparateur d'éléments du futur fichier .csv.
Oui. Effectivement c'est pour des plages pas très grandes.
Le deuxième intérêt de cette macro que je vais finalement reprendre (ça évite de créer un nouveau classeur juste pour la sauvegarde en CSV) c'est qu'on peut vérifier si les données contiennent déjà le séparateur, et avertir ainsi l'utilisateur d'un problème...
Merci encore.
Le 06/05/2014 21:46, MichD a écrit :
| affreusement buggué VBA...
Non, c'est normal. Tu es dans une fenêtre VBA et dans cette fenêtre, le
code utilise par défaut les paramètres américains comme pour le
séparateur décimal, le format des dates...etc.
Si tu utilises la commande "enregistrer sous" du menu fichier et que tu
choisis comme type de fichier .Csv, tu auras le point-virgule comme
séparateur.
La macro proposée lorsque la plage n'est pas très grande permet de
choisir le séparateur d'éléments du futur fichier .csv.
Oui. Effectivement c'est pour des plages pas très grandes.
Le deuxième intérêt de cette macro que je vais finalement
reprendre (ça évite de créer un nouveau classeur juste pour
la sauvegarde en CSV) c'est qu'on peut vérifier si les données
contiennent déjà le séparateur, et avertir ainsi l'utilisateur
d'un problème...
Non, c'est normal. Tu es dans une fenêtre VBA et dans cette fenêtre, le code utilise par défaut les paramètres américains comme pour le séparateur décimal, le format des dates...etc.
Si tu utilises la commande "enregistrer sous" du menu fichier et que tu choisis comme type de fichier .Csv, tu auras le point-virgule comme séparateur.
La macro proposée lorsque la plage n'est pas très grande permet de choisir le séparateur d'éléments du futur fichier .csv.
Oui. Effectivement c'est pour des plages pas très grandes.
Le deuxième intérêt de cette macro que je vais finalement reprendre (ça évite de créer un nouveau classeur juste pour la sauvegarde en CSV) c'est qu'on peut vérifier si les données contiennent déjà le séparateur, et avertir ainsi l'utilisateur d'un problème...
Merci encore.
GL
Le 06/05/2014 16:33, MichD a écrit :
'----------------------------------- Sub SaveAsCSV(Plage As Range, Séparateur As String, _ NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1 For Each R In Plage.Rows Temp = "" For Each C In R.Cells Temp = Temp & C & Séparateur Next Temp = Left(Temp, Len(Temp) - 3) Print #1, Temp Next Close Set Plage = Nothing: Set C = Nothing: Set R = Nothing End Sub '-----------------------------------
Un autre problème c'est pour l'unicode, ou plus généralement la page de code du fichier texte.
Apparemment, il n'y a pas d'option pour Open pour fixer la page de code... (XL 2010/Office14)
Cordialement.
Le 06/05/2014 16:33, MichD a écrit :
'-----------------------------------
Sub SaveAsCSV(Plage As Range, Séparateur As String, _
NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1
For Each R In Plage.Rows
Temp = ""
For Each C In R.Cells
Temp = Temp & C & Séparateur
Next
Temp = Left(Temp, Len(Temp) - 3)
Print #1, Temp
Next
Close
Set Plage = Nothing: Set C = Nothing: Set R = Nothing
End Sub
'-----------------------------------
Un autre problème c'est pour l'unicode, ou plus
généralement la page de code du fichier texte.
Apparemment, il n'y a pas d'option pour Open
pour fixer la page de code... (XL 2010/Office14)
'----------------------------------- Sub SaveAsCSV(Plage As Range, Séparateur As String, _ NomFichierSauvegarde As String)
Dim Temp As String, R As Range, C As Range
Open NomFichierSauvegarde For Output As #1 For Each R In Plage.Rows Temp = "" For Each C In R.Cells Temp = Temp & C & Séparateur Next Temp = Left(Temp, Len(Temp) - 3) Print #1, Temp Next Close Set Plage = Nothing: Set C = Nothing: Set R = Nothing End Sub '-----------------------------------
Un autre problème c'est pour l'unicode, ou plus généralement la page de code du fichier texte.
Apparemment, il n'y a pas d'option pour Open pour fixer la page de code... (XL 2010/Office14)
Cordialement.
MichD
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la problématique!
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la
problématique!
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la problématique!
GL
Le 07/05/2014 16:46, MichD a écrit :
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la problématique!
Open et Write / Print semblent conçus pour travailler en ASCII, ou avec la page de code de windows (latin1 = cp1252 = ISO8859-1 qui correspond aux langues dites "occidentales").
Si une cellule contient par exemple : α β γ Print va écrire des trucs illisibles dans le fichier, alors que l'exportation en format délimité unicode (.txt, colonnes séparées par des tabulations) va écrire dans le fichier en suivant l'encodage UTF-16 avec un BOM FFFE.
De sorte que la lecture du fichier dans un éditeur de texte (c'est l'intérêt des formats csv/txt) donnera bien les lettres α β γ (qui sont absentes de l'encodage latin1)
Grâce au BOM, l'importation du fichier par un autre programme se passera bien aussi (fichier unicode en UTF-16-LE).
En utilisant Print, apparemment, on ne peut écrire dans le fichier que de l'ASCII (proprement que de l'ASCII 128 et par extension du latin1)
Cdt.
Le 07/05/2014 16:46, MichD a écrit :
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la
problématique!
Open et Write / Print semblent conçus pour travailler
en ASCII, ou avec la page de code de windows (latin1 = cp1252 =
ISO8859-1 qui correspond aux langues dites "occidentales").
Si une cellule contient par exemple : α β γ
Print va écrire des trucs illisibles dans le fichier,
alors que l'exportation en format délimité unicode
(.txt, colonnes séparées par des tabulations)
va écrire dans le fichier en suivant l'encodage
UTF-16 avec un BOM FFFE.
De sorte que la lecture du fichier dans un éditeur de texte
(c'est l'intérêt des formats csv/txt) donnera bien les
lettres α β γ (qui sont absentes de l'encodage latin1)
Grâce au BOM, l'importation du fichier par un autre programme
se passera bien aussi (fichier unicode en UTF-16-LE).
En utilisant Print, apparemment, on ne peut écrire dans le fichier
que de l'ASCII (proprement que de l'ASCII 128 et par extension du
latin1)
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la problématique!
Open et Write / Print semblent conçus pour travailler en ASCII, ou avec la page de code de windows (latin1 = cp1252 = ISO8859-1 qui correspond aux langues dites "occidentales").
Si une cellule contient par exemple : α β γ Print va écrire des trucs illisibles dans le fichier, alors que l'exportation en format délimité unicode (.txt, colonnes séparées par des tabulations) va écrire dans le fichier en suivant l'encodage UTF-16 avec un BOM FFFE.
De sorte que la lecture du fichier dans un éditeur de texte (c'est l'intérêt des formats csv/txt) donnera bien les lettres α β γ (qui sont absentes de l'encodage latin1)
Grâce au BOM, l'importation du fichier par un autre programme se passera bien aussi (fichier unicode en UTF-16-LE).
En utilisant Print, apparemment, on ne peut écrire dans le fichier que de l'ASCII (proprement que de l'ASCII 128 et par extension du latin1)
Cdt.
DanielCo
Le 07/05/2014 16:46, MichD a écrit :
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la problématique!
Open et Write / Print semblent conçus pour travailler en ASCII, ou avec la page de code de windows (latin1 = cp1252 = ISO8859-1 qui correspond aux langues dites "occidentales").
Si une cellule contient par exemple : α β γ Print va écrire des trucs illisibles dans le fichier, alors que l'exportation en format délimité unicode (.txt, colonnes séparées par des tabulations) va écrire dans le fichier en suivant l'encodage UTF-16 avec un BOM FFFE.
De sorte que la lecture du fichier dans un éditeur de texte (c'est l'intérêt des formats csv/txt) donnera bien les lettres α β γ (qui sont absentes de l'encodage latin1)
Grâce au BOM, l'importation du fichier par un autre programme se passera bien aussi (fichier unicode en UTF-16-LE).
En utilisant Print, apparemment, on ne peut écrire dans le fichier que de l'ASCII (proprement que de l'ASCII 128 et par extension du latin1)
Cdt.
Bonjour,
Une fois ton ficjer csv créé, ouvre-le dans le bloc notes et enregistre-le en encodage UTF.
Daniel
Le 07/05/2014 16:46, MichD a écrit :
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la
problématique!
Open et Write / Print semblent conçus pour travailler
en ASCII, ou avec la page de code de windows (latin1 = cp1252 = ISO8859-1 qui
correspond aux langues dites "occidentales").
Si une cellule contient par exemple : α β γ
Print va écrire des trucs illisibles dans le fichier,
alors que l'exportation en format délimité unicode
(.txt, colonnes séparées par des tabulations)
va écrire dans le fichier en suivant l'encodage
UTF-16 avec un BOM FFFE.
De sorte que la lecture du fichier dans un éditeur de texte
(c'est l'intérêt des formats csv/txt) donnera bien les
lettres α β γ (qui sont absentes de l'encodage latin1)
Grâce au BOM, l'importation du fichier par un autre programme
se passera bien aussi (fichier unicode en UTF-16-LE).
En utilisant Print, apparemment, on ne peut écrire dans le fichier
que de l'ASCII (proprement que de l'ASCII 128 et par extension du
latin1)
Cdt.
Bonjour,
Une fois ton ficjer csv créé, ouvre-le dans le bloc notes et
enregistre-le en encodage UTF.
Pourrais-tu élaborer davantage, j'ai de la difficulté à saisir la problématique!
Open et Write / Print semblent conçus pour travailler en ASCII, ou avec la page de code de windows (latin1 = cp1252 = ISO8859-1 qui correspond aux langues dites "occidentales").
Si une cellule contient par exemple : α β γ Print va écrire des trucs illisibles dans le fichier, alors que l'exportation en format délimité unicode (.txt, colonnes séparées par des tabulations) va écrire dans le fichier en suivant l'encodage UTF-16 avec un BOM FFFE.
De sorte que la lecture du fichier dans un éditeur de texte (c'est l'intérêt des formats csv/txt) donnera bien les lettres α β γ (qui sont absentes de l'encodage latin1)
Grâce au BOM, l'importation du fichier par un autre programme se passera bien aussi (fichier unicode en UTF-16-LE).
En utilisant Print, apparemment, on ne peut écrire dans le fichier que de l'ASCII (proprement que de l'ASCII 128 et par extension du latin1)
Cdt.
Bonjour,
Une fois ton ficjer csv créé, ouvre-le dans le bloc notes et enregistre-le en encodage UTF.
Daniel
MichD
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 à traiter.
'====================================================== 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 '=======================================================
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 à traiter.
'====================================================== 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 à traiter.
'====================================================== 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