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 : 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
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 : 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
 
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