IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

problème avec la methode "Replace"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut problème avec la methode "Replace"
    Bonjour,

    Je suis tout nouveau sur le forum et dans le monde du VBA, donc merci pour ce super forum et les conseils qui y sont prodigués.

    **Mon objectif :
    je suis en train de crée une macro dans le but de mettre en forme une série de données qui sont au départ sous forme CSV (séparateur point-virgule) du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    04/07/2007 12:24:38.118,0.006,-7.081004E+00,"04/07/2007 12:24:38.165",0.053,+2.207900E+01,"04/07/2007 12:24:38.213",0.101,-1.943282E+00,04/07/2007 12:24:38.260",0.148,+7.424000E+00,"04/07/2007 12:24:38.308",0.196,-6.390870E+00
    une belle ligne de données bien indigeste !
    Et je compte transformer ces données dans le but d'obtenir un tableau avec ces données en format plus lisible et séparées dans différentes colones.

    pour cela j'ai rédigé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
            (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
            Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array( _
            33, 1))
        Range( _
            "D:D,E:E,G:G,H:H,J:J,K:K,M:M,N:N,P:P,Q:Q,S:S,T:T,V:V,W:W,Y:Y,Z:Z,AB:AB,AC:AC,AE:AE,AF:AF" _
            ).Select
      '  Range("AF1").Activate
        Selection.Delete Shift:=xlToLeft
        Range("B:M").Select
            Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Selection.Replace What:=".", Replacement:=","
        Selection.NumberFormat = "General"
    **plusieurs actions sucessives :

    * sélection de la première colone et grâce à la fonction "convertir" passage des différents données en plusieurs colones (ça marche très bien)
    * suppression de quelques colones pour supprimer des informations redondante (ça marche très bien)

    * mes chiffres étant écrit à avec des "." et non des "," je me dit grâce a la fonction replace je vais transformer mes points en virgules. ET LA CA MARCHE PLUS . les points sont effectivement remplacé par des virgules mais tout mes nombres sont multiplier par 10^6 ! par example : 7.371000E+00 est transformé en 7,37E+06, et je vois vraiment pas pourquoi !

    * le but ensuite est de transformer le format de nombre de scientifique à générale.

    Voilà si quelquu'un peu m'aider sur ce coup là, je l'en remercirais grandement !

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Par défaut
    Bonjour,
    je n'ai pas trop regarder ton code, mais est-ce que tu dois garder le format CSV? Si non, tu peux faire une macro dans un fichier Excel qui importe tes données, comme ça tu aura toutes tes données dans des colonnes bien séparées et tu n'aura plus qu'à faire un programme qui mette en forme ton tableau.


  3. #3
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    a tester

    1. Remplacer les , en ;
    2. Remplacer les . en ,
    3. Utiliser ton code de conversion en modifiant le séparateur , en ;

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut
    merci bibi5883 pour ta réponse, mais je n'ais pas besoin de garder le CSV.
    J'ai commencé une macro pour traiter mes données et c'est là que je suis bloqué! à cause de la fonction "remplacer"

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut
    merci Jerome,

    je vois pas trop ce que tu me propose de tester.

    actuellement je veux remplacer les . par des ,
    si je fait le contraire il va rien se passer non ?

  6. #6
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Je lirait plutôt le fichier csv une ligne à la fois et je séparerais chaque ligne avec la fonction Split.

    Lecture de fichier : Instruction Open (voir l'aide)
    Fonction Split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim unTableau() As Variant
    unTableau = Split(uneLigneDuFichier, ",")

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut
    Jerome,
    j'ai finalement compris ce que tu voulais tester (c'etait une bonne idée), je l'ai fait mais mal heureusement j'ai un autre message d'erreur qui appararais

    Erreur d'éxécution "1004"
    Formule trop longue
    du coup le je suis un peu perdu

  8. #8
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 38
    Par défaut
    jacques_jean,

    je vous donne d'abord quelques lignes du code de départ (pour test)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    101(Time stamp),101(Seconds),101(Wm2),102(Time stamp),102(Seconds),102(C),103(Time stamp),103(Seconds),103(Wm2),104(Time stamp),104(Seconds),104(C),105(Time stamp),105(Seconds),105(Wm2),106(Time stamp),106(Seconds),106(C),107(Time stamp),107(Seconds),107(Wm2),108(Time stamp),108(Seconds),108(C),900(Time stamp),900(Seconds),900(Value),901(Time stamp),901(Seconds),901(Value),902(Time stamp),902(Seconds),902(Value)
    05/07/2007 07:30:42.438,0.006,-5.814260E+00,"05/07/2007 07:30:42.485",0.053,+2.161900E+01,"05/07/2007 07:30:42.533",0.101,-3.777047E+00,"05/07/2007 07:30:42.580",0.148,+4.993000E+00,"05/07/2007 07:30:42.628",0.196,-5.642080E+00,"05/07/2007 07:30:42.674",0.242,+2.172100E+01,"05/07/2007 07:30:42.722",0.290,-4.273140E+00,"05/07/2007 07:30:42.769",0.337,+2.172500E+01,"05/07/2007 07:30:42.628",0.196,+2.726108E+01,"05/07/2007 07:30:42.533",0.101,-9.091307E+00,"05/07/2007 07:30:42.628",0.196,-2.998588E+00
    05/07/2007 07:31:42.434,60.002,-5.795623E+00,"05/07/2007 07:31:42.481",60.049,+2.160100E+01,"05/07/2007 07:31:42.529",60.097,-3.996832E-01,"05/07/2007 07:31:42.576",60.144,+4.995000E+00,"05/07/2007 07:31:42.623",60.191,-5.562600E+00,"05/07/2007 07:31:42.670",60.238,+2.171600E+01,"05/07/2007 07:31:42.718",60.286,-3.944760E+00,"05/07/2007 07:31:42.765",60.333,+2.172200E+01,"05/07/2007 07:31:42.623",60.191,+2.716360E+01,"05/07/2007 07:31:42.529",60.097,-5.695307E+00,"05/07/2007 07:31:42.623",60.191,-4.769471E+00
    05/07/2007 07:32:42.434,120.002,-5.627536E+00,"05/07/2007 07:32:42.481",120.049,+2.160100E+01,"05/07/2007 07:32:42.529",120.097,+1.348584E+01,"05/07/2007 07:32:42.576",120.144,+5.233000E+00,"05/07/2007 07:32:42.623",120.191,-5.569920E+00,"05/07/2007 07:32:42.671",120.239,+2.172600E+01,"05/07/2007 07:32:42.719",120.287,-4.059780E+00,"05/07/2007 07:32:42.765",120.333,+2.173500E+01,"05/07/2007 07:32:42.623",120.191,+2.717092E+01,"05/07/2007 07:32:42.529",120.097,+8.358308E+00,"05/07/2007 07:32:42.623",120.191,+3.250768E+00
    05/07/2007 07:33:42.434,180.002,-5.285275E+00,"05/07/2007 07:33:42.481",180.049,+2.160100E+01,"05/07/2007 07:33:42.529",180.097,+1.785957E+01,"05/07/2007 07:33:42.576",180.144,+5.398000E+00,"05/07/2007 07:33:42.624",180.192,-5.701690E+00,"05/07/2007 07:33:42.671",180.239,+2.172900E+01,"05/07/2007 07:33:42.718",180.286,-4.473920E+00,"05/07/2007 07:33:42.765",180.333,+2.171900E+01,"05/07/2007 07:33:42.624",180.192,+2.730269E+01,"05/07/2007 07:33:42.529",180.097,+1.307429E+01,"05/07/2007 07:33:42.624",180.192,+2.088273E+00
    05/07/2007 07:34:42.434,240.002,-5.582282E+00,"05/07/2007 07:34:42.481",240.049,+2.161400E+01,"05/07/2007 07:34:42.529",240.097,+2.418418E+01,"05/07/2007 07:34:42.576",240.144,+5.667000E+00,"05/07/2007 07:34:42.623",240.191,-5.632670E+00,"05/07/2007 07:34:42.671",240.239,+2.173900E+01,"05/07/2007 07:34:42.719",240.287,-4.434180E+00,"05/07/2007 07:34:42.766",240.334,+2.174600E+01,"05/07/2007 07:34:42.623",240.191,+2.724667E+01,"05/07/2007 07:34:42.529",240.097,+1.910190E+01,"05/07/2007 07:34:42.623",240.191,+1.426386E+00
    05/07/2007 07:35:42.434,300.002,-5.225569E+00,"05/07/2007 07:35:42.481",300.049,+2.161700E+01,"05/07/2007 07:35:42.529",300.097,+3.288598E+01,"05/07/2007 07:35:42.576",300.144,+5.958000E+00,"05/07/2007 07:35:42.624",300.192,-5.598160E+00,"05/07/2007 07:35:42.671",300.239,+2.169500E+01,"05/07/2007 07:35:42.718",300.286,-4.396540E+00,"05/07/2007 07:35:42.765",300.333,+2.172700E+01,"05/07/2007 07:35:42.624",300.192,+2.721516E+01,"05/07/2007 07:35:42.529",300.097,+2.816041E+01,"05/07/2007 07:35:42.624",300.192,+9.664333E-01
    (assez barbar j'en conviens)

    Si j'écris la commande Selection.NumberFormat = "General" avant la Selection.Remplace ; effectivement en fin de marco, le format est resté en scientique. Et j'ai tout mes 10^6 qui viennent se rajouter !!

    vous avez raison dans le fichier csv le séparateur est "," d'ou le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False Comma:=True,

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour Tomme,

    J'ai testé votre code avec la ligne du fichier d'origine que vous avez fournie et chez moi (Excel 2000) cela semble bien fonctionner.

    Si vous cliquez après traitement sur une cellule contenant un nombre et que vous vérifiez le format, avez-vous bien le format standard ?
    (il arrive qu'Excel conserve un format personnalisé).

    Avez-vous essayez de formater les cellules avant d'affecter les valeurs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Range("B:M").Select
    Selection.NumberFormat = "General"
    
            Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=False
        Selection.Replace What:=".", Replacement:=","
        Selection.NumberFormat = "General"
    D'autre part vous indiquez qu'il s'agit d'un fichier .csv avec séparateur le ";" or sur la ligne que vous joignez le séparateur semble bien être ","

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/10/2005, 10h23
  2. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  3. [IDHTTP] Problème avec la methode post (login:pass@ww.url)
    Par Rayek dans le forum Web & réseau
    Réponses: 5
    Dernier message: 11/07/2005, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo