Macro VBA qu ne marche pas en la lançant

richert90

XLDnaute Occasionnel
Bonjour à tous,
J'ai dans un fichier 2 colonnes:
dans une, j'ai des dates avec des heures et dans l'autre j'extrais en VBA juste la date (fonction left()).
Malheureusement ça inverse les mois et les jours assez fréquemment.
Pour essayer de remédier à cela, j'ai enregistré une macro permettant de convertir en format MJA les dates obtenues. lorsque j'enregistre la macro, j'ai bien une transformation des dates comme je veux mais lorsque je lance le code de la macro un autre coup, aucune modification...

Code:
Columns("C:C").Select
    Selection.TextToColumns Destination:=Range("C1"), FieldInfo :=Array(1, 3), TrailingMinusNumbers:=True

Quelqu'un aurait une solution?

Merci d'avance
 

Pièces jointes

  • convertir_dates1.xlsm
    17.5 KB · Affichages: 23
  • convertir_dates1.xlsm
    17.5 KB · Affichages: 25
  • convertir_dates1.xlsm
    17.5 KB · Affichages: 27

richert90

XLDnaute Occasionnel
Re : Macro VBA qu ne marche pas en la lançant

Bonjour,

VDAVID, je reviens de voir,
en effet, dans un onglet j'ai une colonne avec date+heure, je copie cette colonne dans un nouvel onglet et là ça m'inverse les MM/JJ pour certaines dates du type 01/12/2012... donc en extrayant ensuite dans cet onglet juste la date, pareil ce n'est pas bon ...
Je crois que je m'en sortirai jamais avec ces dates en vba
 

richert90

XLDnaute Occasionnel
Re : Macro VBA qu ne marche pas en la lançant

Re,
En fait nan, que je copie colle la colonne, il n'ya pas d'erreur, mais c'est ensuite quand je veux extraire la date de cette colonne (où il y a date+heure ) que j'ai vu un problème

Code:
For compte = 2 To i1
         With Cells(compte, 3)
            .Value = Left(Cells(compte, 4), 10)
            .Offset(0, 1).Value = CDate(Day(.Value) & "/" & Month(.Value) & "/" & Year(.Value))
         End With
    Next compte
Avec ce code la J'avais encore des ivnersion MM et JJ;

Je viens de tenter un truc qui à l'air de marcher avec ce code:

Code:
Sub test()
    For i = 2 To 29
         With Cells(i, 3)
            .Value = Left(Cells(i, 2), 10)
            .Offset(0, 0).Value = CStr(Day(.Value) & "/" & Month(.Value) & "/" & Year(.Value))
         End With
    Next i
End Sub
Ca à l'air de bien marcher (voir P.J). Mais encore une fois est-ce que ce sera toujours le cas? (windowd anglais?)
 

Pièces jointes

  • convertir_dates1.xlsm
    18 KB · Affichages: 23
  • convertir_dates1.xlsm
    18 KB · Affichages: 23
  • convertir_dates1.xlsm
    18 KB · Affichages: 22

richert90

XLDnaute Occasionnel
Re : Macro VBA qu ne marche pas en la lançant

Modeste geedee, oui j'ai regardé puisque je t'ai dit que je ne comprenais pas
Le fichier que tu m'a joins toutes les dates étaient inversées
Par exemple la première colonne il y avait écrit 11/27/2012 + heure....
c'est pas ce que j'avais au départ
Voila ce que j'obtiens avec ta méthode: PJ
 

Pièces jointes

  • convertir_dates1-1.xlsm
    18.5 KB · Affichages: 22
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Macro VBA qu ne marche pas en la lançant

Bonsour®
dans le fichier que tu fourni, il n'y a aucune date au format texte !!!

ce ne peut etre un fichier d'origine UK ou US !!!!
(28/11/2012 23:58 jj mm aaaa au lieu de mm jj aaaa sinon la date n'aurait pas été traduite le mois(28) est > 12)

ou bien il y à déjà eu des manipulations !!! :mad:

met ici un fichier brut d'import ... !!! :mad:
 

Modeste geedee

XLDnaute Barbatruc
Re : Macro VBA qu ne marche pas en la lançant

Bonsour®
:confused:
il me semble qu'il n'y a pas de problème de dates inversées ou erronées dans ce fichier ...
rappel :
dans une, j'ai des dates avec des heures et dans l'autre j'extrais en VBA juste la date (fonction left()).
Malheureusement ça inverse les mois et les jours assez fréquemment.
???
ne serait-ce pas les manipulations VBA qui créent le problème ???


nb: pour extraire la date seule d'une cellule avec dates avec des heures
la fonction prendre la partie entière suffit (sauf si les dates ne sont pas de type date mais texte !!!)
 

richert90

XLDnaute Occasionnel
Re : Macro VBA qu ne marche pas en la lançant

En utilisant cela , ca à l'air de bien marcher:
Code:
For compte = 2 To i1
         With Cells(compte, 3)
            .Value = Left(Cells(compte, 4), 10)
            '.TextToColumns FieldInfo:=Array(1, 3)
            .Offset(0, 0).Value = CStr(Day(.Value) & "/" & Month(.Value) & "/" & Year(.Value))
         End With
    Next compte

concernant la fonction ent() je l'ai essayer sur des cellules de types dates (ou il y a l'heure et la date) et j'obtiens la date + 00:00

