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

Macros et VBA Excel Discussion :

Macros VBA en Visual Basic


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 65
    Par défaut Macros VBA en Visual Basic
    Bonjour,

    J'ai besoin de traiter des documents excel dont je connais la structure, J'ai compris comment faire des macros simples sous VBA, et j'aimerai pouvoir les "exporter' en visual basic.

    J'ai créé une interface avec une base de données MS Access en VB, et j'aimerai faire un lien avec des fichiers Excel.
    J'ai regardé sur internet, seulement je trouve uniquement du code VBA, qui n'est pas compatible avec VB, et je n'arrive pas à reproduire les même actions, sur le site de Microsoft les infos ne sont pas claires, et pas suffisantes.

    Connaîtriez vous un moyen soit de traiter cette feuille Excel directement en VB soit d'appeler des macros VBA à partir d'un code VB (j'imagine que c'est possible, mais la première solution m'arrangerait beaucoup plus).

    Cordialement

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    mais la première solution m'arrangerait beaucoup plus
    vue que VBA est du Visual Basic Application , en d'autre terme du VB appliqué à Excel, veux tu bien expliciter ta pensée!

    et accessoirement nous montrer ce que tu as déjà fait! un fichier joint ne serait pas la bonne solution mais le code qui lui sera lu sens problème!

    attention ne confonds pas VB et VB.net!
    Dernière modification par Invité ; 09/05/2017 à 11h50.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 65
    Par défaut
    Bonjour,

    Je vais essayer de m'expliquer clairement :

    J'ai besoin de manipuler des fichiers Excel dans une application que je développe en Visual Basic.
    Si je crée une macro sur mon fichier Excel, j'obtiens un code VBA.

    Je ne peux cependant pas utiliser ce code directement dans mon application, je me retrouve sinon avec des erreurs.

    Je m'interroge donc sur la façon de mettre cela en place.

    Puis-je d'une manière ou d'une autre obtenir l'équivalent des Sub crées avec l'éditeur de Macro, en VB ?

    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Visual Basic.
    quel version VB6; Vb 2008!
    vba et vb6 c'est la même chose hormis qu'il faut faire référence Excel!

    VB.net (2005...2017) il faut utiliser Excel interop dans les références du projet mais dans ce cas tu n'es pas sur le bon forum!

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Parles-tu de VB6 ou de VB.NET?

    En VB (VB6 ou VB.NET), tu vas devoir instancier un objet Excel.Application après référencé ta librairie Excel. A partir de là, tu pourras travailler sur tes objets Excel (feuilles, cellules, ...).

    De VBA à VB6, la transposition sera "relativement" aisée, mais tu devras de toute façon retravailler le code.

    De VBA à VB.NET, c'est sera moins aisé, mais réalisable sans trop de douleurs quand même...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Invité
    Invité(e)
    Par défaut
    VB6:

    Nom : Sans titre.png
Affichages : 340
Taille : 36,0 Ko

    VB.net:

    Nom : Sans titre.png
Affichages : 337
Taille : 30,8 Ko

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 65
    Par défaut
    Bonjour,

    Je suis avec Visual Studio 2013 et j'ai en effet utilisé Microsoft.Office.Interop.Excel
    La connexion, fermeture se passe correctement, du moins je n'ai pas de message d'erreur.

    Voici mes fonctions :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    Imports Excel = Microsoft.Office.Interop.Excel
     
    Public Class ExcelManager
     
     
        Public Const ID_USER As String = "A"
     
        Shared appExcel As Excel.Application
        Shared wbExcel As Excel.Workbook
        Shared wsExcel As Excel.Worksheet
     
        ...
     
        ' Fonction pour ouvrir un fichier dont le chemin d'acces est passé en paramètre
        Public Shared Sub openFile(ByVal fileName As String)
            Try
                appExcel = CreateObject("Excel.Application")
                wbExcel = appExcel.Workbooks.Open(fileName)
                wsExcel = wbExcel.Worksheets(1)
     
            Catch ex As Exception
                Console.WriteLine("EXCEL OPEN : " & ex.Message)
            End Try
        End Sub
     
     
        'Fonction qui permet de fermer l'application 
        Public Shared Sub closeFile()
            Try
     
                wbExcel.Close()
                appExcel.Quit()
     
                wsExcel = Nothing
                wbExcel = Nothing
                appExcel = Nothing
            Catch ex As Exception
                Console.WriteLine("EXCEL CLOSE : " & ex.Message)
            End Try
        End Sub
     
        ' la fonction qui ne fonctionne pas (cela me génère une erreur)
        ' J'ai suivi plusieurs exemples sur internet, mais aucun n'a été probant
        Public Shared Sub changeCell(ByVal column As String, ByVal data As String)
            Try
                Console.WriteLine(wsExcel.UsedRange.Value)
                Try
                    Console.WriteLine("Valeur : |" & appExcel.Worksheets("H-LM Airbus - 2016 - V1").range("A5").value & "|")
                    '  Console.WriteLine(wsExcel.Cells(column, LINE_1).Value)
                Catch ex As Exception
                    Console.WriteLine("worksheet.range.value : " & ex.Message)
                End Try
            Catch ex As Exception
                MessageBox.Show("UsedRange.Value : " & ex.Message)
            End Try
     
     
        End Sub
     
        'Voici ce que je pourrai copier de Excel :
        Sub Macro2()
            '
            ' Macro2 Macro
            '
     
            '
            Range("A25").Select()
            ActiveCell.FormulaR1C1 = "Employee"
        End Sub
    J'ai ensuite une classe principale dans laquelle j'appelle mes fonctions :

    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
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            ...
            Dim filePath as string = ...
     
            Try
     
                ExcelManager.openFile(filePath)
                ExcelManager.changeCell(Excel.ID_USER, "2065532")
     
                ExcelManager.closeFile()
     
            Catch ex As Exception
                MessageBox.Show("Main : " & ex.Message)
            End Try
        End Sub
    @dysorthographie J'ai effectué l'ajout comme tu dis oui, je peux donc faire l'importation correctement

    Merci de vos conseils !

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    appExcel.Worksheets("H-LM Airbus - 2016 - V1").range("A5").value & "|")
    Me semble bizarre...

    Ne serait-ce pas plutôt
    wbExcel.Worksheets("H-LM Airbus - 2016 - V1").range("A5").value & "|")
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 65
    Par défaut
    N'ayant que très peu de connaissances la dedans j'ai essayé les deux, mais aucun ne semble me renvoyer la valeur contenue dans cette case.

    Cordialement

  10. #10
    Invité
    Invité(e)
    Par défaut
    je ne vois pas la méthode dispose! tu vas charger ta mémoire. vérifies dans tes procès mais ton objet Excel devrait rester en mémoire!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     wbExcel.Close()
                appExcel.Quit()
                appExcel.Dispose() 
                wsExcel = Nothing
                wbExcel = Nothing
                 appExcel = Nothing
    appExcel = CreateObject("Excel.Application") ici tiu écris du vba ce nest pas du VB.net!

    si tu décoche la librairie Visual Basic ton programme va t'explosé au visage!

    Nom : Sans titre.png
Affichages : 288
Taille : 4,2 Ko

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 65
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    je ne vois pas la méthode dispose! tu vas charger ta mémoire. vérifies dans tes procès mais ton objet Excel devrait rester en mémoire!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     wbExcel.Close()
                appExcel.Quit()
                appExcel.Dispose() 
                wsExcel = Nothing
                wbExcel = Nothing
                 appExcel = Nothing

    En effet avec le dispose, le retour à l'air d'être correct, j'arrive bel et bien à lire dans le fichier Excel, et cela en passant par appExcel ou bien wbExcel.

    Merci !

    Je reviens vers vous si d'autres problèmes se soulèvent, mais à priori cela à l'air de fonctionner.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    En fait, appExcel.Worksheets(....) renvoie la collection des feuilles du classeur courant. wbExcel.Worksheets(...) spécifie explicitement le classeur dont tu gères la collection des feuilles.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Invité
    Invité(e)
    Par défaut
    remplace ton creatobject par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      appExcel = new  Excel.Application
    les instruction comme trim(txt) n'existe pas en Vb.net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim txt as string="      toto    "
    dim Toto as string = txt.trim() 'ça c'est du VB.net!

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 65
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    remplace ton creatobject par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      appExcel = new  Excel.Application
    Cela fonctionne !

    Est-ce grave d'utiliser du code VBA ? Cela pourrait ne pas marcher en fonction du terminal sur lequel je l'exécute par exemple ?


    Citation Envoyé par dysorthographie Voir le message
    les instruction comme trim(txt) n'existe pas en Vb.net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim txt as string="      toto    "
    dim Toto as string = txt.trim() 'ça c'est du VB.net!
    Je comprends, c'est plutôt du orienté objet c'est cela ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    si on utilise du VB.net c'est parce que c'est plus perforent que vba!

    Je ne te demande pas d'être puriste mais apprendre un langage correctement dès le début t’éviteras de te faire jeter si d’aventure je devais interviewer pour un éventuel recrutement!

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 65
    Par défaut
    Bien sûr, je comprends.

    Tant qu'à faire, autant bien s'y prendre.

    Merci pour ces explications

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

Discussions similaires

  1. [Toutes versions] Macro VBA avec le (vieux) éditeur intégré ou Add-In avec Visual Studio Pro?
    Par shkyo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/07/2015, 17h07
  2. Réponses: 2
    Dernier message: 19/03/2008, 10h30
  3. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51
  4. Macro VBA sur Access
    Par beurnoir dans le forum Access
    Réponses: 3
    Dernier message: 12/10/2005, 16h46
  5. [SQL][MACRO VBA]Pb de syntaxe
    Par Stef.proxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2004, 09h11

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