Bonjour,
J'ai un soucis que je n'arrive à résoudre et je vais essayer d'expliquer ça clairement:
J'ai créé une macro que j'ai exporté en un fichier .bas. Cette macro permet la conversion de dates (situées dans une même colonne) au format FR à partir de dates aux format différents (format de la cellule Date ou Standard suivant le chiffre du mois: si <12 -> Excel l'interprète comme une date au format FR, si >12 -> Excel l'interprète comme du texte).
J'exécute un Userform à l'ouverture d'un fichier 1. Ce Userform ouvre un fichier 2, importe le fichier bas puis exécute la macro importée du fichier bas dans le fichier 2, le sauvegarde puis le referme.
Lorsque j'exécute cette macro directement à partir du fichier 2 (à la main), aucun soucis.
Le problème se produit lorsque la macro est exécutée à partir du Userform et du fichier 1. La conversion ne se déroule pas comme prévue mais ne m'indique aucun message d'erreur. Cependant j'ai des dates fausses en sortie (mauvais jour/mois et/ou année).
Voici ma macro de conversion des dates:
Je fais appel au fichier 2 par un Application.Workbooks.Open, importe le fichier bas par VBProject.VBComponents.Import et lance la macro par un Application.Run. J'ai eu du mal mais finalement cela fonctionne bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Dim i, DernLign As Long DernLign = Range("H" & Rows.Count).End(xlUp).Row Columns("G:G").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove For i = 2 To DernLign If IsEmpty(Cells(i, 8)) = False Then Cells(i, 7).FormulaR1C1 = "=IF(LEN(RC[1])=5,DATE(RIGHT(TEXT(RC[1],""mm/jj/aaaa""),4),MID(TEXT(RC[1],""mm/jj/aaaa""),4,2),LEFT(TEXT(RC[1],""mm/jj/aaaa""),2)),DATE(RIGHT(RC[1],4),LEFT(RC[1],2),MID(RC[1],4,2)))" End If Next i Columns("G:G").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Cells(1, 7).Value = "Due Date" Range(Cells(2, 8), Cells(DernLign, 8)).Copy Range(Cells(2, 7), Cells(DernLign, 7)).PasteSpecial Paste:=xlPasteValues Range(Cells(2, 7), Cells(DernLign, 7)).NumberFormat = "m/d/yyyy" Columns("I:I").Delete Columns("H:H").Delete
Je suspecte un problème de format de date par le code VBA (format US uniquement géré, si je ne me trompe pas). Cependant je ne comprends pas pourquoi la macro fonctionne très bien quand je l'exécute directement dans le fichier et pas dans l'autre cas.
Merci pour vos lumières expertes!
Bien cordialement.
Partager