XL 2010 [Résolu] Formatage date différent

guy72

XLDnaute Impliqué
Bonjour,
Dans un fichier, dans la colonne A, j'ai la date et l'heure:
Time
2019/12/01 17:46
Etc ......




Dans le 2ème fichier, dans la colonne A
Colonne A>DateColonne B
20191201174600
Etc ......




Ma question est:
Est-il possible de transformer la date et l'heure de la colonne A du 1er fichier, et de les séparer au format de celui du 2ème fichier ??
Exemple:
2019/12/01 17:46 en
Colonne A> DateColonne B> Heure
20191201174600
Merci de votre aide



Cordialement
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Bonsour® Guy85
impossible par formule sans modifier la valeur initiale(*) de la colonne A

mais possible en affichage
format cellule A1 :
aaaammjj

formule en B1 :
=mod(A1;1)
format de cellule :
"hhmmss"

attention !!!
(*) le contenu réel de la cellule A1 est inchangé (i.e. 2019/12/11 17:46 mais s'ecrit 11/12/2019 17:46 à la saisie selon parametres Excel)
le contenu réel de B1 est une valeur correspondante à la partie décimale de A1
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, guy72

guy72
Si en A1
alors en B1 (format: Standard)
=TEXTE(A1;"aaaammjj")
et en C1 (format personnalisé: hhmmss)
=TEMPS(HEURE(A1);MINUTE(A1);0)

Si besoin faire ce test sur une feuille vide (pour voir un exemple)
VB:
Sub Test()
[A1:C1] = Array("=NOW()", "=TEXT(RC[-1],""aaaammjj"")", "=TIME(HOUR(RC[-2]),MINUTE(RC[-2]),0)")
[B1].NumberFormat = "General"
[C1].NumberFormat = "hhmmss"
End Sub
EDITION: Houps pas rafraîchi la page à temps.
Bonsoir Simply, Modeste geedee
 

guy72

XLDnaute Impliqué
D'accord, il est beaucoup question de format cellule.
En fait:
1) Il faut que j'ai la date en colonne A (à partir de A2) sur 1441 lignes (20191201)
Je fais une insertion de colonne
2) Et en colonne B (à partir de B2) sur 1441 lignes (174600)
Il y a juste un problème que je ne vois pas dans la formule de Modeste

mais possible en affichage
format cellule A1 :
aaaammjj
Ça me donne 19000100
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir guy72, Simply, Modeste geedee, JM,

Voyez le fichier joint et la formule en C2 =--TEXTE(B2;"aaaammjj")

A+
 

Fichiers joints

Dernière édition:

guy72

XLDnaute Impliqué
Re,

guy72
Et que donne ma proposition (message#4) ?
(A part que je souhaitais en cellule A2 (c'est de ma faute, je n'ai pas précisé)), car en ligne 1 j'ai du texte
En A1, ça me donne "03/12/2019 22:07"
En C1, ça me donne "220700"

Donc ce que je souhaitais (sauf erreur de ma part)
Transformer la colonne A en A et B (donc une insertion de colonne avant C)

En A2 le 1er jour du mois (par exemple) > de 20191201 jusqu'à 20191231
En B2 l'heure (par exemple) > 0 à 235900
 

Staple1600

XLDnaute Barbatruc
Re, bonsoir job75

=>guy72
Sauf erreur de ma part, ce que tu décris dans le message#8 ne l'était pas dans le message#1
Or je me suis basé sur le message#1
Transformé 2019/12/01 17:46 en 20191201 et 174600
Ce que fait mon petit exemple, non ?
Je parle de la macro exemple.

Pour la suite de ta question, je passe le relais à mes camarades de jeux du forum.
 

guy72

XLDnaute Impliqué
Voici les fichiers, ça va être plus facile pour comprendre
Dans le fichier Backup, il faut que j'ai le même formatage des cellules des colonnes A et B du fichier Xnet_Meteo (avec insertion d'une colonne avant C)
 

Fichiers joints

guy72

XLDnaute Impliqué
Bonsoir guy72, Simply, Modeste geedee, JM,

Voyez le fichier joint et la formule en C2 =--TEXTE(B2;"aaaammjj")

A+
Comme je l'ai dis précédemment, j'ai oublier de dire, que je souhaitais avoir le résultat en A2 et B2:mad:
En colonne A (à partir de A2), il faudrait la date> exemple 20191201 jusquà 20191231
En colonne B ( à partir de B2) il faudrait l'heure> exemple 0 à 235900
 

job75

XLDnaute Barbatruc
Chacun vous a donné des solutions en fonction de ce qu'il a compris.

Quelle solution prenez-vous et quel problème avez-vous encore ?
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
voici une macro à appliquer au fichier Backup-B.xlsx
attention travailler sur une copie
la macro ne fonctionnera qu'une fois (comme précisé en #3 les valeurs initiales de la colonne A sont écrasées !!)
VB:
Sub Macro1()
' ====== !!!!!! directement issue de l'enregistreur ....
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
   
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=TEXT(RC[-1],""hhmmss"")"
    Selection.AutoFill Destination:=Range("B2:B1564")
    Range("B2:B1564").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
   
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=1*TEXT(RC[-1],""aaaammjj"")"
    Selection.AutoFill Destination:=Range("B2:B1564")
    Range("B2:B1564").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Columns("A:A").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("A1") = "date"
    Range("B1") = "time"

End Sub
 
Dernière édition:

guy72

