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 :

BDD Fichier EXCEL en mode partagé


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut BDD Fichier EXCEL en mode partagé
    Bonjour,

    Alors, après de nombreuses lectures sur les fichiers Excel en mode partagé, je fais appel à vous pour avoir des explications.

    J'ai un fichier Excel qui me sert de sources d'informations (une base de donnée...). Juste pour étre clair, ce fichier n'a aucun script VBA.

    D'un autre coté, j'ai un autre fichier excel avec un menu et plusieurs code VBA.
    Dans celui-ci, une macro qui me permet de valider si le fichier est bien en mode partagé.
    D'ailleurs en voici le code qui pourrait servir à certains :

    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
    Sub SHARED_DATABASE()
    'On cache les classeurs qui vont s'ouvrir pour éviter les sauts d'écran
    'ATTENTION, NE PAS OUBLIER DE METTRE A TRUE EN FIN DE SCRIPT
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    'On cache les classeurs qui vont s'ouvrir pour éviter les sauts d'écran
    'ATTENTION, NE PAS OUBLIER DE METTRE A TRUE EN FIN DE SCRIPT
    Application.ScreenUpdating = False
     
    '--------- DECLARATION EMPLACEMENT FICHIER : ARCHIVES_FICHIER_EXCEL_V1.4.xlsx ---------
    'On déclare le fichier source de donnée ARCHIVES
    Dim FILE_ARCHIVES_BACKUP As String
    FILE_ARCHIVES_BACKUP = "Mettre_ici_votre_chemin\ARCHIVES_FICHIER_EXCEL_V1.4.xlsx"
     
     
    '----------  VERIFICATION DE L'OF EXISTANT DANS ARCHIVES LIEBHERR ----------
    'On déclare la variable qui contiendra la référence du fichier ARCHIVES_FICHIER_EXCEL_V1.4.xlsx
    Dim WbArchive_BACKUP As Workbook
    'On ouvre le fichier Archives
    Set WbArchive_BACKUP = Workbooks.Open(FILE_ARCHIVES_BACKUP)
     
    'On déclare la feuille source dans le fichier ARCHIVES LIEBHERR1
    Dim WcArchive As Worksheet
    Set WcArchive = WbArchive_BACKUP.Worksheets("ARCHIVES_MURET_FICHIER_EXCEL")
     
     
        If Not WbArchive_BACKUP.MultiUserEditing Then
            Application.DisplayAlerts = False
            WbArchive_BACKUP.SaveAs Filename:=WbArchive_BACKUP.FullName, accessMode:=xlShared
            WbArchive_BACKUP.Close SaveChanges:=True
            MsgBox "Votre Database est dorénavant en mode partagé !"
            Application.DisplayAlerts = True
     
            Else
            Application.DisplayAlerts = False
            WbArchive_BACKUP.Close SaveChanges:=False
            MsgBox "Votre base de donnée est déja en mode : Partagé !"
            Application.DisplayAlerts = True
     
     
        End If
     
     
     
    'On dé-cache les classeurs nécéssaires ouvert
    'ATTENTION, NE PAS OUBLIER DE METTRE A TRUE EN FIN DE SCRIPT
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
     
    End Sub

    BILAN : Mon fichier est bien partagé.
    Si je l'ouvre pour effectuer une modification d'une cellule, en enregistrant, j'ai une mise à jour du fichier qui se fait sans souci. Voir ci-dessous :

    Nom : capture_partage_01.PNG
Affichages : 157
Taille : 5,6 Ko

    Je me pose la question suivante.
    Sous VBa : J'enregistre arbitrairement si ce fichier a été ouvert et si des instructions ont été apportés. Voici la ligne que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WbArchive_BACKUP.Close SaveChanges:=True
    En fait, comment dire à VBA de faire une mise à jour au lieu d'un enregistrement complet ? Je cherche en résumé à savoir comment faire un UPDATE de mon fichier Excel qui me sert de base de donnée au lieu d'un enregistrement en écrasant mon fichier.

    Déduction que j'ai fais car j'ai des erreurs en me disant que le fichier est en lecture seule sous VBA...


    Ayant un niveau assez faible en VBA, je me suis permis de détaillé pour comprendre le contexte ainsi que mes intérrogations.

    Pour info, si le fichier Excel est ouvert directement par plusieurs personnes (pas de VBA) : pas de souci.

    Bref, a mon avis j'ai besoin de quelques explications...

    Merci pour votre retour.

    Bien à vous

    EDIT :

    Serait-il judicieux pour un update de mettre plutot ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WbArchive.SaveAs Filename:=WbArchive.FullName, accessMode:=xlShared
    WbArchive.Close
    Sinon si je regarde dans l'explorateurs d'objets (F2), j'ai trouvé ceci :
    Bon là aussi, j'ai besoin de comprendre...

  2. #2
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 191
    Par défaut
    Hello,

    Excel n'est pas un gestionnaire de base de données, donc il enregistre TOUT le fichier à chaque fois.

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut
    Citation Envoyé par Nain porte koi Voir le message
    Hello,

    Excel n'est pas un gestionnaire de base de données, donc il enregistre TOUT le fichier à chaque fois.
    OK,
    Merci pour ton retour Toutefois, comme vous avez pu le voir si j'ouvre le fichier Excel, lorsque je clique sur la disquette pour l'enregistrer, il met à jour celui-ci (voir capture d'écran ci-dessus)
    C'est cette situation que je souhaite reproduire en VBA et que je cherche en vain depuis un moment.

    Au plaisir de vous lire

    EDIT :

    Bon déja, j'ai trouvé ce bout de code qui permet de vérifier si on peut ouvrir un fichier qui est partagé. Au moins si c'est pas possible, j'aurai un message au lieu d'une fenetre de plantage du script.
    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
    Sub UpdateSharedWorkbook()
        Dim wb As Workbook
        Dim filePath As String
     
        ' Chemin du fichier partagé
        filePath = "C:\Chemin\Vers\Votre\FichierPartagé.xlsx"
     
        ' Ouvrir le fichier en mode partagé
        On Error Resume Next
        Set wb = Workbooks.Open(filePath, ReadOnly:=False, IgnoreReadOnlyRecommended:=True)
        On Error GoTo 0
     
        ' Vérifier si le fichier a été ouvert avec succès
        If wb Is Nothing Then
            MsgBox "Impossible d'ouvrir le fichier partagé.", vbExclamation
            Exit Sub
        End If
     
        ' Effectuer des modifications dans le fichier partagé
        With wb.Sheets("Feuille1")
            .Range("A1").Value = "Nouvelle Valeur"  ' Exemple de modification
        End With
     
        ' Enregistrer les modifications
        wb.Save
     
        ' Fermer le fichier (optionnel)
        wb.Close SaveChanges:=False
     
        ' Libérer l'objet
        Set wb = Nothing
     
        MsgBox "Mise à jour effectuée avec succès !"
    End Sub

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    les fichiers partagés, c'est casse-tête.
    Ca marche plutôt bien avec les services web, mais dans ce cas, il n'y a pas de VBA.

    Le mieux, est encore de mettre une base de données en back-end (Ms Access ou autre).

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 174
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    D'autre part la moitié des macros ne s'exécutent plus sur un classeur partagé, pas d'objets Tableau (incompatible) etc...

    mais bon, si tu veux absolument, à tester un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ActiveWorkbook.SaveAs Filename:= _
            "F:\Documents and Settings\student\My Documents\Book1.xlsx", FileFormat:= _
            xlOpenXMLWorkbook, AccessMode:=xlShared

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Bonsoir,

    D'autre part la moitié des macros ne s'exécutent plus sur un classeur partagé, pas d'objets Tableau (incompatible) etc...

    mais bon, si tu veux absolument, à tester un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ActiveWorkbook.SaveAs Filename:= _
            "F:\Documents and Settings\student\My Documents\Book1.xlsx", FileFormat:= _
            xlOpenXMLWorkbook, AccessMode:=xlShared
    Bonjour,

    Déja testé mais pas au top.
    Au final, effectivement Access ou autres et à convaincre mes superieurs héirarchiques

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 174
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Après on peut tout à fait envisager une base Access sur le réseau sans que les utilisateurs n'aient besoin d'Access
    Les données peuvent être chargées depuis Access vers Excel (à travers Powerquery ou en VBA avec ADO par exemple) et les mises à jour peuvent être injectées en SQL par ADO
    On peut donc envisager un fichier de travail Excel pour chaque utilisateur, pointant sur une base Access centralisée, mais qui a l'avantage de pouvoir gérer au moins une dizaine d'accès concurrents

  8. #8
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut
    Merci à tous pour vos réponses.

    En fait j'ai mis en place un script de vérification si le fichier est accessible ou pas :
    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
    Sub VerifierFichierOuvert()
        Dim cheminFichier As String
        Dim wb As Workbook
        Dim fichierOuvert As Boolean
        Dim tentative As Integer
        Dim maxTentatives As Integer
     
        ' Chemin du fichier partagé sur le réseau
        cheminFichier = "\\Serveur\Partage\MonFichier.xlsx"
     
        ' Nombre maximum de tentatives
        maxTentatives = 5
     
        ' Initialisation de la variable de tentative
        tentative = 1
     
        ' Boucle pour vérifier si le fichier est ouvert
        Do While tentative <= maxTentatives
            On Error Resume Next
            ' Essayer d'ouvrir le fichier en mode exclusif
            Set wb = Workbooks.Open(Filename:=cheminFichier, ReadOnly:=True, Password:="", WriteResPassword:="", IgnoreReadOnlyRecommended:=True, Notify:=False)
            On Error GoTo 0
     
            ' Vérifier si le fichier a été ouvert avec succès
            If Not wb Is Nothing Then
                ' Le fichier n'est pas ouvert par une autre personne
                fichierOuvert = False
                wb.Close SaveChanges:=False
                MsgBox "Le fichier n'est pas ouvert par une autre personne.", vbInformation
                Exit Do
            Else
                ' Le fichier est probablement ouvert par une autre personne
                fichierOuvert = True
                MsgBox "Le fichier est ouvert par une autre personne. Tentative " & tentative & " sur " & maxTentatives, vbExclamation
            End If
     
            ' Attendre un peu avant de réessayer
            Application.Wait (Now + TimeValue("0:00:02"))
     
            ' Incrémenter le compteur de tentatives
            tentative = tentative + 1
        Loop
     
        ' Si le fichier est toujours ouvert après toutes les tentatives
        If fichierOuvert Then
            MsgBox "Le fichier est toujours ouvert par une autre personne après " & maxTentatives & " tentatives.", vbCritical
        End If
    End Sub
    Par contre en gardant cette ligne avec ReadOnly:=True, lorsque en VBA je fais un Wb.Save, cela m'affiche un message de proposition d'enregistrement Windows.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set wb = Workbooks.Open(Filename:=cheminFichier, ReadOnly:=True, Password:="", WriteResPassword:="", IgnoreReadOnlyRecommended:=True, Notify:=False)
    Je n'arrive pas à trouver comment faire pour que l'enregistrement des informations modifiés via mon USERFORM et par mon script VBA enregistre sans intervention utilisateur.

    Pour info, j'ai 5 PC qui tape sur mon fichiers. Même 2 PC pose un souci....

    Avec avec ReadOnly:=True en False, là pas de souci. Toutefois, j'ai à nouveau mon panneau d'affichage que le fichier n'est pas disponible... et donc pas de vérification si le fichier est dispo...

    En fait je cherche une solution temporaire car suis en train de bucher Access...

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

Discussions similaires

  1. Ouvrir un fichier excel en mode partagé
    Par astragoth dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 10/02/2016, 13h16
  2. [WD14] Sauvegarde fichier excel en mode partagé
    Par pasla dans le forum WinDev
    Réponses: 2
    Dernier message: 28/03/2013, 18h03
  3. acces fichier excel sur disque partagé ?
    Par Cokate dans le forum C#
    Réponses: 9
    Dernier message: 14/08/2008, 09h12
  4. [MySQL] Comment alimenter MYSQL avec des fichiers Excel en mode batch
    Par mabret dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/05/2008, 19h20
  5. Gestion en vba des fichiers excel en mode multiutilisateurs
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/12/2005, 16h06

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