IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Eclater un fichier excel en csv


Sujet :

VBScript

  1. #1
    Invité
    Invité(e)
    Par défaut Eclater un fichier excel en csv
    Bonjour,

    Chaque semaine je reçois un fichier excel avec +/- 10 onglets :

    Ce fichier est à éclater en autant de fichier que d'onglets. (si 10 feuilles alors 10 fichiers à générer).

    A noter on dispose au départ d'un fichier XLS ou XLSX .

    L'éclatement doit générer autant de fichiers CSV que de feuilles dans le fichier de départ.

    Autre contrainte .

    Le code VB doit être indépendant du fichier excel. C'est à dire un script en dehors du fichiers excel. En somme le code VB est à taper sur un bloc note et devra porter l'extension ".vb".

    J'ai mis la main sur un code que j'avais , mais celui ci ne fait pas exactement ce que je veux :

    Code vb : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub CommandButton1_Click()
     
    Dim nom_feuille_classeur As String
    Dim nom_document As String
    Dim trigramme_apv As String
    Dim nouveau_fichier As String
    Dim repertoire_de_sauvegarde As String
    Dim lien_nouveau_fichier As String
     
     
     Dim Ws As Worksheet
     Dim Wb As Workbook
     
    Set Ws = ActiveSheet
    'nom_feuille_classeur = ActiveSheet.Name ' recuperation nom de la feuille dans le classeur de départ
    Set Wb = Workbooks.Add
    trigramme_apv = Range("D6").Value ' recuperation nom de AVP
     
    Ws.Copy before:=Wb.Sheets(1)
     
    repertoire_de_sauvegarde = "M:\" ' nom repertoire ou mettre le nouveau fichier
     
    nouveau_fichier = Format(Date, "yyyymmdd") & " " & Ws.Range("D6") & " APV " & Ws.Name & " adherents .xlsm " ' nom du nouveau document
     
    lien_nouveau_fichier = repertoire_de_sauvegarde & nouveau_fichier ' nouveau document
     
    Wb.SaveAs Filename:=lien_nouveau_fichier ' lien nouveau fichier >> problème avec le ActiveSheet.SaveAs et le Filename:= , c est l erreur 1004
    Wb.Close False
    End Sub

    Merci de m'aiguiller
    Dernière modification par ProgElecT ; 03/12/2014 à 22h58.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Techniquement, quelle est la question, la difficulté rencontrée ?!

    Un code effectue uniquement ce qu'on lui demande et rien d'autre !

    Pour rappel, ici c'est un forum Excel VBA, pas VB ni VBScript ! …

  3. #3
    Invité
    Invité(e)
    Par défaut
    A mince ,

    Pourtant ici je cherche à faire du VB/VBscript

    Le code VB est indépendant du fichier ,

    Si vous pouviez déplacer

    Merci

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, effectivement ce n'était pas le bon forum, à tout hasard un xlsb qui fait cela en pj, à adapter éventuellement à ton contexte.
    Fichiers attachés Fichiers attachés

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Merci de votre proposition mais en faite cela est bien plus compliquer à gérer.

    Je m'explique :

    - 1 fois par semaine un robot me déposé un fichier zip à une adresse donnée http/https donnée. Ce fichier est un zip au départ.
    - une fois le fichier zip téléchargé , on extrait le fichier dedans qui est un fichier xls/xlsx.
    - le code VB que cherche à faire exécuter doit automatique :
    > ouvrir le fichier excel
    > éclater le fichier excel en autant de fichier csv qu'il y a d'onglets

    Par conséquent le clic bouton de l'utilisateur je doit m'en passé , le programme doit s’exécuter de nuit sur un serveur automatiquement.

    En utilisant la solution proposé c'est comme ci que le fichier que je recevait avait du VB inclu , hors non justement. Je dois faire mon code VB à partir d'un VB indépendamment de mon fichier.

    Je vais poster un code e vous me dirais ce que vous en pensez

    Merci d'avance

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir

    Voici un bout de code que j'ai commencé à faire mais je bloque :

    Code vb : 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
    21
    22
    23
    24
    sub eclateur_de_fichier()
     
    dim classeur1 ,  classeur2, classeur3, classeur4, classeur5 as Workbook
    dim feuille1 ,   feuille2 , feuille3 , feuille4 , feuille5 as worksheet
    dim chemin1, chemin2, chemin3 as string
    dim requete1 , requete2 , requete3 as string
     
    chemin1 = "D:\fichier_a_eclater.xls" ' nom du fichier de départ a éclater
     
    chemin2= "D:\rep_test\fichier_de_fin.csv" ' nom du fichier de destination ou ranger les feuilles
     
    Set classeur1 = CreateObject("Workbook") ' création du classeur1 avec un seul onglet
     
    xlApp.SheetsInNewWorkbook = 1 ' on crée un seul onglet
     
    'On créer l objet onglet dans le nouveau classeur créé
     
    Set feuille1 = classeur1.Worksheets(1)
     
    'On affecte un nom aux onglets
     
    feuille1.Name = "DONNEES_TRANSIT"
     
    end sub

    Merci de m'aiguiller
    Dernière modification par ProgElecT ; 03/12/2014 à 23h04.

  7. #7
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    En VBScript on ne type pas les variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim classeur1 ,  classeur2, classeur3, classeur4, classeur5
    dim feuille1 ,   feuille2 , feuille3 , feuille4 , feuille5
    dim chemin1, chemin2, chemin3
    dim requete1 , requete2 , requete3
    Par contre, dans ton 1er post, Private Sub CommandButton1_Click() correspond à du VBA ou VB 6 et antérieur
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonsoir ,

    Voici ce que j'ai retapé en enlevant le typage (ici en commentaire) :

    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
    21
    Sub eclateur_fichier_excel ()
     
    ' ce programme doit eclater un fichier excel en plusieurs via un VBScript exterieur
    ' le fichier xls de depart est zippé et ne peut pas contenir l eclateur VBA
     
    dim feuille1, feuille2 , feuille3 , feuille4 'as worksheet 4 feuilles au depart
    dim classeur1, classeur2 , classeur3 'as workbook  3 classeurs excel au depart
    dim chemin1 , chemin2 , chemin3 'as string  3 chemins pour 3 classeurs excel au depart
     
    chemin1 = "D:\test.xls" ' chemin fichier 1
    chemin2 = "D:\test2.xls" ' chemin fichier 2
    chemin3 = "D:\test3.xls" ' chemin fichier 3
     
    Workbook(array(feuille1,feuille2,feuille3,feuille4))=classeur1 ' contenu classeur 1
    Workbook.copy(array(feuille1))=classeur2 ' copie de la feuille 1 du classeur 1 dans le classeur 2
    Workbook(array(feuille1))=classeur2 ' nouveau contenu de classeur 2
    Workbook.copy(array(feuille2))=classeur3 ' copie de la feuille 2 du classeur 1 dans le classeur 3
    Workbook.copy(array(feuille3))=classeur3 ' copie de la feuille 3 du classeur 1 dans le classeur 3
    Workbook(array(feuille2,feuille3))=classeur3 ' nouveau contenu de classeur 3
     
    end sub
    Je sèche un peut là

    Comment peut marcher ce code si il n'y a pas de typage ?

    Merci de m'aiguiller
    Dernière modification par ProgElecT ; 06/12/2014 à 22h16.

  9. #9
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut
    Comment peut marcher ce code si il n'y a pas de typage ?
    Car le code que tu nous montres n'est pas du langage SQL mais du VBScript interfaçant des objets SQL.
    Pour t'en convaincre, regardes du coté de la FAQ VBScript, le typage des variables sous VBScript

    Ne faudrait il pas commencer par lire Comment piloter Excel pour créer un classeur.xls ?
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir ,

    Voici ce que je viens de testé :

    Code vbs : 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
    21
    22
    Set objXLS = ExistObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_A"
    objXLS.Sheets(1).Cells(A1:AZ12000)
    objXLS.Sheets(2).Cells(A1:AZ12000)
    objXLS.Sheets(3).Cells(A1:AZ12000)
    objXLS.Sheets(4).Cells(A1:AZ12000)
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_B"
    objXLS.Workbooks.Add
    objXLS.Sheets(1).Cells(A1:AZ12000)
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_C"
    objXLS.Workbooks.Add
    objXLS.Sheets(2).Cells(A1:AZ12000)
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_D"
    objXLS.Workbooks.Add
    objXLS.Sheets(3).Cells(A1:AZ12000)
    objXLS.Sheets(4).Cells(A1:AZ12000)

    Problème ceci ne fonctionne qu'à moitier . J'ai une erreur à la ligne 26 . Pourquoi 26 sachant qu'il y a moins de ligne que 20 !?

    Merci de m'aiguiller

  11. #11
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Set objXLS = ExistObject("Excel.Application") ExistObject ????? d'où tu sors se code ?????

    Il faut être précis quand on indique une information pour être aidé.
    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Nom : InfosPourDVP.jpg
