Macro Excel avec exécution d'un .bat

Fermé
om51ft - 13 nov. 2007 à 16:44
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 11 déc. 2007 à 23:17
Bonjour,
Mon fichier d'entrée contient 4 rubriques : ville entrée, dep entrée, ville sortie, dep sortie
Ma macro créé un fichier avec 2 lignes.
1er ligne : ville entrée, dep entrée
2ème ligne : ville sortie, dep sortie
Je voudrais pouvoir exécuter un .bat à partir de cette macro Excel. Est-ce possible ? Ce .bat lance une requète avec un autre utilitaire qui me renvoit le kilomètrage entre les 2 villes. En sortie, je dois récupérer un fichier avec toutes les informations du fichier en entrée, plus le kilométrage
Merci de vos idées
A voir également:

24 réponses

om51ft Messages postés 22 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 6 février 2008
29 nov. 2007 à 12:06
Bonjour
J'ai malheureusement encore un problème. Ma macro crée en sortie le fichier de la feuille Loxane, mais je voudrais récupérer les infos des cellules de la feuille du fichier en entrée qui est dans la feuille SAP.JE pense qu'il me faut faire des modifs au niveau de la lecture des résultats mais il faut tenir compte des fameuses lignes où le calcul et négatif.
Comment faire ?
Merci
Florence

En entrée : Département départ, Ville Départ, Département Arrivée, Ville Arrivée
En sortie : reprise des infos du fichier d'entrée + kilométrage calculé



Sub SAPtoLOXANE()
'
' SAPtoLOXANE
' Version : 1.0
' Date : 19/11/2007


' Blocage des alertes et des fenêtres pop-up
Application.DisplayAlerts = False

' Préparation de la feuille Loxane
Worksheets("LOXANE").Select
Cells.Select
Selection.ClearContents
Range("A1").Select

' Préparation de la feuille de données SAP
Worksheets("SAP").Select
Cells.Select
Application.CutCopyMode = False
Selection.ClearContents
Range("A1").Select


' Declaration des variables et initialisation
Worksheets("ListeFichiers").Cells(4, 2).Value = 0 ' Zone de test pour la présence des fichiers
Dim i, n As Integer
i = 1
n = 1
Dim iMax, fichierResultExist, fichierDataExist, test As Integer
iMax = 1
Dim fichierLoxane As String
fichierLoxane = ""

' Chargement des données à partir du fichier SAP
FindFileData
testF = Worksheets("ListeFichiers").Cells(4, 2).Value
If testF <> 0 Then
ChargerDonneesSAP
End If

' Correction des noms de villes SAP pour reconnaissance par Loxane
corrigerNomVillesIn

' Positionnement pour Traitement des données
Worksheets("SAP").Select

' Boucle principale sur les lignes à triater
While Worksheets("SAP").Cells(i, 1).Value <> ""

' Initialisation du booléeen, existant d'un fichier résultat
test = 0

'Copie des données ligne à ligne dans la feuille d'envoi vers Loxane
Worksheets("Output").Cells(1, 1).Value = "Code_postal"
Worksheets("Output").Cells(1, 2).Value = "Ville"
Worksheets("Output").Cells(1, 3).Value = "Code_Pays"
Worksheets("Output").Cells(2, 1).Value = Worksheets("SAP").Cells(i, 1).Value
Worksheets("Output").Cells(2, 2).Value = Worksheets("SAP").Cells(i, 2).Value
Worksheets("Output").Cells(2, 3).Value = "F"
Worksheets("Output").Cells(3, 1).Value = Worksheets("SAP").Cells(i, 3).Value
Worksheets("Output").Cells(3, 2).Value = Worksheets("SAP").Cells(i, 4).Value
Worksheets("Output").Cells(3, 3).Value = "F"

' Positionnement avant copie
Sheets("Output").Select
Range("A1").Select


' Enregistrement dans le fichier de traitement Loxane (fichier LOXVKM)
EnregLOXVKM
' Enregistrement du dossier XLS (conservation de structure)
ActiveWorkbook.SaveAs Filename:= _
"D:\Loxane\SAP2LOXANE.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False


' Lancement du calcul par Loxane (copie du fichier data et de la requête)
' Copie du fichier requête et du fichier de données à traiter.
Shell "d:\Loxane\TREQITI.BAT"

