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 :

VBA pour remplacer . par une ,


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 65
    Par défaut VBA pour remplacer . par une ,
    Bonjour,

    Je cherche dans une liste de données dont voici la capture
    Nom : Capture.JPG
Affichages : 1071
Taille : 56,7 Ko

    à remplacer dans un premier temps les points de la colonne C en virgule. Je suis passé par un enregistreur de macro mais quand j’exécute celui la j'ai le format suivant 29.60659 => 2 960 659 au lieu d'avoir 29,60659 comme si l'enregistreur considérait que la virgule est une séparation pour les milliers/millions. Quel code puis-je utiliser pour ne pas avoir ce problème.

    Deuxième manip à faire dans la colonne B pour avoir un affichage en heure sous la forme hh:mm:ss en supprimant le .000

    Dernière manip a faire pour la colonne A, dans un premier temps avec l'enregistreur je remplace les points par des / et la y'a pas de soucis. Le problème c'est qu'un espace vide est intercalé à chaque fois et donc Excel ne me considère pas les cellules comme étant bien définies pour que ça soit une date. Pareil j'ai fait avec l'enregistreur mais la ça me décaler le jour avec les mois --"

    Voilà le résultat en passant par l'enregistreur sur les colonnes A et C :
    Nom : Capture2.JPG
Affichages : 1013
Taille : 66,0 Ko




    EDIT : j'ai trouvé le premier problème il suffit de changer dans l'enregistreur la "," par un "." très bizarre d'ailleurs ... et via l'enregistreur de remplacer ".000" par "" marche aussi donc ça va ! Restes la dernière partie avec le changement de date pour l'espace....
    Images attachées Images attachées  

  2. #2
    Membre averti Avatar de Roiser
    Homme Profil pro
    Etudiant - MIAGE
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Etudiant - MIAGE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Par défaut
    Salut ,

    Je ne sais pas comment tu parcours ta plage mais voici pour transformer ta colonne A en date ( a toi de l'insérer dans ton code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim DateAC() As String
    DateAc = Split(TaCellule, ".")
    TaCellule = DateSerial(Val(DateAc(2)), Val(DateAc(1)), Val(DateAc(0)))
    En espérant que ça t'aide !

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Exemple pour la plage A2:A1000 de la feuille nommée Feuil1 du classeur où se trouve le code VBA
    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
    Sub Text2Date()
     Dim rngData As Range
     Dim Elem As Long, tblData(), SplitDate() As String
     Set rngData = ThisWorkbook.Worksheets("Feuil1").Range("A2:A1000")
     tblData = rngData.Value
     For Elem = 1 To UBound(tblData)
       SplitDate = Split(tblData(Elem, 1), ".")
       If UBound(SplitDate) <> 3 Then MsgBox "Problème" & vbCrLf & "Sortie de procédure": Exit For
       tblData(Elem, 1) = DateSerial(SplitDate(2), SplitDate(1), SplitDate(0))
     Next
     With rngData
     .Value = tblData
     .NumberFormat = "dd/mm/yyyy"
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 65
    Par défaut
    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
    Sub Text2Date()
     Dim rngData As Range
     Dim Elem As Long, tblData(), SplitDate() As String
     Set rngData = ThisWorkbook.Worksheets("Données brutes").Range("H5:H10000")
     tblData = rngData.Value
     For Elem = 1 To UBound(tblData)
       SplitDate = Split(tblData(Elem, 1), ".")
       If UBound(SplitDate) <> 3 Then MsgBox "Problème" & vbCrLf & "Sortie de procédure": Exit For
       tblData(Elem, 1) = DateSerial(SplitDate(2), SplitDate(1), SplitDate(0))
     Next
     With rngData
     .Value = tblData
     .NumberFormat = "dd/mm/yyyy"
     End With
    End Sub
    J'ai adapté pour ma plage de données, par contre quand j’exécute la macro y'a marqué problème sortie procédure (?)

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai adapté pour ma plage de données, par contre quand j’exécute la macro y'a marqué problème sortie procédure (?)
    C'est le message que j'ai prévu pour éviter des catastrophes.
    Cela signifie que la chaîne de caractères n'a pas été divisée en 3 parties. Il est possible que le séparateur ne soit pas un point.
    Si c'est le cas (par exemple le séparateur est une virgule) alors il faut modifier l'instruction ci-dessous en modifiant le 2ème argument de la fonction Split en lui mettant la virgule au lieu du point.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SplitDate = Split(tblData(Elem, 1), ".")
    Autre possibilité la chaîne de caractères aurait plus de deux points de séparation comme par exemple .02.07.2017 ce qui donnerait quatre parties.

    [EDIT]
    Je viens de constater que la fin de cette ligne doit être Exit Sub au lieu de Exit For mais cela ne change rien au problème précité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UBound(SplitDate) <> 3 Then MsgBox "Problème" & vbCrLf & "Sortie de procédure": Exit Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 65
    Par défaut
    Même en mettant une virgule à la place du point j'ai le même message :/
    J'ai changer le Exit For.

    Tu as une autre idée du coup ?

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 10/03/2014, 19h40
  2. Probléme pour remplacer = dans une variable
    Par koKoTis dans le forum Scripts/Batch
    Réponses: 18
    Dernier message: 05/06/2007, 13h37
  3. extraire une chaine et remplacer par une autre
    Par D.Mounir dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/06/2007, 20h04
  4. Police remplacée par une autre
    Par unreal2me dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 02/02/2007, 23h50
  5. Réponses: 7
    Dernier message: 21/09/2006, 14h06

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