Affichages : 336
Taille : 175,4 Ko
    ---------------------------------------------------------------------------------------------------------------------------------------------------


    Je n'y connais rien en manipulation de Excel.Application par contre les "manquent assurément
    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
    21
    22
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_A"
    objXLS.Sheets(1).Cells("A1:AZ12000")
    objXLS.Sheets(2).Cells("A1:AZ12000")
    objXLS.Sheets(3).Cells("A1:AZ12000")
    objXLS.Sheets(4).Cells("A1:AZ12000")
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_B"
    objXLS.Workbooks.Add
    objXLS.Sheets(1).Cells("A1:AZ12000")
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_C"
    objXLS.Workbooks.Add
    objXLS.Sheets(2).Cells("A1:AZ12000")
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_D"
    objXLS.Workbooks.Add
    objXLS.Sheets(3).Cells("A1:AZ12000")
    objXLS.Sheets(4).Cells("A1:AZ12000")
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Après quelques recherches j'ai fait chou blanc .

    Code vbs : 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
    21
    22
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_A"
    objXLS.Sheets(1).Cells("A1:AZ12000")
    objXLS.Sheets(2).Cells("A1:AZ12000")
    objXLS.Sheets(3).Cells("A1:AZ12000")
    objXLS.Sheets(4).Cells("A1:AZ12000")
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_B"
    objXLS.Workbooks.Add
    objXLS.Sheets(1).Cells("A1:AZ12000")
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_C"
    objXLS.Workbooks.Add
    objXLS.Sheets(2).Cells("A1:AZ12000")
     
    Set objXLS = CREATEObject("Excel.Application")
    objXLS.Workbooks = "C:\mondossier\Fichier_D"
    objXLS.Workbooks.Add
    objXLS.Sheets(3).Cells("A1:AZ12000")
    objXLS.Sheets(4).Cells("A1:AZ12000")

    Une idée pour faire évoluer ce code ?

    Merci de m'aiguiller

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonsoir ,

    Je permet de relancer ce topic.

    Le besoin final ici est qu'une taches automatique VBS tourne est m'éclate un fichier Excel en d'autres fichiers Excel et CSV.

    Merci de m'aiguiller pour solution la chose

Discussions similaires

  1. Comment exporter un fichier Excel vers CSV
    Par machipot dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/06/2008, 22h09
  2. Réponses: 1
    Dernier message: 30/12/2007, 14h51
  3. Convertion fichier excel en CSV
    Par ceaser dans le forum Excel
    Réponses: 1
    Dernier message: 23/05/2007, 14h56
  4. Exporter fichier Excel en .csv
    Par pierre.coudert dans le forum Windows
    Réponses: 7
    Dernier message: 27/02/2007, 13h45
  5. conversion de fichier Excel en csv ,
    Par bounette dans le forum Excel
    Réponses: 2
    Dernier message: 26/01/2005, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo