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 :

Optimisation du code - Gestion multi utililsateurs à distance [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Août 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Août 2018
    Messages : 18
    Par défaut Optimisation du code - Gestion multi utililsateurs à distance
    Bonjour,

    Je cherche à développer une solution pour la gestion multi-utilisateur à distance dans le cadre du télétravail.
    J'utilise pour cela un dossier sur un disque réseau dans lequel je stocke des mini fichiers texte avec pour titre la ligne en cours d'utilisation ainsi que le nom de l'utilisateur.
    Cela fonctionne parfaitement et de façon instantanée en local. mais les temps de réponses à distance sont trop long (entre 5 et 10 secondes de temps mort entre chaque cellule).
    J'espère être clair.

    Je cherche donc à optimiser un maximum afin de réduire le temps de traitement.
    Toutes les idées sont les bienvenues!!!!


    Voici ma fonction qui est déclenchée par Workbook_SheetSelectionChange

    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
    Function verrouillage(ByVal ligne As String) As Boolean
        Dim CheminVerrou As String
        Dim fs As Scripting.FileSystemObject
        Dim UtilisateurActuel As Boolean
     
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set dossiersource = fs.GetFolder("V:\SEB - Test Télétravail\verrou\")
     
        For Each fichier In dossiersource.Files
            If Left(fichier.Name, Len(ligne)) = ligne Then
                If InStr(1, fichier.Name, Application.UserName) = 0 Then
                    UtilisateurActuel = False
                    MsgBox "cette ligne est vérouillée par " & Mid(fichier.Name, Len(ligne) + 2, InStr(Len(ligne) + 2, fichier.Name, "-") - Len(ligne) - 2)
                    verrouillage = True
                    Exit For
                Else
                    UtilisateurActuel = True
                End If
            Else
                verrouillage = False
            End If
        If InStr(1, fichier.Name, Application.UserName) Then
            On Error GoTo errorHandler
            Kill dossiersource & "\" & fichier.Name
            On Error GoTo 0
        End If
        Next fichier
     
        If verrouillage = False Then
            Set a = fs.CreateTextFile("V:\SEB - Test Télétravail\verrou\" & ActiveCell.Row & "-" & Application.UserName & "-" & Replace(Date, "/", ".") & "-" & Replace(TimeValue(Now), ":", "."), True)
            If UtilisateurActuel = False Then MsgBox "ligne libre!!"
        Else
            Application.EnableEvents = False
            ActiveCell.Offset(1, 0).Select
            Application.EnableEvents = True
            Set a = fs.CreateTextFile("V:\SEB - Test Télétravail\verrou\" & ActiveCell.Row & "-" & Application.UserName & "-" & Replace(Date, "/", ".") & "-" & Replace(TimeValue(Now), ":", "."), True)
        End If
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    Exit Function
    errorHandler:
        a.Close
        Resume
    End Function
    Merci de m'avoir lu!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce n'est peut-être pas ton code qui est en défaut, mais la connexion.

    Philippe

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu ne peux pas tout mettre dans un fichier unique ?
    Ouvrir 20 fichiers sera toujours 20 fois plus lent qu'un seul. D'autant plus si l'utilisateur a un mauvais ping.
    eric

  4. #4
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Août 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Août 2018
    Messages : 18
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Bonjour,

    tu ne peux pas tout mettre dans un fichier unique ?
    Ouvrir 20 fichiers sera toujours 20 fois plus lent qu'un seul. D'autant plus si l'utilisateur a un mauvais ping.
    eric
    Merci de ta réponse!

    Le choix de la création des fichiers texte vient justement du temps de réponse: aucun d'eux n'est ouverts, le code parcourt seulement leurs noms, ce qui fait un gain de temps considérable par rapport à ouvrir, modifier, puis enregistrer.
    Mon premier test utilisait un fichier unique en csv qui pesait moins d'un kilo et les temps de réponses dépassaient les 20 secondes!

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Je n'y connais rien en réseau mais au cas où, il n'existerait pas une notion de flux prioritaire ?
    C'est plus important de faire passer les flux d'applications temps réel que le chargement du rapport de la dernière réunion.

    Et partager le classeur est exclu ?

    Edit : La qualité de service permet d’offrir aux utilisateurs des débits et des temps de réponse différenciés par applications (ou activités) suivant les protocoles mis en œuvre au niveau de la structure.
    https://fr.wikipedia.org/wiki/Qualit%C3%A9_de_service

  6. #6
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Août 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Août 2018
    Messages : 18
    Par défaut
    En fait, je n'ai absolument aucun accès aux paramètres réseau :/
    Initialement, les classeurs dans lesquels je veux intégrer ces codes sont déjà partagés. L'idée est d'en ouvrir une copie locale car à chaque ouverture/enregistrement/fermeture, l'utilisateur distant verrouille le classeur pour des durées allant parfois jusqu'au quart d'heure!!!
    C'est justement pour contourner ça que je m'arrache le peu de cheveux qui me restent sur ce code

    Autre idée que j'ai eu mais qui, à priori, n'est pas réalisable, serait de stocker directement dans une variable tableau le contenu du dossier "verrou" mais je n'ai pas réussi sans faire une boucle qui parcourt les fichiers, donc inutile...

  7. #7
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Août 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Août 2018
    Messages : 18
    Par défaut
    Merci Philippe pour ta réponse.
    Mon code fonctionne bien en local. Effectivement, c'est le temps de réponse du disque réseau qui pose problème. Mais je me dis qu'au plus mon code est léger et optimisé, au plus je me rapprocherais de la solution

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Mon petit grain de sel...

    Les classeurs partagés, c'est déjà bof bof, mais alors verrouiller des lignes d'un classeur distant via des fichiers txt, je n'avais encore jamais vu

    Au delà de l'éventuelle prouesse technique mais de la très certaine fragilité d'un tel montage, je me dis qu'utiliser Excel dans ce genre de configuration est vraiment aberrant. Même si je n'aime pas les classeurs partagés, on pourrait envisager de les travailler en Office 365 (pour le prix de quelques licences).

    L'usine à gaz qui est en train d'être construite ici est tout sauf professionnelle car non pérenne et non fiable (même si je sais qu'on fait avec ce qu'on a... )
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour Pierre,

    Je lui avais signalé au post #8 qu'un classeur partagé (avec ses limitations) ne bloquait pas les autres utilisateurs contrairement à ce qu'il avait l'air de penser.
    Mais il n'a pas rebondi dessus. Peut-être que ce sont ces limitations qui le gênent (?)

    Fragilité, tu fais bien de soulever la question.
    Quid d'un accès simultané ou 2 utilisateurs ont ok en réponse ? Vu les temps de réponse ça va arriver...
    Il faut ouvrir le fichier en le verrouillant avec Lock Read Write.
    eric

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Eric

    Le classeur partagé ne bloque effectivement pas les autres utilisateurs, mais j'ai déjà du mal (comme on dit chez nous) à l'envisager comme solution sur un réseau local, alors distant, je ne te dis même pas les #@$*|&{#é#€ qui me viennent en tête

    Les mécanismes de verrou sont parmi les plus fragiles sur les SGBD pro et des armées d'ingénieurs ont planché dessus, alors je doute qu'un fichier txt créé à distance amène sécurité et fiabilité.

    Je verrais déjà moins mal une consolidation des classeurs locaux avec rejet des lignes modifiées par plusieurs utlisateurs, mais il est très clair qu'Excel n'est pas du tout fait pour ça. Même Access, de par l'accès distant, est irréaliste dans ce cas-ci.

    Une solution relativement légère serait de s'orienter vers une base de données sur Azure, qui permet l'hébergement de bases Access, si je ne dis pas de conneries. Alors oui, ça a un coup, mais au moins c'est pro, fiable, fait pour,... (Et le coût de la perte de données ou de confiance sur celles-ci n'est pas à négliger dans la solution Excel, d'ailleurs).

    Je ne sais pas ce que cette usine à gaz est censée gérer, mais je plains la personne qui va devoir rendre des comptes en cas de plantage
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Août 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Août 2018
    Messages : 18
    Par défaut
    Merci Pierre.
    Comme tu dis, on fait avec ce qu'on a... Comme tu t'en doutes, je n'ai absolument aucun moyen d'obtenir une licence pour quoi que ce soit!!!
    Eriic, quand je parles de "blocage" des fichiers partagés, c'est vrai que le terme n'est pas le bon, mais lors des ouvertures et enregistrements des utilisateurs distants, le classeur était effectivement figé pendant une bonne dizaine de minutes sur le site local... Voilà le pourquoi de l'usine à gaz. Ce n'est effectivement pas des plus fiables, mais est tout du moins un garde fou....

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    C'est clair qu'un classeur partagé n'est pis-aller développé sans doute avec les contraintes de l'époque.

    Le mettre sur onedrive avec chacun une copie synchronisée pourrait être une autre solution à explorer non ?
    Si les fichiers ne sont pas énormes le compte gratuit sera suffisant.
    eric

  13. #13
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Août 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Août 2018
    Messages : 18
    Par défaut
    Comme dit plus haut, je ne pourrais avoir aucune autorisation. Je travaille dans une grande boite et le télétravail est développé avec des outils qui ne conviennent pas à notre activité (spécifique au sein de la boite). Je n'ai que deux solution, soit "sécuriser" l'accès exclusif aux dossiers via le code (si fragile que soit cette solution) soit la sécuriser en amont avec les dossiers physiques, ce qui risque de générer des conflits lors de la compilation des données...
    Bref, je dois tester dans l'après-midi le temps d'accès au fichier texte (le plus léger possible) afin de voir si je continue à me casser la tête ou pas
    Dans tous les cas, ce genre réflexions tordues me permettent de progresser à chaque .

  14. #14
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Août 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Août 2018
    Messages : 18
    Par défaut
    Les tests sont..... CONCLUANTS!!!! Expérience de la collègue: "C'est comme si j'étais au bureau!" Quasiment aucune latence constatée!!! Reste à voir en multi-utilisateur (testé avec deux utilisateurs + deux enregistrements fictifs dans le fichier txt)
    Je vais maintenant m'atteler à la compilation des données au retour des collègues.
    Encore un grand merci pour le soutien et pour les pistes!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Gestion multi ecran avec code vba
    Par 3TOTO6 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/07/2018, 14h50
  2. [Toutes versions] Optimiser le code VBA (gestion de liste)
    Par BAHIRI dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/03/2011, 01h10
  3. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  4. [MX]Optimisation de la gestion du clavier
    Par yacinechaouche dans le forum Flash
    Réponses: 8
    Dernier message: 18/04/2004, 02h13
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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