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 :
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).
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
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 :
J'ai conçu une form très simple pour entrer le n° du dossier.
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
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
Partager