Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 20h09   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Réutilisation possible d'un code VBA pour une application VB ?

Bonjour à tous,

Je ne connais pas très bien le VB : je suis avocat...

Je vous explique le contexte global de ma demande d'infos.

J'utilise un logiciel professionnel qui s'appelle CICERON, qui a été compilé avec PowerBuilder et qui, via ODBC, gère une base de données SQL hébergée sur notre serveur.

Dans ce logiciel, chaque dossier est accessible grâce à l'interface graphique, avec une partie "Documents" qui liste les documents du dossier (.doc, .pdf, etc.).

Ce logiciel professionnel est génial, mais il lui manque une fonction primordiale : pouvoir enregistrer *simplement* (le mot est important) dans cette liste de documents des documents stockés ailleurs que sur le serveur (sur les ordinateurs de chaque avocat du cabinet).

La procédure d'enregistrement existe bien, mais elle suppose de faire les opérations suivantes :
- vous avez un fichier .pdf sur votre ordinateur (envoyé par un client par mail par ex.)
- vous trouvez le numéro du dossier auquel le rattacher
- vous ouvrez CICERON
- vous tapez le numéro du dossier dans la fenêtre de recherche et ouvrez le dossier
- vous accédez à la liste des documents
- vous cliquez sur nouveau
- une fenêtre d'explorateur apparaît : elle explore en priorité le serveur, ce qui est logique
- vous coupez/collez le document .pdf d'origine dans le dossier correspondant sur le serveur,
- ce document apparaît et vous pouvez cliquer sur enregistrer pour l'intégrer à la liste de documents du dossier.

Je cherche donc à concevoir un moyen d'intégrer plus rapidement ces documents à la base de données.

Les créateurs de CICERON ont conçu une macro qui permet de faire toutes ces opérations en un seul clic pour les documents Word, Excel et les mails quand Word est l'éditeur du message.

Cette macro est écrite en VBA et la voici :

Code :
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
Public Sub EnregistrerSousCICERONW()
    Dim dossier As String
    Dim numDossier As Long
 
    dossier = get_user_property("COLDossier")
    DossierCiceron.rb_document.Caption = "Dossier du document (" + dossier + ")"
    If Trim(dossier) <> "" Then
        DossierCiceron.rb_document.Value = True
    Else
        DossierCiceron.rb_actif.Value = True
    End If
 
    DossierCiceron.Show
 
    If DossierCiceron.rb_document.Value = True Then
        'dossier = dossier
    ElseIf DossierCiceron.rb_actif.Value = True Then
        dossier = "0"
    Else
        'dossier = DossierCiceron.sle_dossier.Text
        'on ouvre la recherche multi critére
        numDossier = cherche_dossier(numDossier)
        dossier = CStr(numDossier)
 
    End If
 
    Enregistrer "sous", dossier
End Sub
Function cherche_dossier(ByRef dossier As Long)
    Dim w_main_handle As Long
    Dim ret As Long, ret1 As Long
    Dim s_dossier As String
    Dim r As String
 
    w_main_handle = val(ReadRegistry(HKEY_CURRENT_USER, "Software\Ciceron\CICERON WINDOWS", "w_main.handle"))
 
    'MsgBox "cherche_dossier"
    ret = SendMessage(w_main_handle, WM_USER + 2, 1, 0)
 
    'MsgBox "cherche_dossier :" & Str(ret)
    If ret = 1 Then
        r = Space(250)
        ret1 = GetWindowsDirectory(r, 251)
        r = Split(r, Chr$(0))(0)
        s_dossier = Space(200)
        GetPrivateProfileString "MulticritereDossier", "dossier", "", s_dossier, 200, r + "\cic_retour.ini"
        'OutputDebugString ("cherche_dossier :" & s_dossier)
        dossier = val(s_dossier)
        cherche_dossier = dossier
        'MsgBox "2: " & dossier
    End If
 
 End Function
