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

VB.NET Discussion :

[VB 2008 Express] Automatisation d'une Maccro dans Excel.


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut [VB 2008 Express] Automatisation d'une Maccro dans Excel.
    Bonjour à tous !!!

    Situation....
    Voilà j'ai ce petit bout de code en VBA (Excel) qui permet de sauvegarder les feuillets qui sont dans 1 excel par autant de fichier CSV.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Application.displayAlerts = False
            Dim LaFeuille As worksheet, Chemin As String
            Chemin = "C:\FichierCSV\"
            For Each LaFeuille In ActiveWorkbook.worksheets
                LaFeuille.select()
                activeWorkbook.saveas(Filename:=Chemin & Activesheet.name & ".csv", _
                FileFormat:=xlCSV, CreateBackup:=False)
            Next
            Application.displayAlerts = True
    Ce VBA est à la base dans une Maccro (un bouton). Il marche très bien et genere correctement les fichiers CSV.


    Ce que je souhaite faire....
    On souhaite automatiser cette action. C'est a dire éviter que l'utilisateur ouvre le fichier excel, crée un bouton, link le VBA, et éxécute le bouton.
    En gros l'algo serait:
    -Ouverture du Programme.
    -Link du programme avec Excel.
    -Ouverture du fichier Excel.
    -Execution de la partie Script ExlToCsv (le code ci-dessus).
    -Fermeture du fichier Excel.
    -Fermeture du programme.


    L'utilisation finale....
    Une fois le fichier Excel récupéré, je cliquerais sur l'exe qui exécutera le script pour créer les fichiers CSV. (L'exe et le Excel seront dans le même répertoire).
    Le nom du fichier excel ne changera jamais.

    Donc je pensais me tourner vers VB 2008 Exp, faire un projet console.
    Est ce possible? Si oui pouvez vous m'y aider?

    Cordialement,
    Nissartis.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Bon pour l'instant en cherchant un peu partout je me retrouve avec ce code :
    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
    23
    24
    25
    26
    27
    Module Module1
     
        Sub Main()
     
            Dim appExcel As Microsoft.Office.Interop.Excel.Application 'Variable Application Excel
            Dim wbExcel As Microsoft.Office.Interop.Excel.Workbook 'Variable Classeur Excel
            Dim wsExcel As Microsoft.Office.Interop.Excel.Worksheet 'Variable Feuille Excel
     
     
            appExcel.displayAlerts = False  'On désactive les alertes
            appExcel = CreateObject("Excel.Application")    'Ouverture de l'appli
            wbExcel = appExcel.Workbooks.Open("C:\irrdbu.xls")    'Ouverture du fichier Excel
            wsExcel = wbExcel.Worksheets(1) 'Selection de la premiere feuille
            wsExcel.visible = True  'On affiche la feuille
            appExcel.Visible = True 'On affiche Excel
     
            Dim LaFeuille As wbExcel.worksheet, Chemin As String
            Chemin = "C:\FichierCSV\"   'Chemin où seront les CSV
            For Each LaFeuille In wbExcel.ActiveWorkbook.worksheets
                LaFeuille.select()
                activeWorkbook.saveas(Filename:=Chemin & Activesheet.name & ".csv", _
                FileFormat:=xlCSV, CreateBackup:=False)
            Next
     
        End Sub
     
    End Module
    Petit soucis n'éyant pas Office 2k3 sur mon poste, je n'ai pas Microsoft.Office.Interop.Excel.dll
    donc si quelqu'un pourrait me dire si ça compile ou si ça semble correct ?

    Cordialement,
    Nissartis.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Bonjour.

    Quelqu'un pourrait m'expliquer pourquoi je n'arrive pas a trouver cette .DLL ?!
    Je suis sur un poste avec Office 2k3 et rien n'y fais. J'ai beau faire:
    Projet >> Ajouter une référence >> .NET ou COM >> je me retrouve toujours avec mes variables soulignées en Bleu disant qu'elle en sont pas défini.
    (Microsoft.Office.Interop)

    Une solution ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Solution trouvé

    Il faut re-executer l'install d'office, et dans l'instal personnalisé il faut mettre sous excel -> Prise en charge de .NET

    Bon je continue à faire mon programme

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Bravo, bel exemple de persévérance dans tes recherches

    N'oublie pas le tag

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Oulaaaa attend ^^
    J'ai juste résolu le petit soucis de compilation

    Le Programme est presque finis mais j'ai un soucis sur une seule ligne ... la sauvegarde du fichier ...

    Donc pour résumé:
    Ouvrir le fichier Excel = OK
    Séléctionner les feuillets un par un = OK
    Sauvegarde du feuillet selectionner en CSV avec le nom du Feuillet = ECHEC.

    Je vais vous mettre une copie de mon code si vous pouvez m'aider ça serait bien ^^

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Alors le code qui me pose soucis est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Try
                For i = 1 To 26
                    wsExcel = wbExcel.Worksheets(i)
                    wsExcel.Select()
                    Console.WriteLine("Traitement du feuillet: " & wsExcel.Name())
                    tempo(1000)
                    'wsExcel.SaveAs(Filename:=Chemin & wsExcel.Name() & ".csv", FileFormat:=xlCSV, CreateBackup:=False)
                    'appExcel.ActiveWorkbook.SaveAs(Filename:=Chemin & wsExcel.Name() & ".csv", FileFormat:=xlCSV, CreateBackup:=False)
                Next i
            Catch
                Console.WriteLine("Impossible de generer les CSV.")
            End Try
    Donc je m'explique:
    -Je les selectionne 1 par 1 mes feuillets (ça c'est OK)
    -j'écris le nom du feuillet actif (ça c'est OK)
    -Petite Tempo de 1s (OK)
    -Enregistrer le feuillet actif en CSV avec le NomDuFeuillet.CSV (ECHEC)

    Le soucis c'est que j'arrive pas a trouver la bonne combinaison pour l'enregistrer, en sachant que xlCSV est une Variable non défini ....

    Quelqu'un a une solution ?

    Edit1:
    -Ouverture du Programme. OK
    -Link du programme avec Excel.OK
    -Ouverture du fichier Excel.OK
    -Selectionner 1 par 1 les feuillets OK
    -Enregistrer chaque feuillet en CSV avec le Nom du Feuillet ECHEC
    -Fermeture du fichier Excel.OK
    -Fermeture du programme.OK

    Edit2:
    En gros c'est le code suivant qui en VBA, que je dois mettre en VB qui me pose problême
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     activeWorkbook.saveas(Filename:=Chemin & Activesheet.name & ".csv", _
                FileFormat:=xlCSV, CreateBackup:=False)

  8. #8
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Effectivement, si tu mets du code VBA, n'espère pas qu'il soit exécuté en VB.NET

    Ton SaveAs() devrait ressembler plutot à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim missing As Object = System.Reflection.Missing.Value
    appExcel.ActiveWorkbook.SaveAs(Chemin & wsExcel.Name() & ".csv", XlFileFormat.xlCSV, missing, missing, missing, False, XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    alooooorsss
    J'ai testé ce que tu m'as donné, le seul endroit ou ça bloque c'est au niveau du Filename.

    si je le met en dur : "C:\ .....", ça marche très bien MAIS si je rajoute un quelconque---> & wsExcel.Name(), là il veut pas

    La concatenation des chaines s'affiche correctement, mais son utilisation dans Save As ne marche pas :s

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Apres de multiple test, la conclusion est la suivante: Mon SaveAs ne prend QUE les Filename en Dur o_O

    Euh je penses que c'est pas possible là quand même ?! Il doit bien avoir une solution :p

    En gros si je met ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim ChemEtCsv As String
    ChemEtCsv = "C:\FichierCSV\" & wsExcel.Name() & ".csv"
    appExcel.ActiveWorkbook.SaveAs(ChemEtCsv, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV, missing, missing, missing, False, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing)
    Il me sort de mon try en Erreur.

    Mais si je met le meme code avec le Filename en Brut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim ChemEtCsv As String
    appExcel.ActiveWorkbook.SaveAs("C:\FichierCSV\test.csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV, missing, missing, missing, False, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing)
    La tous mes 26 feuillets s'écrasent l'un apres l'autre

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Je le dis mais j'en ai honte ...
    Normal que ça marche pas: VB ne crée pas le dossier FichierCSV...

    Une fois le dossier crée ça marche niquel !!!
    Voilouuu un programme tout beau et tout finis !!!

    Par contre Skalp j'ai trouvé une façon peu etre plus simple d'enregistrer, dis moi ce que tu en penses : (Source MDSN pour le 24)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsExcel.SaveAs(Filename:=("C:\FichierCSV\" & wsExcel.Name() & ".csv"), FileFormat:=24, CreateBackup:=False)
    Je proposerai un Tuto pour l'installation de A a Z pour l'utilisation de VB avec Excel, je penses que ça peut être utiles pour les futurs débutants comme moi ^^

  12. #12
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par Nissartis Voir le message
    Je le dis mais j'en ai honte ...
    Normal que ça marche pas: VB ne crée pas le dossier FichierCSV...



    Citation Envoyé par Nissartis Voir le message
    Par contre Skalp j'ai trouvé une façon peu etre plus simple d'enregistrer, dis moi ce que tu en penses : (Source MDSN pour le 24)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsExcel.SaveAs(Filename:=("C:\FichierCSV\" & wsExcel.Name() & ".csv"), FileFormat:=24, CreateBackup:=False)
    Effectivement, c'est plus simple Mais ça doit passer en VB seulement, je ne pense pas que ça compile en C# ou autre.


    Citation Envoyé par Nissartis Voir le message
    Je proposerai un Tuto pour l'installation de A a Z pour l'utilisation de VB avec Excel, je penses que ça peut être utiles pour les futurs débutants comme moi ^^
    Developpez.com propose déjà de multiples ressources à ce propos ! Mais toute contribution est la bienvenue !
    Tu t'es aidé de la msdn seulement ?

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Pour trouver le 24, oui avec MSDN.

    Sinon pour faire mon programme en entier (Vu que c'était la premiere fois que je "touchais" du VB) J'ai pris sur plusieur source (Anglais comme Français) dont des Sources de sur Developpez.com bien entendu.

    (Désolé du retard de la réponse, mais je boss que du lundi au Vendredi )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/05/2009, 13h33
  2. Réponses: 10
    Dernier message: 05/02/2009, 13h22
  3. expression pour filtrer une table dans ma dataset
    Par beet2che dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/09/2008, 22h18
  4. [VB 2008 Express] Impression d'une facture
    Par Cyborg289 dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/02/2008, 13h28
  5. Réponses: 4
    Dernier message: 11/08/2006, 13h47

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