Excel conversion .txt fait apparaitre des "
Résolustitchbouck Messages postés 131 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 10 décembre 2024 - 13 juin 2024 à 09:51
- Excel conversion .txt fait apparaitre des "
- Liste déroulante excel - Guide
- Apparaitre hors ligne instagram - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
11 réponses
11 juin 2024 à 17:39
Bonjour,
Pourquoi ce fonctionnement : dans un fichier texte généré par excel, une chaine de caractère est encadrée par des guillemets. Mais si la chaine de caractère comporte un guillemet, il faut le distinguer des guillemets débuts et fin de chaine, il est alors doublé.
11 juin 2024 à 18:27
Tu pourrais remplacer les guillemets par des pipes "|" avant l'enregistrement et remettre les guillemets dans le bloc-notes.
Daniel
13 juin 2024 à 09:04
Bonjour,
Je m'étais basé sur l'exemple. J'ai modifié la macro pour accepter un nombre variable de colonnes :
Sub test() Dim C As Range, Enrgt As String, I As Long '#1, #2... désignent des fichiers texte. 'je me sers de #1. Pour être sûr qu'il n'est pas déjà ouvert, je le ferme 'ça n'arrive qu'en phase de test, quand la macro plante avant le "close" final Close #1 'ouverture du fichier en sortie Open "d:\Users\dcola\Downloads\Testquotes.txt" For Output As #1 '"C" désigne chaque cellule de la colonne A 'Boucle sur les cellules remplies de la colonne A For Each C In Range("A1", Cells(Rows.Count, 1).End(xlUp)) 'on fait une châine de caractères en concaténant, la cellule de la colonne A, 'une tabulation et la cellule d'à côté (C.Offset(, 1)) 'effacement de "Enrgt" Enrgt = "" 'boucle sur les colonne de la ligne (I représente le n° de colonne) For I = 1 To Cells(C.Row, Columns.Count).End(xlToLeft).Column 'concaténation des cellules de la ligne Enrgt = Enrgt & Chr(9) & Cells(C.Row, I).Value Next I 'suppression de la tabulation de tête Enrgt = Right(Enrgt, Len(Enrgt) - 1) 'on écrit cette chaîne de caractères Print #1, Enrgt Next C 'fermeture du fichier Close #1 End Sub
11 juin 2024 à 17:29
Ha ben j'ai trouvé une piste de correction, en passant par Word.
Je change les "" par des @, je supprime tous les " qui restent et je change enfin les @ par des ".
Il faut aussi changer dans les options de Word le changement automatique des guillemets (Vérification, onglet "lors de la frappe", case à cocher dans les premières).
Mais cela n'explique pas vraiment le phénomène...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 11 juin 2024 à 17:53
Bonjour,
Si tu enregistre au format texte, il me semble que c'est "normal".
Daniel
11 juin 2024 à 18:07
"Fields with embedded commas or double-quote characters must be quoted."
(les champs contenant des virgules ou des guillemets doivent être encadrés de guillemets).
Fields with embedded commas or double-quote characters must be quoted.
(A l'intérieur des champs, les guillemets doivent être doublés)
Source Wikipedia :
https://en.wikipedia.org/wiki/Comma-separated_values#Basic_rules
Daniel
12 juin 2024 à 10:13
Bonjour,
Cette macro fait l'exportation au format texte (il reste à gérer le nom du fichier texte) :
Sub test() Dim C As Range, Enrgt As String Close #1 Open "d:\Users\dcola\Downloads\Testquotes.txt" For Output As #1 For Each C In Range("A1", Cells(Rows.Count, 1).End(xlUp)) Enrgt = C.Value & Chr(9) & C.Offset(, 1).Value Print #1, Enrgt Next C Close #1 End Sub
Daniel
12 juin 2024 à 14:57
Bonjour !
hé bien merci beaucoup pour ces retours. Je n'avais pas pensé à allez voir Wikipédia pour ce genre de choses !!
Oui, je remplace et remets dans le blocnote avec un notepad, c'est très bien aussi. Mais je n'avais pas compris que le notepad a des fonctions bien plus poussées, dont le "cherche et remplace" :)
J'essaie de décrypter la macro ! Vous voulez bien m'y aider ?
je ne comprends / connais pas le #1, le For Output As...
Comment cela se fait-il que la macro enregistre la colonne A1 et A2, alors que vous lui indiquez juste A1 et la dernière ligne non vide ?
Et aussi, pourquoi Print ? plus simple qu'un Save As ? (et d'ailleurs ça n'imprime pas^^ mais j'ai bien compris que ça n'étais pas fait pour)
Merci !!!
Modifié le 12 juin 2024 à 16:17
J'ai mis les explications en commentaire :
Sub test() Dim C As Range, Enrgt As String '#1, #2... désignent des fichiers texte. 'je me sers de #1. Pour être sûr qu'il n'est pas déjà ouvert, je le ferme 'ça n'arrive qu'en phase de test, quand la macro plante avant le "close" final Close #1 'ouverture du fichier en sortie Open "d:\Users\dcola\Downloads\Testquotes.txt" For Output As #1 '"C" désigne chaque cellule de la colonne A 'Boucle sur les cellules remplies de la colonne A For Each C In Range("A1", Cells(Rows.Count, 1).End(xlUp)) 'on fait une châine de caractères en concaténant, la cellule de la colonne A, 'une tabulation et la cellule d'à côté (C.Offset(, 1)) Enrgt = C.Value & Chr(9) & C.Offset(, 1).Value 'on écrit cette chaîne de caractères Print #1, Enrgt Next C 'fermeture du fichier Close #1 End Sub
PS "Print" est la commande d'écriture quand on écrit séquentiellement :
https://learn.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/printstatement
Daniel
Modifié le 13 juin 2024 à 08:42
Bonjour,
Ok !! compris. Je comprends son fonctionnement maintenant.
Mais comment lui indiquer qu'il y a d'autres colonnes à prendre en compte ?
Là, j'ai vu qu'en mettant pour chaque colonne à ajouter une tabulation et Offset(,2) (pour la suivante), ça marche. mais si j'ai 10 colonnes, je me retrouve avec une ligne allant jusqu'à Offset(,10). Y a-t-il plus simple ?
En tout cas, merci beaucoup pour l'aide apportée, et les explications !!!
13 juin 2024 à 09:51
Ok !! oui oui, c'est moi qui ait donné un exemple trop simplifié au départ.
Ben, c'est super. N'importe lequel de mes fichiers qui pose ce problème peut être réglé par cette macro.
Merci beaucoup !!!
Bonne continuation.