J'ai pensé pouvoir créer un fichier exécutable à base VB qui serait appelé par un item du menu contextuel Windows (j'ai ajouté une entrée "Enregistrer sous CICERON" dans la base de registre Windows, et je peux y joindre une commande vers un exécutable).

Le principe serait : on clique droit sur le fichier à importer dans notre base de données, on sélectionne "Enregistrer sous CICERON", s'ouvre une fenêtre demandant le n° du dossier et idéalement après avoir cliqué sur "Ok", le fichier serait enregistré dans la BDD.

J'ai commencé à travailler sur le code avec Visual Studio 2010 Express, et ça donne ça :

Code :
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
 
Public Class CICERON
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'Sortie du programme
        End
    End Sub
    Public Sub EnregistrerSousCICERONW()
        Dim dossier As String
        Dim numDossier As Long
 
        dossier = get_user_property("COLDossier")
        DossierCiceron.rb_document.Caption = "Dossier du document (" + dossier + ")"
        If Trim(dossier) <> "" Then
            DossierCiceron.rb_document.Value = True
        Else
            DossierCiceron.rb_actif.Value = True
        End If
 
        DossierCiceron.Show()
 
        If DossierCiceron.rb_document.Value = True Then
            'dossier = dossier
        ElseIf DossierCiceron.rb_actif.Value = True Then
            dossier = "0"
        Else
            'dossier = DossierCiceron.sle_dossier.Text
            'on ouvre la recherche multi critére
            numDossier = cherche_dossier(numDossier)
            dossier = CStr(numDossier)
 
        End If
 
        Enregistrer(sous, dossier)
    End Sub
    Function cherche_dossier(ByRef dossier As Long)
        Dim w_main_handle As Long
        Dim ret As Long, ret1 As Long
        Dim s_dossier As String
        Dim r As String
 
        w_main_handle = val(ReadRegistry(HKEY_CURRENT_USER, "Software\Ciceron\CICERON WINDOWS", "w_main.handle"))
 
        'MsgBox "cherche_dossier"
        ret = SendMessage(w_main_handle, WM_USER + 2, 1, 0)
 
        'MsgBox "cherche_dossier :" & Str(ret)
        If ret = 1 Then
            r = Space(250)
            ret1 = GetWindowsDirectory(r, 251)
            r = Split(r, Chr$(0))(0)
            s_dossier = Space(200)
            GetPrivateProfileString(MulticritereDossier, "dossier", "", s_dossier, 200, r + "\cic_retour.ini")
            'OutputDebugString ("cherche_dossier :" & s_dossier)
            dossier = val(s_dossier)
            cherche_dossier = dossier
            'MsgBox "2: " & dossier
        End If
 
    End Function
    End Class
J'ai conçu une form très simple pour entrer le n° du dossier.

Bien entendu, j'ai bien conscience que le code de la macro VBA ne peut être transposé directement dans un projet VB, et que mes arguments ne sont pas tous définis car... mes connaissances s'arrêtent là.

J'ai bien entendu appelé mon éditeur de logiciel pro, mais ses techniciens ne semblent pas vouloir me répondre. Ils sont d'ailleurs de moins en moins à développer ce logiciel, qui va être remplacé d'ici un an ou deux. Mais mon cabinet continuera à utiliser le logiciel actuel pour une question de coût.

Je suis preneur de toute aide, mais je n'attends bien entendu pas que le code me tombe tout chaud dans la bouche. Je suis volontaire pour apprendre, mais je ne sais pas par où commencer.

A bientôt, et merci d'avance,

Jeff
JeffCarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 00h08   #2
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut Jeff,

Citation:
Envoyé par JeffCarter Voir le message
Bonjour à tous,

Je ne connais pas très bien le VB : je suis avocat...
Personne n'est parfait


Citation:
Je vous explique le contexte global de ma demande d'infos.

