Insertion nom fichier et date du fichier

jbouille -  
 f -
Bonjour,

J'effectue une macro pour importer des fichiers qui ont un nom variables. En fait la date du fichier change, donc via une input box je demande à l'utilisateur de renseigner la date du fichier comme suit:

On Error GoTo ErrorHandler
Sheets("C2C_PNS").Select
Columns("A:W").Select
Selection.ClearContents
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\My Documents\REL\Projects\C2C\C2C Tool\" _
& InputBox("PNS FILE : Enter Date using the following format : YYYYMMDD") & " C2C_PNS.csv", Destination _
:=Range("A1"))
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1)
.Refresh BackgroundQuery:=False
End With

Cette macro fonctionne parfaitement mais j'aimerais rajouter un truc en plus. J'aimerais utiliser cette même date de fichier pour calculer un écart entre la date de facturation:

Exemple: date - date du fichier importer= écart en nombres de jours.

en fait avant j'utilsais la formule suivante:

ActiveCell.FormulaR1C1 = _
"=IF(OR(LEFT(RC[-8],3)=""411"",LEFT(RC[-8],3)=""416""),DATE(RC[-22],1+RC[-23],1)-1-RC[-13],"""")"
dans VBA pour me donner l'écart à la fin du mois. Mais j'aimerais que cette fin du mois soit remplacer par la date du fichier importer.

Je sais pas si je suis très clair, mais si quelqu'un peut m'aider ça serait génial.

Merci !!!
A voir également:

4 réponses

Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
Salut Jibouille,
ce que tu peux faire, c'est stocker la date saisie dans une variable. Ainsi, tu pourras la réutiliser ensuite pour ton calcul d'écart.
Dim DateSaisie As Long
DateSaisie = InputBox("PNS FILE : Enter Date using the following format : YYYYMMDD")

Du coup, ton code d'importation de données devient
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\My Documents\REL\Projects\C2C\C2C Tool\" & DateSaisie & _
" C2C_PNS.csv", Destination:=Range("A1"))

et tu peux réutiliser DateSaisie pour calculer ton écart :
EcartJours = Year(Date) * 10000 + Month(Date) * 100 + Day(Date) - DateSaisie

Est-ce que ça répond à ta question ?
I.
0
jbouille
 
C'est exactement ce que je veux merci.

Par contre pour l'instant ça ne marche pas encore parfaitement:

Dim DateSaisie As Long
DateSaisie = InputBox("PNS FILE : Enter Date using the following format : YYYYMMDD")
Range("X2").Select
ActiveCell.FormulaR1C1 = "=DateSaisie - RC[84]*10000+RC[85]*100+RC[86]"
Range("X3").Select
End Sub

La macro tourne correctement mais me ramène #NAME?. Sa ne reconnait pas la variable??

RC[84] étant l'année, RC[85] mois, RC[86] jour.

Merci
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
Bonjour !
C'est normal, car DateSaisie est une variable VBA, qui n'est pas reconnue par Excel. Pour utiliser dans la formule la valeur de DateSaisie, modifie comme suit :
ActiveCell.FormulaR1C1 = "=" & DateSaisie & " - (RC[84]*10000+RC[85]*100+RC[86])"

Autre correction :
Quand la boîte message s'affiche, si ton utilisateur fait Annuler, ou OK sans avoir rien saisi, des erreurs vont se produire.
Il faudrait corriger comme suit :
Dim DateSaisie 'supprime As Long
DateSaisie = InputBox("PNS FILE : Enter Date using the following format : YYYYMMDD")
If DateSaisie = Empty Then Exit Sub

A suivre...
0
jbouille
 
Maintenant ça fonctionne correctement mais il y a un détail auquel on avait pas penser. Pour les date antérieurs 2008, l'écart n'est plus valable car c'est un champ numérique.

20071107-20080514= 9407

La je sèche complet.

Pour la suite du code, si iy a annuler j'avais mis un code d'error.

On Error GoTo ErrorHandler
....

ErrorHandler:

Dim Msg, Style, Title, Response
Msg = " ERROR !" & _
vbCrLf & " " & _
vbCrLf & " THE DATE FORMAT IS NOT VALID OR THE IMPORT FILE DOES NOT EXIST" & _
vbCrLf & " " & _
vbCrLf & " Please restart the import process using the proper format" & _
vbCrLf & ".............................................................................................."

Style = vbOK + vbExclamation + vbDefaultButton3
Title = "WARNING"
Response = MsgBox(Msg, Style, Title)

End Sub

Peut être plus simple de faire comme vous dite.

Merci
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
Pour les calculs de dates, il faudrait un format de date compris par Excel.
On peut donc déclarer une seconde variable, qu'on utiliserait pour les calculs
Dim LaDate As Long
LaDate = DateSerial(CInt(Left(DateSaisie, 4)), CInt(Mid(DateSaisie, 5, 2)), _
        CInt(Right(DateSaisie, 2)))


Pour la gestion des erreurs :
garde ton On Error GoTo ErrorHandler, c'est beaucoup mieux (c'est même indispensable pour les utilisateurs !)
ce qui n'empêche pas d'avoir un Exit Sub ou un message d'erreur particulier à la sortie de l'InputBox

A suivre...
0
jbouille
 
OK super merci pour tous les conseilles ! Tout fonctionne nickel. Et j'ai appris le truc des variables, m'en servais jamais avant.

Bonne fin de journée,
0
f > jbouille
 
fff
0
f > f
 
ff
0