XLDnaute Impliqué
Bonjour Modeste.
C'est tout à fait ça !!!
Comme j'ai une nouvelle station, le fichier des données que je récupère (Bacukp.B) n'est pas pareil à l'ancien (Next_Meteo), sinon le logiciel "GrarphWeather" ne l'accepte pas et il se plante.
Il faut de dans le fichier je récupère les données de la journée concernée - 1h.
Comme par exemple, pour le 3 décembre:

Données du 20191202 de 230000 au 20191203 225900

Car le logiciel "Xnet_Meteo" récupère les données à l'heure du soleil (1 heure avant)
Maintenant, je vais faire une simple macro pour mettre les colonnes à l'identique de l'ancien (un clone en fait).
Merci encore de ton aide
Cordialement
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour guy72, le forum,

L'enregistreur a ses limites, voyez plutôt le fichier joint et cette macro :
VB:
Sub Convertir()
Dim tablo, i&, x$, dat As Date
With ActiveSheet.UsedRange
    If Application.CountIf(.Columns(1), "*/*") = 0 Then Exit Sub 'si la macro a déjà été exécutée
    Application.ScreenUpdating = False
    .Replace ".", "." 'remplace le point par la virgule et convertit
    .Columns(1).EntireColumn.Insert 'insère une colonne
    .Cells(1, 0) = "Date"
    tablo = .Columns(0).Resize(, 2) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        x = tablo(i, 2)
        If IsDate(x) Then 'sécurité
            dat = CDate(x)
            tablo(i, 1) = Mid(dat, 7, 4) & Mid(dat, 4, 2) & Left(dat, 2)
            tablo(i, 2) = Replace(Right(dat, 8), ":", "")
        End If
    Next
    .Columns(0).Resize(, 2) = tablo 'restitution
    .Columns(0).Resize(, 2).AutoFit 'ajustement largeurs
End With
End Sub
Elle fonctionne sur toutes versions, françaises ou anglaises.

Bonne journée.
 

Fichiers joints

job75

XLDnaute Barbatruc
Il y avait un petit problème de B376 à B975, c'est corrigé dans ce fichier (2) :
VB:
Sub Convertir()
Dim tablo, i&, x$, dat As Date
With ActiveSheet.UsedRange
    If Application.CountIf(.Columns(1), "*/*") = 0 Then Exit Sub 'si la macro a déjà été exécutée
    Application.ScreenUpdating = False
    .Replace ".", "." 'remplace le point par la virgule et convertit
    .Columns(1).EntireColumn.Insert 'insère une colonne
    .Cells(1, 0) = "Date"
    tablo = .Columns(0).Resize(, 2) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        x = tablo(i, 2)
        If IsDate(x) Then 'sécurité
            dat = CDate(x)
            tablo(i, 1) = Mid(dat, 7, 4) & Mid(dat, 4, 2) & Left(dat, 2)
            x = Right(dat, 8)
            If InStr(x, ":") = 0 Then x = 0
            x = Format(Replace(x, ":", ""), "000000")
            If Left(x, 1) = "0" Then x = "'" & x 'conserve les zéros non significatifs
            tablo(i, 2) = x
        End If
    Next
    .Columns(0).Resize(, 2) = tablo 'restitution
    .Columns(0).Resize(, 2).AutoFit 'ajustement largeurs
End With
End Sub
 

Fichiers joints

Dernière édition:

guy72

XLDnaute Impliqué
Bonjour,
J'ai un souci:
1) J'ouvre un fichier .csv "Essai"
2) Je le convertis en tableau
3) J'ai copier la macro dans le fichier "Personal.xlsb"
4) J'enregistre mon fichier "Essai" sous le format "xlsm"
5) J'ouvre ce dernier
6) Je souhaite utiliser la macros pour ce fichier, mais elle ne fonctionne pas (pourquoi) :(
 

job75

XLDnaute Barbatruc
Bonjour guy72,
6) Je souhaite utiliser la macros pour ce fichier, mais elle ne fonctionne pas (pourquoi) :(
Sans doute parce qu'en colonne A ce ne sont plus des textes mais des nombres, la 4ème ligne de ma macro arrête l'exécution.

Bon dimanche.
 

job75

XLDnaute Barbatruc
Cette macro fonctionnera avec des textes ou des nombres en colonne A, utilisez-la :
VB:
Sub Convertir()
Dim tablo, i&, x$, dat As Date
With ActiveSheet.UsedRange
    If .Cells(1) = "Date" Then Exit Sub 'si la macro a déjà été exécutée
    Application.ScreenUpdating = False
    .Replace ".", "." 'remplace le point par la virgule et convertit
    .Columns(1).EntireColumn.Insert 'insère une colonne
    .Cells(1, 0) = "Date"
    tablo = .Columns(0).Resize(, 2) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        x = tablo(i, 2)
        If IsDate(x) Then 'sécurité
            dat = CDate(x)
            tablo(i, 1) = Mid(dat, 7, 4) & Mid(dat, 4, 2) & Left(dat, 2)
            x = Right(dat, 8)
            If InStr(x, ":") = 0 Then x = 0
            x = Format(Replace(x, ":", ""), "000000")
            If Left(x, 1) = "0" Then x = "'" & x 'conserve les zéros non significatifs
            tablo(i, 2) = x
        End If
    Next
    With .Columns(0).Resize(, 2)
        .NumberFormat = "General" 'format Standard
        .Value = tablo 'restitution
        .AutoFit 'ajustement largeurs
    End With
End With
End Sub
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas