macro de conversion

sshikamaru

XLDnaute Nouveau
Bonjour

dans le cadre de mon taf, j'extrais une fois par mois des données de température et d'hygrométrie d'appareils autonomes (environ beaucoup)

mais pour me simplifier (niveau vitesse) la tache, j'ai créé une macro de traitement des données (mise en forme, graphique et tout et tout...)

mais au final, je n'arrive pas à convertir ma valeur de temps au format jj-mm-aa/hh:mm:ss. je m'explique. remplacer le slash par un espace, c'est bon mais même si je remplace les tirets par des slashs ou que je laisse comme ça excel n'arrive pas à le voir comme une date.

si j'utilise la fonction "convertir" dans "données", ça marche. si je l'utilise via la macro, ça fonctionne pas.
si j'édite la case sans rien modifier et en validant avec "entrée", ça fonctionne aussi.

mais sinon, via macro, rien ne fonctionne alors je bute peut-être sur un petit détail qui ne passe pas

en tout cas, j'ai mis le fichier avec la macro

essayez de passer via la conversion "manuelle", puis par la macro qui est un enregistrement pur et simple de la conversion mais rien n'y fait

voilà.
 

Pièces jointes

  • démo.xlsm
    228.6 KB · Affichages: 31
  • démo.xlsm
    228.6 KB · Affichages: 40
  • démo.xlsm
    228.6 KB · Affichages: 48

JCGL

XLDnaute Barbatruc
Re : macro de conversion

Bonjour à tous,

Bienvenue sur XLD

Peux-tu essayer :
VB:
Sub Macro5() 
   Sheets("Data").Select
    Range("B13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Formula = "=R[-1]C+""00:10:00"""
    Selection = Selection.Value
    Cells(1, 1).Select
End Sub

A+ à tous
 

Staple1600

XLDnaute Barbatruc
Re : macro de conversion

Bonsoir à tous______________EDITION: Bonsoir JCGL


sshikamaru [Bienvenue sur le forum]
Sauf erreur de ma part, dans ton fichier joint les données en colonne B
( à partir de B12) sont déjà des dates valides, non ?

Tu devrais joindre un fichier avec des données brutes en colonne B avant traitement.

Sinon, elle a quoi comme effet cette macro chez toi ?
Code:
Sub a()
Range(Cells(12, 2), Cells(Rows.Count, 2).End(xlUp)).TextToColumns _
Destination:=Range("B12"), DataType:=xlDelimited, FieldInfo:=Array(1, 4), TrailingMinusNumbers:=True
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : macro de conversion

Re,


Ça a l'air de fonctionner, non ?

Code:
Sub mainproc()
Application.ScreenUpdating = False
a
b
End Sub
Code:
Private Sub a()
Dim c As Range, Arr() As String
For Each c In Range(Cells(12, 2), Cells(Rows.Count, 2).End(xlUp))
Arr = Split(c.Text, "/")
c = DateSerial(Arr(2), Arr(1), Arr(0)) & " " & TimeValue(Arr(3))
Erase Arr
Next
End Sub
Code:
Private Sub b()
Range(Cells(12, 2), Cells(Rows.Count, 2).End(xlUp)).TextToColumns _
Destination:=Range("B12"), DataType:=xlDelimited, FieldInfo:=Array(1, 4), TrailingMinusNumbers:=True
End Sub

EDITION : Bonsoir Modeste Geedee
Ah oui j'avais zappé le xlFixedWidth qui fait toute la différence ;)
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : macro de conversion

Bonsour®
affecte cette macro au bouton ...:rolleyes:

VB:
Sub Macro3()
    Rows("1:10").Select
    Selection.Delete Shift:=xlUp
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("B:B").Select
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlFixedWidth, _
        OtherChar:="/", FieldInfo:=Array(Array(0, 4), Array(9, 1)), _
        TrailingMinusNumbers:=True
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"
    Selection.AutoFill Destination:=Range("D2:D1990")
    Range("D2:D1990").Select
    Columns("D:D").ColumnWidth = 18.43
    Range("D1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("'Data'!$D$1:$E$1990")
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).Name = "=""Hr%"""
    ActiveChart.SeriesCollection(2).XValues = "='Data'!$D$2:$D$1990"
    ActiveChart.SeriesCollection(2).Values = "='Data'!$F$2:$F$1990"
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.ChartArea.Select
    ActiveSheet.ChartObjects("Graphique 1").Activate
End Sub
:rolleyes: brute d'enregistreur...
 
Dernière édition:

sshikamaru

XLDnaute Nouveau
Re : macro de conversion

Staple1600 mais ça me donne le même résultat, si je n'édite pas la cellule, la date reste en format texte.

Modeste geedee , alors ta macro est pas mal, c'est une piste à suivre, mais elle est pour un nombre de valeur définie et, chose que j'ai oublié de dire, le nombre de valeur peut varier. il peut y en avoir 30, mais aussi 30000
 

Staple1600

XLDnaute Barbatruc
Re : macro de conversion

Re

EDITION
: Et cette version condensée de mainproc donne-t-elle de meilleurs résultats chez toi ?
Code:
 Sub c()
Dim c As Range, Arr() As String
Application.ScreenUpdating = False
For Each c In Range(Cells(12, 2), Cells(Rows.Count, 2).End(xlUp))
Arr = Split(c.Text, "/")
c = DateSerial(Arr(2), Arr(1), Arr(0)) & " " & TimeValue(Arr(3))
Erase Arr
Next
Range(Cells(12, 2), Cells(Rows.Count, 2).End(xlUp)).NumberFormatLocal = "jj/mm/aaaa hh:mm:ss"
End Sub

Je me permets de décoffrer le code de Modeste (pour ce qui est de la conversion) ;)
(macro qui saura déterminer le nombre de lignes)
Code:
Sub Conversion()
Columns("C:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
With Range(Cells(12, 2), Cells(Rows.Count, 2).End(xlUp))
    .TextToColumns Destination:=Range("B12"), DataType:=xlFixedWidth, _
        OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(8, 9), Array(9, 1)), _
        TrailingMinusNumbers:=True
    With .Offset(, 2)
        .FormulaR1C1 = "=RC[-2]+RC[-1]"
        .NumberFormatLocal = "jj/mm/aaaa hh:mm:ss"
        .Value = .Value
    End With
End With
End Sub

Sinon sur mon PC, la macro mainproc fonctionne et donne bien des dates reconnues par Excel
(sans rien faire d'autre que d’exécuter la macro)
 
Dernière édition:

sshikamaru

XLDnaute Nouveau
Re : macro de conversion

il me dit erreur d'exécution '13' : incompatibilité de type et me renvoi à la ligne :
Code:
c = DateSerial(Arr(2), Arr(1), Arr(0)) & " " & TimeValue(Arr(3))


Edit :

Non en fait ça marche, mais il faut toujours que j'édite la case pour que le graphique voye la valeur comme une date
actuellement, si tu met les xmin et xmax en auto sur le graphique, il commence le 01/01/1900
 
Dernière édition:

Statistiques des forums

Discussions
312 111
Messages
2 085 403
Membres
102 883
dernier inscrit
jameseyz