Insertion nom fichier et date du fichier
jbouille
-
f -
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 !!!
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:
- Insertion nom fichier et date du fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier .dat - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
4 réponses
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.
Du coup, ton code d'importation de données devient
et tu peux réutiliser DateSaisie pour calculer ton écart :
Est-ce que ça répond à ta question ?
I.
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.
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 :
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 :
A suivre...
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...
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
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
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
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...
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...
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