J'utilise un logiciel professionnel qui s'appelle CICERON, qui a été compilé avec PowerBuilder et qui, via ODBC, gère une base de données SQL hébergée sur notre serveur.
Heureusement que tu dis ne pas connaître

Citation:
Dans ce logiciel, chaque dossier est accessible grâce à l'interface graphique, avec une partie "Documents" qui liste les documents du dossier (.doc, .pdf, etc.).

Ce logiciel professionnel est génial, mais il lui manque une fonction primordiale : pouvoir enregistrer *simplement* (le mot est important) dans cette liste de documents des documents stockés ailleurs que sur le serveur (sur les ordinateurs de chaque avocat du cabinet).

La procédure d'enregistrement existe bien, mais elle suppose de faire les opérations suivantes :
- vous avez un fichier .pdf sur votre ordinateur (envoyé par un client par mail par ex.)
- vous trouvez le numéro du dossier auquel le rattacher
- vous ouvrez CICERON
- vous tapez le numéro du dossier dans la fenêtre de recherche et ouvrez le dossier
- vous accédez à la liste des documents
- vous cliquez sur nouveau
- une fenêtre d'explorateur apparaît : elle explore en priorité le serveur, ce qui est logique
- vous coupez/collez le document .pdf d'origine dans le dossier correspondant sur le serveur,
- ce document apparaît et vous pouvez cliquer sur enregistrer pour l'intégrer à la liste de documents du dossier.

Je cherche donc à concevoir un moyen d'intégrer plus rapidement ces documents à la base de données.

Les créateurs de CICERON ont conçu une macro qui permet de faire toutes ces opérations en un seul clic pour les documents Word, Excel et les mails quand Word est l'éditeur du message.

Cette macro est écrite en VBA et la voici :

Code :
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
Public Sub EnregistrerSousCICERONW()
    Dim dossier As String
    Dim numDossier As Long
 
    dossier = get_user_property("COLDossier")
    DossierCiceron.rb_document.Caption = "Dossier du document (" + dossier + ")"
    If Trim(dossier) <> "" Then
        DossierCiceron.rb_document.Value = True
    Else
        DossierCiceron.rb_actif.Value = True
    End If
 
    DossierCiceron.Show
 
    If DossierCiceron.rb_document.Value = True Then
        'dossier = dossier
    ElseIf DossierCiceron.rb_actif.Value = True Then
        dossier = "0"
    Else
        'dossier = DossierCiceron.sle_dossier.Text
        'on ouvre la recherche multi critére
        numDossier = cherche_dossier(numDossier)
        dossier = CStr(numDossier)
 
    End If
 
    Enregistrer "sous", dossier
End Sub
Function cherche_dossier(ByRef dossier As Long)
    Dim w_main_handle As Long
    Dim ret As Long, ret1 As Long
    Dim s_dossier As String
    Dim r As String
 
    w_main_handle = val(ReadRegistry(HKEY_CURRENT_USER, "Software\Ciceron\CICERON WINDOWS", "w_main.handle"))
 
    'MsgBox "cherche_dossier"
    ret = SendMessage(w_main_handle, WM_USER + 2, 1, 0)
 
    'MsgBox "cherche_dossier :" & Str(ret)
    If ret = 1 Then
        r = Space(250)
        ret1 = GetWindowsDirectory(r, 251)
        r = Split(r, Chr$(0))(0)
        s_dossier = Space(200)
        GetPrivateProfileString "MulticritereDossier", "dossier", "", s_dossier, 200, r + "\cic_retour.ini"
        'OutputDebugString ("cherche_dossier :" & s_dossier)
        dossier = val(s_dossier)
        cherche_dossier = dossier
        'MsgBox "2: " & dossier
    End If
 
 End Function
