Aide Vba rechercher remplacer

Boyscout_27 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
Boyscout_27 Messages postés 18 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

2 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
    1. Boyscout_27 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
       
      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
      1. Boyscout_27 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   > Boyscout_27 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
         
        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
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
  2. Boyscout_27 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
    2. Boyscout_27
       
      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
    3. Boyscout_27
       
      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
    4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonsoir,

      Tu pourrait peut-être essayer :
      ActiveWorkbook.SaveAs Filename:=Fichier & ".txt", FileFormat:=xlText, CreateBackup:=False
      ActiveWorkbook.Close savechanges:=False
      0
    5. Boyscout_27 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   > gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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