' Temporisation 5" pour le calcul du serveur Loxane
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime


' Chargement des données résultats de Loxane (fichier LOXKM) si existe
FindFileRes
test = Worksheets("ListeFichiers").Cells(4, 2).Value

If test <> 0 Then
LectureResultats (n)
' Incrément secondaire pour les résultats
If LectureResultats(n) <> 0 Then
' Gestion de la ligne dans le cas où le résultat Loxane n'est pas bon ( km négatif)
n = n + 1
End If
End If

' Suppression fichier résultat de Loxane après traitement pour ne pas rendre
' de faux résultat
Shell "d:\Loxane\del_res.BAT"

' Incrément principal (traitement des lignes demandées par SAP)
i = i + 1


Wend

' Reprise des noms de ville connus par SAP
corrigerNomVillesOut


If testF <> 0 Then
' Création d'un fichier pour SAP avec Timestamp
FileBackToSAP
' Passage des fichiers SAP dans le sous-dossier Archive
Shell "d:\Loxane\arc_sap.BAT"
End If

' Sauvegarde du dossier XLS et fermeture
ActiveWorkbook.Save

Application.Quit

ActiveWorkbook.Close


End Sub

Sub corrigerNomVillesIn()

'Reprise des noms de ville SAP en fonction de la table correction pour acceptation par Loxane

Worksheets("SAP").Select

Dim k, l As Integer
k = 1
l = 2

' Boucle principale sur les noms à corriger
While Worksheets("SAP").Cells(k, 1).Value <> ""
'Boucle secondaire sur les corrections connues
l = 2
While Worksheets("correction").Cells(l, 1).Value <> ""
If Worksheets("SAP").Cells(k, 2).Value = Worksheets("correction").Cells(l, 1).Value Then
Worksheets("SAP").Cells(k, 2).Value = Worksheets("correction").Cells(l, 2).Value
End If
If Worksheets("SAP").Cells(k, 4).Value = Worksheets("correction").Cells(l, 1).Value Then
Worksheets("SAP").Cells(k, 4).Value = Worksheets("correction").Cells(l, 2).Value
End If
l = l + 1
Wend
k = k + 1
Wend

End Sub
Sub corrigerNomVillesOut()

'Reprise des noms de ville SAP en fonction de la table correction pour acceptation par Loxane

Worksheets("LOXANE").Select

Dim k, l As Integer
k = 1
l = 2

' Boucle principale sur les noms à corriger
While Worksheets("LOXANE").Cells(k, 1).Value <> ""
'Boucle secondaire sur les corrections connues
l = 2
While Worksheets("correction").Cells(l, 1).Value <> ""
If Worksheets("LOXANE").Cells(k, 2).Value = Worksheets("correction").Cells(l, 2).Value Then
Worksheets("LOXANE").Cells(k, 2).Value = Worksheets("correction").Cells(l, 1).Value
End If
If Worksheets("LOXANE").Cells(k, 4).Value = Worksheets("correction").Cells(l, 2).Value Then
Worksheets("LOXANE").Cells(k, 4).Value = Worksheets("correction").Cells(l, 1).Value
End If
l = l + 1
Wend
k = k + 1
Wend

End Sub

Function Enreg(i As Integer)

' Non utilisée
Sheets("output").Select

loxanefichier = "output-" + Str(i)
ChDir _
"D:\Loxane"
ActiveWorkbook.SaveAs Filename:= _
"D:\Loxane\" + loxanefichier + ".txt" _
, FileFormat:=xlText, CreateBackup:=False


ActiveSheet.Select
ActiveSheet.Name = "output"
Range("H3").Select

End Function


Function EnregLOXVKM()

' Enregistrement du fichier de données à traiter pour Loxane

Sheets("output").Select

loxanefichier = "LOXVKM"
ChDir _
"D:\Loxane"
ActiveWorkbook.SaveAs Filename:= _
"D:\Loxane\" + loxanefichier _
, FileFormat:=xlText, CreateBackup:=False


ActiveSheet.Select
ActiveSheet.Name = "output"
Range("H3").Select



End Function

Sub FindFileRes()

