Macro Excel avec exécution d'un .bat - Page 2

Précédent
  • 1
  • 2
  1. om51ft Messages postés 22 Statut Membre
     
    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
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  3. om51ft Messages postés 22 Statut Membre
     
    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
  4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
Précédent
  • 1
  • 2