Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Macro Format date et Nombre à 3 décimales

Mickaelp

XLDnaute Nouveau
Bonjour à Tous,

Je bloque depuis quelque temps sur un problème d'automatisation de 2 taches pourtant basiques.

Il s'agit de données extraient d'un logiciel et qui ont des formats "particuliers".

1/ Date
La date est importé dans EXCEL avec ce format :
28/12/2018 - 23:48
Excel ne le reconnait pas mais un simple REMPLACER " -" par "" permet de contourner le problème.
Le hic se produit quand j'automatise ce "Remplacer". Dans ce cas les date qui le peuvent s'américanises.

28/12/2018 - 23:48 devient 28/12/2018 23:48
Mais 05/02/2018 - 18:00 devient 02/05/2018 18:00

2/ Nombre
Une autre colonne contient des nombres au format : 6 658,939
(caractère spéciale entre les deux "6")

Idem un simple REMPLACER le caractère spéciale par "" résout le problème.
Mais en automatisant le remplacer cela devient 6658939.
La virgule saute à cause des 3 décimales.

Voici la macro simple mais normalement efficace:
Columns("J:J").Select
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("F:G").Select
Selection.Replace What:=" - ", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

J'ai beau tourner ça dans tout les sens et rien ne marche !
Merci d'avance pour votre aide !!
 

job75

XLDnaute Barbatruc
Bonjour Mickaelp,

Il faut traiter correctement les cellules, une par une :
VB:
Sub Convertir()
Dim r As Range, x As String
With ActiveSheet 'à adapter
    Set r = Intersect(.UsedRange, .[F:G])
    If Not r Is Nothing Then
        For Each r In r
            x = Replace(r, " - ", " ")
            If IsDate(x) Then r.NumberFormat = "dd/mm/yyyy hh:mm": r = CDate(x) 'convertit en date
        Next
    End If
    Set r = Intersect(.UsedRange, .[J:J])
    If Not r Is Nothing Then
        For Each r In r
            x = Replace(r, " ", "")
            If IsNumeric(x) Then r.NumberFormat = "General": r = CDbl(x) 'convertit en nombre
        Next
    End If
End With
End Sub
A+
 

Modeste geedee

XLDnaute Barbatruc
Bonsour® lors de l'ouverture d'un fichier texte , et avant toute action de l'utilisateur
"By Design" Excel utilise une reconnaissance implicite des valeurs lues (par défaut US)

il faut importer en utilisant l'assistant de conversion
à l'étape 3
pour les champs dates préciser le format lu : JMA

nb :
Via VBA ne pas ignorer que le format par défaut des nombres est le format US
le séparateur de millier est la virgule
le séparateur décimal est le point

L'utilisation de l'enregistreur permettra après vérification du résultat la réutilisation de la proc crée,
il conviendra toutefois d'y ajouter au final l'instruction :
, Local=true

un extrait du fichier text original avant import, aurait permis l'élaboration de cette proc ...
 

Mickaelp

XLDnaute Nouveau
Bonjour Job75, Modeste geedee,

Merci d'avoir pris les temps de m'aider aussi rapidement.

La Proposition de Job75 semble fonctionnait parfaitement !!

Oui j'avais bien cru comprendre que le problème provenait du Format US par défaut en VBA.
Je vais également contrôler que le logiciel commercial ne permette pas de paramétrer le format des champs exportés.

Encore merci à vous 2 !
 

Discussions similaires

Réponses
1
Affichages
219
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…