'Test l'existence du fichier résultat de Loxane
With Application.FileSearch
.NewSearch
.LookIn = "d:\loxane\"
.SearchSubFolders = False
.Filename = "LOXKM"
End With

With Application.FileSearch
If .Execute() > 0 Then
Worksheets("ListeFichiers").Cells(4, 2).Value = .FoundFiles.Count
Else
Worksheets("ListeFichiers").Cells(4, 2).Value = 0
End If
End With



End Sub

Sub FindFileData()

'Test l'existence de fichier(s) source(s) issu(s) de SAP
With Application.FileSearch
.NewSearch
.LookIn = "c:\test\fromSAP"
.SearchSubFolders = False
.Filename = "LOXANE*.CSV"
End With

With Application.FileSearch
If .Execute() > 0 Then
Worksheets("ListeFichiers").Cells(4, 2).Value = .FoundFiles.Count
Else
Worksheets("ListeFichiers").Cells(4, 2).Value = 0
End If
End With




End Sub

Function LectureResultats(i As Integer)

' Ouverture du fichier retour de Loxane
ChDir "D:\Loxane\WayServ\Req"
Workbooks.OpenText Filename:="D:\Loxane\WayServ\Req\LOXKM", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
Array(3, 2), Array(4, 2), Array(5, 2)), TrailingMinusNumbers:=True

' Recopie des données
Windows("LOXKM").Activate
Range("A1:E2").Select

'Gestion de la ligne où le résultat Loxane renvoit un km négatif - ne pas prendre en compte
LectureResultats = 0
If Range("E2") > 0 Then
LectureResultats = 1
End If

Selection.Copy
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate
Range("G1").Select
ActiveSheet.Paste


Beep