Attention, surtout en tant qu'avocat, tu dois savoir qu'il n'est pas possible de réexploiter la propriété intellectuelle telle qu'elle est définie pour les logiciels sans accord de son propriétaire. Le fait d'avoir acheté un logiciel ne t'en donne qu'un droit d'exploitation, pas plus.

Citation:
J'ai pensé pouvoir créer un fichier exécutable à base VB qui serait appelé par un item du menu contextuel Windows (j'ai ajouté une entrée "Enregistrer sous CICERON" dans la base de registre Windows, et je peux y joindre une commande vers un exécutable).
Super niveau (sans aucune ironie ). Si tu es aussi doué en droit que tu l'es en informatique, en cas de procès je préfère être de ton côté.

Citation:
Le principe serait : on clique droit sur le fichier à importer dans notre base de données, on sélectionne "Enregistrer sous CICERON", s'ouvre une fenêtre demandant le n° du dossier et idéalement après avoir cliqué sur "Ok", le fichier serait enregistré dans la BDD.

J'ai commencé à travailler sur le code avec Visual Studio 2010 Express, et ça donne ça :

Code :
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
 
Public Class CICERON
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'Sortie du programme
        End
    End Sub
    Public Sub EnregistrerSousCICERONW()
        Dim dossier As String
        Dim numDossier As Long
 
        dossier = get_user_property("COLDossier")
        DossierCiceron.rb_document.Caption = "Dossier du document (" + dossier + ")"
        If Trim(dossier) <> "" Then
            DossierCiceron.rb_document.Value = True
        Else
            DossierCiceron.rb_actif.Value = True
        End If
 
        DossierCiceron.Show()
 
        If DossierCiceron.rb_document.Value = True Then
            'dossier = dossier
        ElseIf DossierCiceron.rb_actif.Value = True Then
            dossier = "0"
        Else
            'dossier = DossierCiceron.sle_dossier.Text
            'on ouvre la recherche multi critére
            numDossier = cherche_dossier(numDossier)
            dossier = CStr(numDossier)
 
        End If
 
        Enregistrer(sous, dossier)
    End Sub
    Function cherche_dossier(ByRef dossier As Long)
        Dim w_main_handle As Long
        Dim ret As Long, ret1 As Long
        Dim s_dossier As String
        Dim r As String
 
        w_main_handle = val(ReadRegistry(HKEY_CURRENT_USER, "Software\Ciceron\CICERON WINDOWS", "w_main.handle"))
 
        'MsgBox "cherche_dossier"
        ret = SendMessage(w_main_handle, WM_USER + 2, 1, 0)
 
        'MsgBox "cherche_dossier :" & Str(ret)
        If ret = 1 Then
            r = Space(250)
            ret1 = GetWindowsDirectory(r, 251)
            r = Split(r, Chr$(0))(0)
            s_dossier = Space(200)
            GetPrivateProfileString(MulticritereDossier, "dossier", "", s_dossier, 200, r + "\cic_retour.ini")
            'OutputDebugString ("cherche_dossier :" & s_dossier)
            dossier = val(s_dossier)
            cherche_dossier = dossier
            'MsgBox "2: " & dossier
        End If
 
    End Function
    End Class
J'ai conçu une form très simple pour entrer le n° du dossier.

Bien entendu, j'ai bien conscience que le code de la macro VBA ne peut être transposé directement dans un projet VB, et que mes arguments ne sont pas tous définis car... mes connaissances s'arrêtent là.

J'ai bien entendu appelé mon éditeur de logiciel pro, mais ses techniciens ne semblent pas vouloir me répondre. Ils sont d'ailleurs de moins en moins à développer ce logiciel, qui va être remplacé d'ici un an ou deux. Mais mon cabinet continuera à utiliser le logiciel actuel pour une question de coût.

Je suis preneur de toute aide, mais je n'attends bien entendu pas que le code me tombe tout chaud dans la bouche. Je suis volontaire pour apprendre, mais je ne sais pas par où commencer.

A bientôt, et merci d'avance,

