Aide Vba rechercher remplacer

Fermé
Boyscout_27 Messages postés 14 Date d'inscription mardi 4 octobre 2016 Statut Membre Dernière intervention 17 janvier 2018 - 4 oct. 2016 à 17:11
Boyscout_27 Messages postés 14 Date d'inscription mardi 4 octobre 2016 Statut Membre Dernière intervention 17 janvier 2018 - 9 nov. 2016 à 10:02
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

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 700
4 oct. 2016 à 22:16
Bonjour,

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:=False
par
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 ?
0
Boyscout_27 Messages postés 14 Date d'inscription mardi 4 octobre 2016 Statut Membre Dernière intervention 17 janvier 2018
5 oct. 2016 à 08:44
Ha super!!!! Merci pour cette première correction. Tu pourras me mettre les explications pour que je comprenne bien.
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
0
Boyscout_27 Messages postés 14 Date d'inscription mardi 4 octobre 2016 Statut Membre Dernière intervention 17 janvier 2018 > Boyscout_27 Messages postés 14 Date d'inscription mardi 4 octobre 2016 Statut Membre Dernière intervention 17 janvier 2018
5 oct. 2016 à 08:48
Aie, c'est dingue! Mais une fois enregistré en .txt, les dates débloquent encore.
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 700
5 oct. 2016 à 08:55
Bonjour,

Tu pourras me mettre les explications pour que je comprenne bien.
Lorsque tu utilises
Selection.Replace
excel fonctionne en alphabétique alors qu'avec
CDate(Replace
le résultat est une date.
If InStr(1, cel, "/")
vérifie que c'est une date en entrée sinon on plante sur la cellule titre.
ActiveSheet.UsedRange.Columns("G:G").Cells
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.
0
Boyscout_27 Messages postés 14 Date d'inscription mardi 4 octobre 2016 Statut Membre Dernière intervention 17 janvier 2018
6 oct. 2016 à 09:17
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 ?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 700
13 oct. 2016 à 10:02
Bonjour,

Le format date n'est plus respecté
Lorsque tu ouvres ton fichier .txt, il te faut définir le format de la colonne date en JMA.
Pour le format nombre c'est à toi de vérifier quel est ton délimiter décimal : pour moi avec le point cela fonctionne correctement en "standard".
0
Boyscout_27
13 oct. 2016 à 14:44
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() ?
0
Boyscout_27
13 oct. 2016 à 15:10
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 ?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 700
Modifié par gbinforme le 13/10/2016 à 18:31
Bonsoir,

Tu pourrait peut-être essayer :
ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close savechanges:=False
0
Boyscout_27 Messages postés 14 Date d'inscription mardi 4 octobre 2016 Statut Membre Dernière intervention 17 janvier 2018 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
9 nov. 2016 à 09:53
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"
0