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

macros pour transformé date "exotique"

  • Initiateur de la discussion Initiateur de la discussion fredh
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fredh

XLDnaute Occasionnel
[Resolu] macro pour transformé date "exotique"

Bonjour a tous

J'ai un soft qui m'extrait des valeurs d'une base de données.
Seulement voila j'ai une celulle qui a un format de date tres bizarre que j'aimerai changer en quelque chose de convenable.
Ex: En A1 j'ai le texte :
Monday, December 03, 2007 22:39:50
J'aimerai que ca deviennent :
A1 --> 03.12.07
B1 --> 22:39:50

il faudrait que la transformation transforme A1 puis A2 puis A3 etc jusqu'a la fin de Ax

Je suis debutant en VBA mais je ne sais pas du tout dans quel direction chérché.
merci de votre aide.

@+
 

Pièces jointes

Dernière édition:
Re : macros pour transformé date "exotique"

😉Bonjour à tous,

un bon exemple vaut mieux que tous les discours, je te renvoie ton fichier avec les explication

click sur le lien



a+
Rafael
 
Re : macros pour transformé date "exotique"

Bonjour rafael

Merci de repondre

Baleze le "tableau croisé".... Ton fichier repond au probleme posé mais je desir faire cela en VBA (integré dans un code deja existant)

J'ai adapté la mise en forme en VBA, ca donne ceci :
Code:
Sub aCSV_date2()
    Application.ScreenUpdating = False
    For n = 1 To Range("A65536").End(xlUp).Row
        col = 1
        Cells(n, col).TextToColumns Destination:=Cells(n, col), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
            Semicolon:=False, Comma:=True, Space:=True, Other:=False, FieldInfo:= _
            Array(Array(1, 9), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
            TrailingMinusNumbers:=True
        col = col + 1
    Next n
    Application.ScreenUpdating = True
End Sub

maintenant je bloque sur l'adaptation VBA de "tableau croisé" et les formules. je vais fouillé mes meninges mais je suis bien sur preneur de toutes solutions.

@+
 
Re : macros pour transformé date "exotique"

Bonjour,
Voici le code et le classeur

Code:
Sub ConvertirDates()
    Range("A1").CurrentRegion.Select
    For Each Cell In Selection
        MyString = Split(Cell.Value, ",")
        MyDate = Mid(MyString(1), 2, 12)
        MyNoJour = Right(MyString(1), 2)
        MyNameMois = Mid(MyDate, 1, WorksheetFunction.Find(" ", MyDate, 1) - 1)
        MyYear = Mid(MyString(2), 2, 4) 
        MyHeure = Right(MyString(2), 8)
        Select Case MyNameMois
        Case "January"
            NomMois = "01"
        Case "February"
            NomMois = "02"
        Case "March"
            NomMois = "03"
        Case "April"
            NomMois = "04"
        Case "May"
            NomMois = "05"
        Case "June"
            NomMois = "05"
        Case "July"
            NomMois = "07"
        Case "August"
            NomMois = "08"
        Case "September"
            NomMois = "09"
        Case "October"
            NomMois = "10"
        Case "November"
            NomMois = "11"
        Case "December"
            NomMois = "12"
        End Select
        Cell.Value = NomMois & "/" & MyNoJour & "/" & MyYear
        Cell.NumberFormat = "dd.mm.yyyy"
        Cell.Offset(0, 1).Value = MyHeure
    Next Cell
End Sub
 

Pièces jointes

Re : macros pour transformé date "exotique"

Bonjour,

En formule, eh oui, c'est possible :

Code:
=(EQUIV(GAUCHE(STXT(A1;TROUVE(" ";A1)+1;99);TROUVE(" ";STXT(A1;TROUVE(" ";A1)+1;99))-1);
{"January";"February";"March";"April";"May";"June";"July";"August";"September";
"October";"November";"December"};0)&"/"&STXT(STXT(A1;TROUVE(" ";A1)
+1;99);TROUVE(" ";STXT(A1;TROUVE(" ";A1)+1;99))+1;2)&"/"&STXT(
STXT(A1;TROUVE(" ";A1)+1;99);TROUVE(",";STXT(A1;TROUVE(" ";A1)
+1;99))+2;4))*1

Supprimer le cas échéant les retours à la ligne.

@+
 
Re : macros pour transformé date "exotique"

re,

Effectivement, une petite inversion entre le mois et le jour lors de la constitution de la formule :

Version corrigée :

Code:
=(STXT(STXT(A1;TROUVE(" ";A1)
+1;99);TROUVE(" ";STXT(A1;TROUVE(" ";A1)+1;99))+1;2)
&"/"&EQUIV(GAUCHE(STXT(A1;TROUVE(" ";A1)+1;99);TROUVE(" ";STXT(A1;TROUVE(" ";A1)+1;99))-1);
{"January";"February";"March";"April";"May";"June";
"July";"August";"September";"October";"November";"December"};0)
&"/"&STXT(STXT(A1;TROUVE(" ";A1)+1;99);TROUVE(",";STXT(A1;
TROUVE(" ";A1)+1;99))+2;4))*1

@+
 
Re : macros pour transformé date "exotique"

😉Bonjour à tous,

un bon exemple vaut mieux que tous les discours, je te renvoie ton fichier avec les explication

click sur le lien



a+
Rafael

Bonjour

Merci d'éviter ce genre de réponse. En effet les fichiers sur cjoint ne sont pas eternels ils sont vite supprimés. Donc ta réponse aussi interessante soit-elle ne sera plus d'aucune utilité dans quelques jours. Et XLD a pour vocation non seulement de répondre aux questions mais aussi d'être une base de réponse ce qui n'est pas le cas avec les fichiers placés sur cjoint.

Bonne fin de journée
 
Re : macros pour transformé date "exotique"

Bonsoir a tous

Merci de participer

voici mon petit code :
Code:
Sub aCSV_date5()
    nepasprendredate = ",0,1,"
    Application.ScreenUpdating = False
    end_date = 0
    For n = 3 To Range("A65536").End(xlUp).Row
            [COLOR=seagreen]'MsgBox "1er etape   Ligne " & n[/COLOR]
            num = 0
            numr = 0
            col = 1
            t = Split(Range("A" & n), " ")
            r = Split(Range("A" & n), ";")
            If end_date = 0 Then
                For m = 1 To UBound(t)
                    If num = 2 Then
                        Cells(n, col - 2) = t((num) + 1) & "." & t(num) & "." & t((num) + 2)
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), ",", "")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "January", "01")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "February", "02")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "March", "03")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "April", "04")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "May", "05")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "June", "06")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "July", "07")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "August", "08")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "September", "09")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "October", "10")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "November", "11")
                        Cells(n, col - 2) = Replace(Cells(n, col - 2), "December", "12")
                        [COLOR=seagreen]'Cells(n, col - 2).NumberFormat = "dd.mm.yyyy"[/COLOR]
                        [COLOR=red]Cells(n, col - 2).NumberFormat = "m/d/yyyy"[/COLOR]
                    End If
                    If num = 5 Then
                        Cells(n, col - 4) = Left(t(num), 8)
                    End If
                    If num > 5 Then
                        end_date = 1
                    End If
                    col = col + 1
                    num = num + 1
                Next m
            End If
            If end_date = 1 Then
                [COLOR=seagreen]'MsgBox "2em etape    Ligne" & n[/COLOR]
                col = 3
                For p = 1 To UBound(r)
                    [COLOR=seagreen]'If InStr(nepasprendredate, "," & CStr(num) & ",") = 0 Then[/COLOR]
                    Cells(n, col) = r((numr) + 1)
                    col = col + 1
                    [COLOR=seagreen]'End If[/COLOR]
                    numr = numr + 1
                    If col > 256 Then Exit For
                Next p
            End If
        end_date = 0
    Next n
    Application.ScreenUpdating = True