Jeff
Si tu ne te te sers du code VB de ton soft que pour t'en inspirer, on peut sans problème te donner un coup de main. Mais tu es déjà bien armé.

Le VBA ne se transpose pas directement en VB mais VB permet d'utiliser directement le VBA en passant par les bibliothèques (de code) fournies par les éditeurs (enfin pour nous par Microsoft). Le principe est le suivant :
VBA est un sous-langage de Visual Basic simplifié (au niveau de la syntaxe) couplé au modèle objet de l'application Office qui expose son modèle et met à disposition des propriétés et des fonctions pour manipuler l'application. Il existe plusieurs tuto sur le sujet chez DVP.com, comme celui sur le VBA d'Excel de bidou, celui de silkyroad sur les lectures/écritures des propriétés des classeurs, la FAQ VB sur la Liaison VB-Office > Word et surtout tous les tuto de Heureux-Oli sur Word.

Lorsque tu auras lu ces tuto, tu verras que tu es proche (voire très proche) d'aboutir et nous serons plus à même de t'aider de façon efficace. N'hésite pas à poster sur ce forum (de toute façon tu es proche de ton but).

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 14h59   #3
Invité de passage
 
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Bonjour Sepia,

Merci beaucoup pour ta réponse super rapide.

Ton avertissement au sujet des droits d'auteur est totalement justifié : j'en suis bien conscient.

J'avais demandé, avant de commencer à travailler dans mon coin, à l'éditeur de me concevoir ce que je souhaitais, et j'avais proposé de payer ce qu'il fallait.

Mais je n'ai jamais été contacté par ses techniciens.

J'ai rappelé le service commercial pour leur indiquer que je commençais à travailler de mon côté sur une solution, et leur ai offert de leur communiquer le produit de mon travail. Ils seront libres de l'intégrer à leurs solutions : je cèderai gratuitement mes propres droits d'auteur.

Tu as mille fois raison de rappeler que la décompilation ou l'extraction de codes ou de scripts est une contrefaçon de droits d'auteur.

Sinon, sur le projet, je cours lire les tutos que tu m'as indiqués.

Je te remercie vraiment beaucoup !

Je posterai dès que j'aurai pu avancer.

Bonnes fêtes de fin d'année !

Jeff
JeffCarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 20h45   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

Je pense qu'il y a des choses qu'on ne voit pas dans un tel projet.
Il y a certainement des références à certaines bibliothèques logicielles propres à Ciceron.
On y fait appel à des fonctions qui se trouvent dans le code.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 02h22   #5
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut JeffCarter,

Citation:
Envoyé par JeffCarter Voir le message
Bonjour Sepia,

Merci beaucoup pour ta réponse super rapide.

Ton avertissement au sujet des droits d'auteur est totalement justifié : j'en suis bien conscient.

J'avais demandé, avant de commencer à travailler dans mon coin, à l'éditeur de me concevoir ce que je souhaitais, et j'avais proposé de payer ce qu'il fallait.

Mais je n'ai jamais été contacté par ses techniciens.

J'ai rappelé le service commercial pour leur indiquer que je commençais à travailler de mon côté sur une solution, et leur ai offert de leur communiquer le produit de mon travail. Ils seront libres de l'intégrer à leurs solutions : je cèderai gratuitement mes propres droits d'auteur.

Tu as mille fois raison de rappeler que la décompilation ou l'extraction de codes ou de scripts est une contrefaçon de droits d'auteur.

Sinon, sur le projet, je cours lire les tutos que tu m'as indiqués.

Je te remercie vraiment beaucoup !

Je posterai dès que j'aurai pu avancer.

Bonnes fêtes de fin d'année !

Jeff
Sous ces conditions (bonnes), on sera heureux de t'aider (dans la limite de nos moyens Word/VBA...)

Bonnes fêtes
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h26.


 
 
 
 
Partenaires

Hébergement Web