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 :

VBA, ou autre ?


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Février 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : salarié
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut VBA, ou autre ?
    Bonjour,

    Après de longues années d'absence, je me suis remis à "programmer" du VBA pour créer un UI lié à des feuilles Excel.
    Tout fonctionne bien, j'ai une quinzaine d'UF, quelques dizaines de Feuil et beaucoup d'interactions entre lecture / écriture / Module de tout ca.

    J'aime beaucoup cette façon car il est pour moi extrêmement facile de créer un tableau dans Excel et tout un tas de formules complexes puis d'interagir avec les UF. C'est pour cela que j'utilise VBA.

    Je commence par contre à trouver des limitations dans l'utilisation des outils.

    J'ai donc créer le projet en PHP et MySql, que je connais bien mais c'est trop lourd en maintenance pour l'utilisation désiré.
    J'ai essayé également du C#. Que ce soit en WinForm ou WPF. Je connais bien le C# également.
    Par contre, je n'arrive pas à trouver une méthode ou un langage permettant l'utilisation aussi facile du même style qu'une Feuil Excel.

    Voici donc ma question.

    Connaissez vous un langage ou une solution en C# ou autre, aussi facile que l'utilisation d'un Workbook Excel ? Notamment en mise en page.

    En gros, toutes mes données et formules sont dans des Feuil puis j'ai un UI qui lis et écris dans des cellules.
    En PHP, tous les calculs se font en code. Ce qui donne une lourdeur dans la maintenance quand il faut changer un calcul stocké en variable. Et de plus, pour imprimer un tableau, il faut créer toutes les lignes et colonnes. Alors qu'avec mes UF, je créer le tableau final dans une Feuil, j'intègre mes données puis un bouton Print. C'est bien plus simple de créer le visu en direct.
    Finalement, l'utilisateur ne voit jamais les Feuil.

    Merci à vous.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Salut,

    si tu es ouvert aux autres langages, tu disposes également du Python, du VB.net.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 987
    Points
    2 987
    Par défaut
    Bonjour

    Je n'ai pas compris les soucis qui t'amène à migrer vers autre chose mais, pour info, tu jExcel (https://github.com/jspreadsheet/ce) qui me semble hyper prometteur càd très riche en fonctionnalités et ayant une interface assez similaire à Excel mais en version Web.

    Ici, bien sûr, pas de VBA mais du PHP et du JS.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    sinon avec libreOffice calc (l'équivalent d'excel) on peut utiliser des macros écrites en python.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Février 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : salarié
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous.

    Merci pour vos réponses.

    Pour expliquer plus clairement et synthétiser au plus simple, j'ai aujourd'hui une feuille Excel avec un beau et grand tableau remplis de valeurs et de formule.
    J'ai juste voulu créer des UF pour rendre la saisie plus attractive. Ca ca fonctionne.

    C'est facile et quand on as fini, on imprime la Feuille avec une certaine mise en page.

    Par contre, Excel gère mal le fait que plusieurs personnes ouvre le même classeur en même temps. Même si il est impossible dans mon cas d'avoir de conflits.
    J'ai donc pensé à la Bdd, qu'elle soit distant ou interne, mais le problème c'est pour l'impression, il faut tout créer soit en absolu soit en relatif et c'est long pour le peu d'intérêt qu'à mon projet.

    C'est pour cela que j'adore Excel. On créer la feuille en visuel, des UF si on veut, puis on imprime la feuille.

    Je cherche donc, un langage ou une autre méthode qui permettrait cela aussi efficacement.
    Gérer les Bdd avec les formules dans le code, ca ca va. Mais créer le print nickel et rapidement sans TOUT coder....


    . Python ou VB.net pourquoi pas. Il existe une methode graphique ?

    . jExcel, j'utilise ce programme sur les pc du travail. Je ne suis pas persuadé d'une machine Java installé.

    .LibreOffice Basic, Il n'est pas installé sur nos machine. Si le programme, comme Excel demande l'instance de l'appli cela ne sera pas possible.


    En espérant avoir été plus clair.

    Merci

  6. #6
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Février 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : salarié
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Je viens de regarder qqch sur du Vb.Net et effectivement ça ressemble à ce que je cherche.

    Une Bdd donc accessible en multiutilisateur.
    Une création via interface graphique (winForm ou WPF). Je pourrais donc y préparer ma feuille a imprimer.

    Ca m'a l'air pas trop mal. Qu'en pensez vous par rapport a mes attentes ?
    Le seul inconvénient va être de stocker, en variable, des valeurs numéraire et conditions (radio bouton) ainsi que des formules qui gèrent tout cela. Ce que je faisais en masqué sur une feuille excel puis je retournais simplement le résultat des formules.
    Elle est la la facilité d'utiliser le VBA.

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Citation Envoyé par Champignon.Fr Voir le message
    .LibreOffice Basic, Il n'est pas installé sur nos machine. Si le programme, comme Excel demande l'instance de l'appli cela ne sera pas possible.
    Attention ce n'est pas LibreOffice Basic qui est utilisé pour faire des macros en python, il faut utiliser l'extension APSO qui facilite la chose. On peut installer LibreOffice en version portable n'importe où l'on a le droit d'écrire.


    Citation Envoyé par Champignon.Fr Voir le message
    Je viens de regarder qqch sur du Vb.Net et effectivement ça ressemble à ce que je cherche.
    Une Bdd donc accessible en multiutilisateur.
    Cela m'étonne car il me semble que Vb.net (comme C# d'ailleurs) n'a pas une base de données propre. Il faut se connecter à des bases de données via des drivers comme par exemple des drivers ODBC. Et dans ce cas VBA sait aussi le faire. Avec un driver ODBC on peut se connecter à SQL server, MySQL, Sqlite3, PostgreSql etc...
    Dans excel avec powerQuery on peut afficher directement le contenu d'une table de base de données externes en se connectant à celle-ci par un driver ODBC.
    Voici un exemple de connexion à une base Sqlite3 (champignons mortels) en utilisant odbc :

    Nom : ExcelPowerQueryODBC.PNG
Affichages : 269
Taille : 63,3 Ko

    et pour utiliser une connexion ODBC dans VBA on utilise AdoDB :

    Nom : ExcelVBA_AdoDb.PNG
Affichages : 262
Taille : 10,6 Ko

    Avec ce code VBA :
    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
    Option Explicit  
      Dim oConn As ADODB.Connection
      Dim oRec As ADODB.Recordset
     
     
    Private Sub cmdOpen_Click()
      Dim sConn As String
      sConn = "Driver=SQLite3 ODBC Driver; Database=D:\temp\champignons.db3"
      Set oConn = New ADODB.Connection
      Set oRec = New ADODB.Recordset
      oConn.ConnectionString = sConn
      oConn.Open
      Call oRec.Open("SELECT * FROM DeadlyMushrooms", oConn, adOpenDynamic, adLockOptimistic)
      oRec.MoveFirst
      ReadDb
    End Sub
    Private Sub ReadDb()
        Do While Not (oRec.EOF)
            Debug.Print "ID: " & oRec.Fields("ID").Value & " Scientific_Name: " & _
            oRec.Fields("Scientific_Name").Value & " Common_Name: " & oRec.Fields("Common_Name").Value & _
            " Notes: " & oRec.Fields("Notes").Value
            oRec.MoveNext
        Loop
    End Sub
     
     
    Private Sub cmdClose_Click()
      oRec.Close
      oConn.Close
      Set oRec = Nothing
      Set oConn = Nothing
    End Sub
    Voici ce que j'obtiens :

    Nom : ExcelVBA_ODBC.PNG
Affichages : 273
Taille : 26,7 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Février 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : salarié
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Attention ce n'est pas LibreOffice Basic qui est utilisé pour faire des macros en python, il faut utiliser l'extension APSO qui facilite la chose. On peut installer LibreOffice en version portable n'importe où l'on a le droit d'écrire.
    Oui mais justement, cela sera compliqué de le faire déployer. Moi je n'ai pas les droits.


    Cela m'étonne car il me semble que Vb.net (comme C# d'ailleurs) n'a pas une base de données propre. Il faut se connecter à des bases de données via des drivers comme par exemple des drivers ODBC. Et dans ce cas VBA sait aussi le faire. Avec un driver ODBC on peut se connecter à SQL server, MySQL, Sqlite3, PostgreSql etc...
    Oui mais j'ai vu qu'il y'a la possibilité d'utiliser de l'UF.
    La bdd externe ne me dérange pas.

    Concrètement, ma limitation d'Excel et VBA c'est la modification temps réel par plusieurs instances même sans conflit. Puisqu'à chaque ouverture, je cache le WB puis j'ai un Login qui après la validation, créer une nouvelle feuille. donc pas de conflit mais un besoin de lecture écriture dans le WB simultanée multiutilisateurs.

    Et ma deuxième seule limitation, le peu d'utilité fait que je ne veux pas passer des heures, des jours, à concevoir une mise en page imprimable en code CSS ou autre avec tout les padding, margin, div, pad...


    Je recherche en fait qqch pour : Lire une bdd, un UI pour entree des donnes, Une commande enregistrer / imprimer sans avoir à coder de mise en forme et que ce soit multi user.

    en gros, comme un CMS pour un site web. Je maitrise, mais pour l'utilisation que j'ai besoin, beaucoup de plugin et addon sont payant.

    Mais peut être que ça n'existe pas...

  9. #9
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Février 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : salarié
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Je viens de penser mais sur mon appli, à chaque Login je creer une feuille User_date_Nom (qui en fait est une copie conforme d'une trame existante, donc sans risques de conflits) ensuite, on lis sur une feuille commune, donc que lecture on y récupère des données, puis on en injecte des nouvelles sur la précédente feuille créée via des Textbox et des calcul entre feuille commune et données utilisateurs.

    Ne serait-ce pas possible d'avoir un icone sur le bureau par exemple qui quand on clic dessus, crée immédiatement un nouveau Classeur Excel mais avec tout un modèle (trame) et les UF de l'application ?
    => Du coup tout serais résolu...

    Il n'y-a pas une histoire de .bat ou quelques chose comme cela ??

  10. #10
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Février 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : salarié
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Champignon.Fr Voir le message
    Je viens de penser mais sur mon appli, à chaque Login je creer une feuille User_date_Nom (qui en fait est une copie conforme d'une trame existante, donc sans risques de conflits) ensuite, on lis sur une feuille commune, donc que lecture on y récupère des données, puis on en injecte des nouvelles sur la précédente feuille créée via des Textbox et des calcul entre feuille commune et données utilisateurs.

    Ne serait-ce pas possible d'avoir un icone sur le bureau par exemple qui quand on clic dessus, crée immédiatement un nouveau Classeur Excel mais avec tout un modèle (trame) et les UF de l'application ?
    => Du coup tout serais résolu...

    Il n'y-a pas une histoire de .bat ou quelques chose comme cela ??


    AH merde peut être qqch comme ca en fait http://docs.microsoft.com/fr-fr/offi...worksheet.copy

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/11/2012, 19h29
  2. Réponses: 0
    Dernier message: 05/11/2012, 19h48
  3. [AC-2007] Supprimer doublons de ma table en VBA ou autre ?
    Par Debutant10 dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 18/09/2011, 21h14
  4. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47

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