Worksheets("LOXANE").Cells(i, 1).Value = Left(Worksheets("LOXANE").Cells(1, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 2).Value = Worksheets("LOXANE").Cells(1, 10).Value
Worksheets("LOXANE").Cells(i, 3).Value = Left(Worksheets("LOXANE").Cells(2, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 4).Value = Worksheets("LOXANE").Cells(2, 10).Value
Worksheets("LOXANE").Cells(i, 5).Value = Worksheets("LOXANE").Cells(1, 7).Value

Beep

' Suppression Donnnées source
Range("G1:K3").Select
Selection.ClearContents

Workbooks("LOXKM").Sheets("LOXKM").Activate
Windows("LOXKM").Activate
ActiveWorkbook.Close
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate


End Function
Sub ChargerDonneesSAP()

'Lister les fichiers à traiter
ListFile


'Préparation de la feuille de données SAP
Worksheets("SAP").Select
Cells.Select
Application.CutCopyMode = False
Selection.ClearContents
Range("A1").Select

Application.DisplayAlerts = False

Dim f, indexLibre As Integer
f = 6
indexLibre = 1
Dim fichierTraite As String


'Ouverture des fichiers en boucle
While Worksheets("ListeFichiers").Cells(f, 1).Value <> ""
fichierTraite = Worksheets("ListeFichiers").Cells(f, 1).Value

'Positionnement de l'index de position pour copie des nouvelles données
indexLibre = 1
While Worksheets("SAP").Cells(indexLibre, 1).Value <> ""
indexLibre = indexLibre + 1
Wend

ChDir "c:\test\fromSAP"

Workbooks.Open Filename:=fichierTraite
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
Semicolon:=True

' Copie des résultats
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy

' Collage des résultats au niveau de l'index de positionnement
Workbooks("SAP2LOXANE.xls").Sheets("SAP").Activate
Cells(indexLibre, 1).Select
ActiveSheet.Paste

'Nom du fichier (extrait du chemin complet)
fg = Dir(fichierTraite)

' Fermeture du fichier source
Workbooks(fg).Activate
ActiveWorkbook.Close

' Sauvegarde du dossier XL
Workbooks("SAP2LOXANE.xls").Sheets("SAP").Activate
ActiveWorkbook.Save

' Incrément principal
f = f + 1

Wend

End Sub
Sub ListFile()

' Nettoyage de la zone de liste fichiers
Worksheets("ListeFichiers").Select
Range("A6:B176").Select
Selection.ClearContents
Range("A5").Select

Dim i As Integer
With Application.FileSearch
.NewSearch
.LookIn = Range("b2") & "\"
.SearchSubFolders = True
.Filename = Range("b3").Value
End With

With Application.FileSearch
If .Execute() > 0 Then
'MsgBox .FoundFiles.Count & " Fichier(s) trouvé(s) "
Range("A6").Select
For i = 1 To .FoundFiles.Count
ActiveCell.Value = .FoundFiles(i)
ActiveCell.Offset(1, 0).Range("A1").Select
Next i
Else
' Blocage : pas de fichier trouvé malgré le test initial
MsgBox "Aucun fichier correspondant à ce critère"
End If
Range("A6").Select
End With

End Sub
Sub FileBackToSAP()

' Sauvegarde du fichier Timestampé

Dim FichierPourSAP As String
FichierPourSAP = "LOXANE_FR_" + Trim(Str(Year(Now()))) + Trim(Str(Month(Now())))
FichierPourSAP = FichierPourSAP + Trim(Str(Day(Now())))
FichierPourSAP = FichierPourSAP + "-" + Trim(Str(Hour(Now())))
FichierPourSAP = FichierPourSAP + Trim(Str(Minute(Now())))
FichierPourSAP = FichierPourSAP + Trim(Str(Second(Now()))) + ".csv"

Sheets("LOXANE").Select

Range("A1").Select

ChDir _
"c:\test\toSAP"
ActiveWorkbook.SaveAs Filename:= _
"c:\test\toSAP\" + FichierPourSAP _
, FileFormat:=xlCSV, CreateBackup:=False

ActiveSheet.Select
ActiveSheet.Name = "LOXANE"
Range("H3").Select

Shell "convertit.bat " & FichierPourSAP & " " & Replace(FichierPourSAP, ".csv", "final.csv")

End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 711
29 nov. 2007 à 21:17
bonjour

If test <> 0 Then
LectureResultats (n) inutile car l'appel suivant fait la même chose
' Incrément secondaire pour les résultats
If LectureResultats(n) <> 0 Then
' Gestion de la ligne dans le cas où le résultat Loxane n'est pas bon ( km négatif)
n = n + 1
End If
End If 

Ta ligne soulignée ne sert à rien car tu fais 2 fois la même chose avec l'appel if...

 If Range("E2") > 0 Then
LectureResultats = 1
End If à déplacer 

Selection.Copy
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate
Range("G1").Select
ActiveSheet.Paste


Beep

Worksheets("LOXANE").Cells(i, 1).Value = Left(Worksheets("LOXANE").Cells(1, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 2).Value = Worksheets("LOXANE").Cells(1, 10).Value
Worksheets("LOXANE").Cells(i, 3).Value = Left(Worksheets("LOXANE").Cells(2, 11).Value, 2)
Worksheets("LOXANE").Cells(i, 4).Value = Worksheets("LOXANE").Cells(2, 10).Value
Worksheets("LOXANE").Cells(i, 5).Value = Worksheets("LOXANE").Cells(1, 7).Value

récupérer tes données ici

Beep

' Suppression Donnnées source
Range("G1:K3").Select
Selection.ClearContents

Workbooks("LOXKM").Sheets("LOXKM").Activate
Windows("LOXKM").Activate

' mettre ton "end if" ici
ActiveWorkbook.Close
Workbooks("SAP2LOXANE.xls").Sheets("LOXANE").Activate


End Function 

Si j'ai bien compris ton souci...
@+
0
om51ft Messages postés 22 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 6 février 2008
11 déc. 2007 à 17:40
Comment supprimer une feuille à l'intérieur de la macro :

Cette ligne me renvoit un message d'erreur .

'Suppression de la copie SAP ( ) '
Workbooks("SAP2LOXANE").Sheets("SAP (2)").Delete

Merci de ton retour d'info
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 711
11 déc. 2007 à 23:17
bonjour

Ta feuille est une feuille créée par copie et si tu as une erreur c'est qu'elle doit déjà être supprimée.

Soit il faut mettre des contrôles sur les erreurs et c'est assez complexe car il y a beaucoup de cas.

Soit il est possible de faire une boucle pour parcourir les feuilles et supprimer si elle est présente, c'est plus simple.

For f = 1 to sheets.count
if sheet(f).name = "xxxxxxx" then sheet(f).delete
next f
0