Aide Vba rechercher remplacer
Boyscout_27
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
Boyscout_27 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
Boyscout_27 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai construit cette procédure Vba. Elle importe les données d'un fichier .csv afin d'automatiquement remplacer dans la colonne G et J, le guillemet par rien, et dans la colonne J changer le point par une virgule. Ensuite, elle fait un tri et enfin, elle sauve le travail avec le même nom en .txt
Cela fonctionne, ça ne semblait pas extraordinaire au départ ^^
Mais j'ai un soucis. Le format date n'est plus du tout respecté en colonne G. Et le format nombre ne l'est plus non plus en colonne J.
Pourrais-je avoir votre aide ?
- source csv : http://www.cjoint.com/c/FJeoTrZcoYh
- fichier avec vba : http://www.cjoint.com/c/FJeoUDDcnWh
J'ai construit cette procédure Vba. Elle importe les données d'un fichier .csv afin d'automatiquement remplacer dans la colonne G et J, le guillemet par rien, et dans la colonne J changer le point par une virgule. Ensuite, elle fait un tri et enfin, elle sauve le travail avec le même nom en .txt
Cela fonctionne, ça ne semblait pas extraordinaire au départ ^^
Mais j'ai un soucis. Le format date n'est plus du tout respecté en colonne G. Et le format nombre ne l'est plus non plus en colonne J.
Pourrais-je avoir votre aide ?
- source csv : http://www.cjoint.com/c/FJeoTrZcoYh
- fichier avec vba : http://www.cjoint.com/c/FJeoUDDcnWh
A voir également:
- Aide Vba rechercher remplacer
- Rechercher remplacer word - Guide
- Remplacer disque dur par ssd - Guide
- Rechercher ou entrer l'adresse - Guide
- Rechercher image - Guide
- Remplacer coco - Accueil - Réseaux sociaux
2 réponses
Bonjour,
Pour ta colonne G je te propose de remplacer
Pour la colonne I, c'est plus compliqué car tu dois avoir le point comme séparateur décimal sur ton ordinateur et donc en mettant virgule tu n'est plus numérique. Selon l'utilisation du fichier txt que tu fais, as-tu besoin de la virgule ?
Pour ta colonne G je te propose de remplacer
Columns("G:G").Select Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=Falsepar
Dim cel As Range For Each cel In ActiveSheet.UsedRange.Columns("G:G").Cells If InStr(1, cel, "/") Then cel.Value = CDate(Replace(cel.Value, "'", "")) Next cel
Pour la colonne I, c'est plus compliqué car tu dois avoir le point comme séparateur décimal sur ton ordinateur et donc en mettant virgule tu n'est plus numérique. Selon l'utilisation du fichier txt que tu fais, as-tu besoin de la virgule ?
Mince, ça ne fonctionne pas. Le format date n'est plus respecté une fois le fichier .txt créé... Le format nombre non plus.
Une autre solution ?
Une autre solution ?
En fait, tout fonctionne parfaitement. Quand je fais le pas à pas détaillé, je vois que tout s'enchaîne bien et les formats sont respectés. C'est une fois que le fichier est fermé que ça bouscule tout.
Si je mets :
ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
--> Le fichier .txt qui est créé ne respecte plus le format date et nombre.
Si je mets :
ActiveWorkbook.SaveAs Filename:=Fichier & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
--> Le fichier .xlsx respecte bien le format date, mais pas le format Nombre...
On pourrait pas imaginer en Vba l'équivalent de la formule Cnum() ?
Si je mets :
ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
--> Le fichier .txt qui est créé ne respecte plus le format date et nombre.
Si je mets :
ActiveWorkbook.SaveAs Filename:=Fichier & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
--> Le fichier .xlsx respecte bien le format date, mais pas le format Nombre...
On pourrait pas imaginer en Vba l'équivalent de la formule Cnum() ?
Y'a quand même un truc qui m'échappe... A m'en arracher les cheveux.
Si dans mon code, je termine en écrivant
ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
'ActiveWorkbook.Close
Donc il me ferme le fichier texte tout seul comme un grand... Quand j'ouvre ensuite ce fichier, les formats date et nombre ne sont pas respectés.
Par contre, j'ai fait le test, sans mettre
'ActiveWorkbook.Close
Je suis donc obligé de moi-même cliquer sur la croix en haut à droite du fichier pour fermer, cliquer sur Oui Voulez-vous enregistrer les modifications apportées et recliquer sur Oui ...peut contenir des informations non compatibles avec Texte... et blablabla...
Et LA, quand j'ouvre ensuite le fichier .txt, tout est propre!
D'où mon interrogation... Y'a-t-il un bout de code à ajouter entre ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
et
'ActiveWorkbook.Close
pour ne pas à avoir toutes les étapes à faire en manuel ?
Si dans mon code, je termine en écrivant
ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
'ActiveWorkbook.Close
Donc il me ferme le fichier texte tout seul comme un grand... Quand j'ouvre ensuite ce fichier, les formats date et nombre ne sont pas respectés.
Par contre, j'ai fait le test, sans mettre
'ActiveWorkbook.Close
Je suis donc obligé de moi-même cliquer sur la croix en haut à droite du fichier pour fermer, cliquer sur Oui Voulez-vous enregistrer les modifications apportées et recliquer sur Oui ...peut contenir des informations non compatibles avec Texte... et blablabla...
Et LA, quand j'ouvre ensuite le fichier .txt, tout est propre!
D'où mon interrogation... Y'a-t-il un bout de code à ajouter entre ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
et
'ActiveWorkbook.Close
pour ne pas à avoir toutes les étapes à faire en manuel ?
Pardon de revenir si tardivement sur la discussion... Je n'avais pas été alerté par ton ajout Gbinforme...
Le fichier txt se génrère ainsi avec l'ajout de savechanges:=False
Nom Salle N° Ident N° séjour Nom Prénom Date arrivée Heure Cot. Code Facturé
JEAN ECHOGRAPHIE 1 14 C MAQ ERI 1/14/2016 10:47 ZCQM "56,7"
JEAN ECHOGRAPHIE 1 16 C DEL MAR 1/25/2016 10:56 ZCQM "75,6"
JEAN ECHOGRAPHIE 1 11 C KOU NIC 1/25/2016 16:49 JAQM "52,45"
Le fichier txt se génrère ainsi avec l'ajout de savechanges:=False
Nom Salle N° Ident N° séjour Nom Prénom Date arrivée Heure Cot. Code Facturé
JEAN ECHOGRAPHIE 1 14 C MAQ ERI 1/14/2016 10:47 ZCQM "56,7"
JEAN ECHOGRAPHIE 1 16 C DEL MAR 1/25/2016 10:56 ZCQM "75,6"
JEAN ECHOGRAPHIE 1 11 C KOU NIC 1/25/2016 16:49 JAQM "52,45"
Pour la colonne J... Le but est de pouvoir faire des sommes par la suite. Je stocke en fichier .txt les données, mais je les exploite via .xlsx.
J'ai l'impression que si je fais juste la 1ère opération, ça fonctionnerait non ?
Columns("J:J").Select
Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Date arrivée
1/14/2016
1/25/2016
1/25/2016
02/01/2016
2/16/2016
2/25/2016
2/25/2016
3/15/2016
Tu pourras me mettre les explications pour que je comprenne bien.
Lorsque tu utilises excel fonctionne en alphabétique alors qu'avec le résultat est une date.
vérifie que c'est une date en entrée sinon on plante sur la cellule titre.
permet de ne traiter que les cellules utiles.
J'ai l'impression que si je fais juste la 1ère opération, ça fonctionnerait non ?
Cela devrait fonctionner car tu vas sauvegarder avec le point mais comme c'est ton séparateur décimal, lorsque tu vas ouvrir, cela fonctionnera.