Sinon, j'ai continué mon travail car l'objectif final est de rentrer les dates isolées, sans doublons, dans une zone de liste d’un Userform pour ensuite que l'utilisateur choisisse une date et filtre sur celle-ci.
Ci-joint le classeur associé. merci de jeter un coup d’œil et me dire ce qui ne va pas dans le code. Je rappelle que j'aimerais que ça marche sur toutes les version d'excel (français/anglais) et sur tous les OS ( français/anglais).
Et j'ai un peu peur de l'utilisation du Cdate()....

Merci d'avance,
 

Pièces jointes

  • convertir_dates2.xlsm
    47.4 KB · Affichages: 21
  • convertir_dates2.xlsm
    47.4 KB · Affichages: 21
  • convertir_dates2.xlsm
    47.4 KB · Affichages: 22

Modeste geedee

XLDnaute Barbatruc
Re : Macro VBA qu ne marche pas en la lançant

Bonsour®
:confused:
VB:
Sub test2()
    For i = 2 To 721
         With Cells(i, 4)
            .Value = Int(Cells(i, 3))
            .NumberFormat = "dd mmm yyyy"
         End With
    Next i
End Sub

garde le format interne excel, seul l'affichage est au format "français" jour mois année
le mois étant affiché en littéral local selon le langage de l'OS local

sinon voir l'usage des LCIDs pour l'affichage selon la langue locale...
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Macro VBA qu ne marche pas en la lançant

Re,
J’aimerais savoir ce que ça change numerformat="dd/mm/yyyy" comparé à ce que j'avais mis?
Merci d'avance

:mad:
Parce que tu traficotes le format interne (value) en fonction d'un affichage lié aux paramètres locaux
With Cells(compte, 3)
.Value = Left(Cells(compte, 4), 10)
' ce qui est absurde car si la cellule est réellement une date : Value(format interne) est un nombre décimal !!!
'.TextToColumns FieldInfo:=Array(1, 3)
.Offset(0, 0).Value = CStr(Day(.Value) & "/" & Month(.Value) & "/" & Year(.Value))
c'est du texte que "By Design" Excel essaiera de traduire selon paramètres locaux(Fr) # paramètres US ou UK

le format interne d'une date (value i.e 41246,1234) reste inchangé quelque soient les paramètres locaux (sauf Chgt calendrier 1904) !!!
:rolleyes:
non je ne me fâche pas, le B.A.BA EXCEL est incontournable devant VBA !!!
:mad:
 

richert90

XLDnaute Occasionnel
Re : Macro VBA qu ne marche pas en la lançant

Bonjour,

Alors voilà Modeste geedee, j'ai testé avec ta méthode d'extraction de la date.
Ça semble plutôt bien fonctionné avec le
Code:
.NumberFormat = "dd/mm/yyyy"
.
J'ai une question lors du filtre que j'applique sur ces dates (qui à l'air de bien marché quand même):
Code:
If Filtre.zl_date <> "" Then
            date1 = CDate(Filtre.zl_date.Value) 'cdate() convertit une chaine en date.
            ActiveSheet.Range("$C$1:$E$721").AutoFilter Field:=2, Criteria1:="=" & date1
    Else 'Si le champ n'est pas rempli:
        Filtre.zl_date = ""
    End If
Est-ce que c'est bon, où devrais-je pas plutôt utilisé une autre fonctionq ue le Cdate (pour qu'il n'y ait pas de problèmes pour une utilsiation sous un OS Anglais)?

Merci d'avance
 

Pièces jointes

  • convertir_dates2-1.xlsm
    40.7 KB · Affichages: 15

richert90

XLDnaute Occasionnel
Re : Macro VBA qu ne marche pas en la lançant

Re, j'ai pu testé sur un Excel en Anglais,

L'extraction de la date marche bien :), par contre, en cliquant sur le bouton de filtre j'ai vu que dans la zone de liste du userform, toutes les dates avaient le mois inversé avec le jour...
Et j'ai vu dans mon code que quand je copiais collais la colonne des dates (pour supprimer les doublons - c'est cette colonne la que je remplis dans la zone de liste), j'avais:
Code:
Columns("K:K").NumberFormat = "m/d/yyyy"
Je l'ai donc remplacé par "dd/mm/yyyy", mais en retestant sur ce Excel en anglais , jai toujours cette inversion des jours et mois....
Mais du coup je suis repassé par :
Code:
'Format colonne K sans doublons:
         For a = 2 To fin
            With Cells(a, 11)
                .Value = Int(Cells(a, 11))
                .NumberFormat = "dd/mm/yyyy"
            End With
        Next a
Comme ça, c'est toujours bon..
Pourtant dans la zone de liste du userform je me retrouve toujours avec cette inversion de mois et de jours...
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 370
Messages
2 087 696
Membres
103 642
dernier inscrit
nolem