Défaut de date US / FR dans un macro

Bonjour,

Après changement d'outil informatique, je me retrouve confronté à un problème de format de date.

Le tableau joint vient d'un autre document bien plus gros. Dans l'espoir d'obtenir votre aide, je l'ai épuré au maximum.

Dans l'onglet "crédit_débit", je clique sur mensualité puis ensuite sur OK : les 2 lignes de l'onglet "mensualité" sont copiées pour faire le débit et 2 autres lignes apparaissent pour créditer automatiquement.

Cependant, dans cette 2ème ligne, le mois et la date sont inversé. Elles ne sont respectées QUE lorsque la date dans l'onglet "mensualité" est supérieur à 12.

Est-ce que vous auriez des solutions ?

Le défaut ne vient pas de la mise en forme de la cellule, ni d'un choix de langue dans les paramètre avancé. J'ai aussi essayé des fonctions comme

date_reformatee = Format(date_initiale, "mm/dd/yyyy")

ou

CDate(CSng(Date))

mais je n'ai pas solutionné mon problème. Après je ne suis pas un expert excel.

Dans l'espoir d'obtenir votre aide...

23date.xlsm (60.13 Ko)

Bonjour,

à tester,

date_reformatee = DateSerial(Year(date_initiale), Month(date_initiale), Day(date_initiale))

Bonjour,

Merci de me venir en aide.

La formule ne fonctionne pas, je tombe toujours sur "l'erreur 13 incompatibilité de type".

Pour faire fonctionner la macro, je demande au VBA dans un 1er temps de lire les données, dont la date (ligne 77 du VBA) à la formule :

sDate = oShMens.Range("B" & iLig).Value
            If Int(sDate) < 10 Then
                sDate = "0" & sDate
            End If
            sDate = sDate & "/" & NumMois(sMois) & "/" & CStr(iAnnee)
            oShDC.Range("C" & iLigEcrite).Value = CDate(sDate)

J'ai ici avec sDate mise en place votre formule mais j'ai pour résultat erreur 13

Je me demande si cela ne viendrait aussi pas de la ligne 156 du code VBA :

AffecterValeur poShDC.Range("B" & iLigInverse), poShDC.Range("B" & piLigTrf1).Value

. Je copie ici la valeur colonne B ligne iLigInverse et colle la valeur à l'autre ligne qui aura été créé "piLigTrf1".

J'utilise cette formule pour copier les celules de la ligne du haut. Hors pour la date, il prends le format US dans cette 2ème ligne.

Cordialement,

7date.xlsm (60.29 Ko)

bonjour

voila une macro pour inverser Mois Jour

Sub InverMoisJour()
Dat = Split(Range("A2").Value, "/")
Range("A2").Value = DateSerial(Dat(2), Dat(0), Dat(1))
End Sub

A+

Maurice

Bonjour,

J'ai essayé d'adapter votre formule à la macro, soit ligne 76 et ligne 126 :

 sDate = Split(Range("B" & iLig).Value, "/")
Range("B" & iLig).Value = DateSerial(Dat(2), Dat(0), Dat(1))

Cela ne fonctionne pas. J'ai toujours erreur 13, ou erreur de compilation,

42date.xlsm (58.46 Ko)

bonjour

tu a pas de date dans la colonne B ??

voile une petite macro si tu a pas de date il ne fait rien

Sub Test()
Set oShMens = Worksheets("Mensualisation")
With oShMens
   For iLig = 2 To 3
      If IsDate(.Range("B" & iLig).Value) Then
         Dat = Split(.Range("B" & iLig).Value, "/")
         .Range("B" & iLig).Value = DateSerial(Dat(2), Dat(0), Dat(1))
      End If
   Next
End With
End Sub

A+

Maurice

Bonjour à tous...

L'inversion mois/ jour d'une date est un problème récurrent en VBA, dû au fait que toute chaîne (donnée String) est susceptible d'être automatiquement convertie en date par VBA, qui lui appliquera dès lors le format américain pour reconnaître la chaîne en tant que date, ce qui provoque l'inversion dès lors que le jour est inférieur à 13...

Dès lors toute date sous forme texte doit être explicitement convertie (CDate ou DateValue), ce qui conduit VBA à utiliser les paramètres régionaux du système pour opérer la reconnaissance en tant que date.

Ceci fonctionne bien par exemple lors de l'affectation d'une valeur de TextBox (valeur texte) à une cellule, si la donnée convertie est immédiatement affectée (VBA n'a plus la main sur elle dès lors qu'elle est dans Excel), mais si VBA a l'occasion de réintervenir avant affectation définitive, il peut toujours reconvertir et provoquer l'inversion.

La parade est alors d'opérer une double conversion : conversion en nombre (CLng entier long) du texte converti en date :

vdate = CLng(CDate(txtdate))

La date, convertie en sa valeur numérique n'est plus susceptible de transformation. Il convient alors de veiller lors de l'affectation, à mettre la cellule au format date voulue (car si la cellule est au format Standard, Excel ne lui appliquera plus alors un format automatique de date par défaut...)

Dans l'autre sens (récupération d'une date dans une cellule), l'objet Range dispose d'une propriété spécifique :

vdate = .Cells(x, y).Value2

Value2 permet de récupérer une valeur date sous sa forme numérique de stockage, qui ne pourra alors faire l'objet de conversion automatique.

En ce qui concerne les variables destinées à accueillir des dates, pour ma part (sauf exception !) je les laisse toujours en type Variant, ce qui lors de la manipulation de données représentatives de dates, qui peuvent être de type String, Long ou Date, évite les incompatibilités de type...

Cordialement.

bonjour,

D'un autre coté mettre des variables String pour des jour, Mois, Année... Faut avoir de l'imagination !

Ma contribution en pièce jointe...

Euh... j'ai élagué ! Mais l'idée est là...

108date-vg.xlsm (47.62 Ko)
galopin01 a écrit :

D'un autre coté mettre des variables String pour des jour, Mois, Année... Faut avoir de l'imagination !

Excellent ! A l'heure du punch ! Santé !

Bonjour à tous,

Pour s'éviter tout problème en VBA ... DateSerial() permet de s'éviter les problèmes de format de date ...

La solution d'Isabelle ... Coucou Isa ...

Bonjour,

Merci pour votre contribution à tous et vos explications.

Je pense avoir compris vos formules, vous n'utilisez plus la config "String". Cependant, le défaut d'inversion est toujours présent avec mon outil informatique. J'ai à nouveau bien vérifié la config du PC, et tous est bon. J'ai joué avec les formules que vous m'avez tous fournis, mais rien y fait.

Dans votre dernier doc, ligne 173, il y a encore un formule paramétré sous "string" avec "dim sMois As String". Est-ce que le défaut pourrait venir de là ?

Bonjour,

Avez vous testé mon fichier de 4h50 ? je suppose que Non...

Je n'ai modifié que la Sub Mensuel et le UserForm mais je n'utilise aucune variable "As String".

Ni smois... Ni aucune ligne 173...

Normalement il n'y a pas à "jouer avec mon code" : Donc il n'y a pas de raison que ça ne marche pas. Si ça marche sur mon classeur ça doit marcher ailleurs...

A+

Rechercher des sujets similaires à "defaut date macro"