End Sub


Voila ca marche bien sauf que j'ai un soucis :
la date generé par la macro est un "texte" qui a l'apparence de DD.MM.YYYY mais si on change le formatage de la celulle en "Texte" alors je n'ai pas un nombre (du genre 39971) mais un texte du genre "30.12.2007".
Comment paré a ce probleme car pour filtré/Trié cela ca va etre dur....

Je n'ai pas vu toute les participation. Merci a tous je vais me pencher sur vos solution, en attendant de trouvé mon probleme de "formatage"
Ci joint le fichier exemple mise a jour
 

Pièces jointes

Dernière édition:
Re : macros pour transformé date "exotique"

Bonjour,

étant formuliste, j'ai quelque peine à comprendre ta macro.

Cela dit, une piste peut-être :

Il doit s'agir d'une chaine de caractère qui ressemble à s'y méprendre à une date.

Pour que Excel la considère comme une date, il suffit de multiplier cette chaîne par 1 et de mettre la formule au format date souhaité.

Je te laisse faire pour adapter ta macro.

Le tout sous toutes réserves compte tenu de mes compétences Vbaïstiques proches du zéro absolu.

@+
 
Re : macros pour transformé date "exotique"

Tibo : baleze la formule...
Merci pour la formule.
Je me demandais Si elle est valable pour excel inferieur a 2003? Car je crois que le nombre de caractere par ligne sous excel inferieur a 2003 est limité a 255.
ta formule en fait 377...
Mais peut etre suis je mal renseigner

Pour mon probleme je prefere resté sous VBA car les données sont importé depuis une Base de données et stocké en *.CSV
Donc j'utilise une macro pour tout formaté...

@+
 
Re : macros pour transformé date "exotique"

re,

Pas de souci sous 2000 pour la longueur de la formule (longueur acceptée : 1024 caractères)

Par contre, je ne sais plus quelle était la version limitée à 255 caractères. 95 peut-être ?

@+
 
Dernière édition:
Re : macros pour transformé date "exotique"

Bingo Tibo j'ai essayer dans le classeur est effectivement ca marche.
Maintenant je ne sais pas comment prendre la valeur de A3 et lui dire qu'elle est egale a A3*1. je vais cherché dans cette direction...
Merci et @+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…