Projet amelioration d'un classeur excel

Fermé
Zonby.D Messages postés 3 Date d'inscription samedi 4 juillet 2015 Statut Membre Dernière intervention 4 juillet 2015 - 4 juil. 2015 à 11:14
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 5 juil. 2015 à 20:00
Bonjour,
Je suis étudiant en prog et actuellement polyvalent dans une société X durant mes vacances.
Ma première mission en amélioration système est de reprendre plusieurs classeurs excel et de les réunir en 1 classeur excel (expliquer ci dessous). Je post ce message pour avoir des avis/amélioration sur la façon dont j'ai abordé le problème et pourquoi pas des façon de programmé ça en VBA (je n'ai encore jamais touché à VBA).

Disposition des postes informatiques:
7 postes différents avec chacun leur disque dur, tous relié à un disque dur partagé.

Organisation actuelle :
5 fichiers excel incluant les fonctionnalités -imprimé les feuilles voulus, envoie de mail aux personnes concernées et alimentation d'un historique en feuille excel- en macro. Ils utilisent une base de donné en feuille excel inclus dans chaque classeur. Ils sont tous sur le disque dur partagé.
Problèmes :
Impossible d'accédé en même temps au même fichier. La moitié des choses sur les classeurs sont inutiles (datant de 2004).

Restriction :
- Utilisable par excel 2003
- La manipulation utilisateur doit être simple et rapide
- Aucun logiciel tiers
- La base de donné doit être mise a jour tous les mois (normalement)

Mon projet :
Regroupé les 5 classeurs en 1 et l'implanté sur chaque poste
Dissocié l'historique et la base de donné et les mettre sur le disque dur partagé
Dans l'utilisation, à chaque manipulation du classeur excel, il prendra les infos sur la bdd, puis imprimera et enverra les mails, puis alimentera l'historique partagé.
Question programmation:
- Comment alimenter l'historique ?
- Est possible d'envoyé des mails à une liste d'utilisateur pouvant être modifié sur une feuille excel sans touché à la macro ?
- Niveau performance, est ce que ca ne prendra pas trop de temps pour des postes assez vieux ( windows xp, Pentium 4 il me semble) ?

Merci pour les gens qui auront lui jusqu'au bout et encore plus aux personnes qui auront répondu ;).
Si il faut plus d'info précisé le, pour l'instant je pense que le pavé est déjà assez long.
Aucune info sur la société ou ce que renferme ces classeurs ne peux être divulgué.
A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
4 juil. 2015 à 12:26
bonjour,

il faudrait que l'historique soit conçu sous forme de table de données sur le serveur.

pour réduire le risque de collisions la solution pourait être de passer par SQL et ADO
j'ai un exemple de caftage qui, quand.... je regarde pour voir si tu pourrais l'adapter
pour vba tu as de très bons tutos, sources faq sur developpez.com en particlulier sur les fichiers fermés (ado-sql)

bon courage
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 4/07/2015 à 14:05
Ci joint un exemple d'historique excel-excel (on peut faire excel-txt)
on connait sur quelle ligne de la colonne bleue qui a fait une modif et quand
https://www.cjoint.com/
les macros sont dans le module "feuille1" et module 1
en utilisant ADO et SQL

ci dessous code excel-txt dans copier dans le module Thiswoorkbook de "diisident"
Option Explicit
Const fichier As String = "D:\docus\bigbrother.txt" 'A ADAPTER AU CONTEXTE
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, _
nSize As Long) As Long

'
Private Sub Workbook_Open()
Dim lpBuff As String * 25
Dim retour As Long
Dim utilisateur As String, cafte As String

retour = GetUserName(lpBuff, 25)
utilisateur = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

cafte = "Ouvert à : " & Format(Now, "dd/mm/yyyy hh:mm:ss") & _
vbTab & "par : " & utilisateur

Open fichier For Append As #1
Print #1, cafte
Close

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lpBuff As String * 25
Dim retour As Long
Dim utilisateur As String, cafte As String

retour = GetUserName(lpBuff, 25)
utilisateur = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

cafte = "Fermé à : " & Format(Now, "dd/mm/yyyy hh:mm:ss") & _
vbTab & "par : " & utilisateur

Open fichier For Append As #1
Print #1, cafte
Close

End Sub
0
Zonby.D Messages postés 3 Date d'inscription samedi 4 juillet 2015 Statut Membre Dernière intervention 4 juillet 2015
4 juil. 2015 à 15:11
Après lecture de ta réponse,
L'historique est bien une feuille excel contenant une liste avec date et ce qui a était fait d'une dizaine de cellule (donc du excel -> excel).
Par contre je ne comprend pas ton histoire de collision, peux tu me préciser ?
Je n'arrive pas a voir ton document cjoint (je n'ai jamais utiliser ce site, peut etre une mauvaise manipulation de ma part)
Je vais m'intéresser a VBA et te dirai si ton code m'aidera ( mais si je comprend bien il le sera ;p ).
Merci pour le coup de main c'est vraiment sympa.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
4 juil. 2015 à 15:49
Collision=demande d'accès simultanée

je m'étais planté le lien est
http://www.cjoint.com/c/EGenVR1JTBX
0
Zonby.D Messages postés 3 Date d'inscription samedi 4 juillet 2015 Statut Membre Dernière intervention 4 juillet 2015
4 juil. 2015 à 17:06
J'ai du mal a assimilé le code que tu m'as fourni,tel que le fonctionnement de FichOuvert, Cells(lig, 8) alors que lig n'a pas de valeur, idem pour 1pBuffer, idem pour db_taupe.
Et :
Set source = CreateObject(" ADODB.Connection")
source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";" & _
"extended properties=""Excel 8.0;"""
Est ce que ca s'écrit toujours comme ça ?
(désolé de toutes ces questions, je n'ai commencé à regarde VBA que depuis hier)
Sinon pour GetUserName, est ce que environ("username") fait le même travail ?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 5/07/2015 à 20:01
Bonjour,
Salut michel,

un projet déjà bien avancé qui pourrait t'intéresser : https://forum.excel-pratique.com/viewtopic.php?forum_uri=excel&t=62074&start=
Cependant :
Mais la bonne nouvelle pour les "petits utilisateurs" est que je prévois malgré tout de proposer aussi une version gratuite. La version gratuite sera bien entendu limitée, notamment en nombre d'enregistrements (avec une limite estimée à 1'000 cellules sauvegardées au maximum) mais il me semble que ce serait déjà pas trop mal pour un "petit utilisateur".
Il ne faudrait pas que ce soit bloquant dans 5 ans
eric
0