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 :

pb pour gérer une routine d'erreur


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut pb pour gérer une routine d'erreur
    Bonjour à tous,

    J'ai besoin d'aide pour poser une routine d'erreur sur mon code.
    J'ai un fichier en lecture seule utilisé simultanément par plusieurs personnes.
    Lorsque ces personnes cliquent sur un bouton elles transfèrent des données vers un autres fichier = doc(1).
    Mon problème est que lorsque le doc1 est déjà "ouvert" par un autre utilisateur (le temps que celui-ci transfère ses données) cela génère une erreur.
    Je voudrais pouvoir recommencer la demande d'ouverture du doc1 tant qu'il ne s'ouvre pas en lecture-écriture
    Auriez-vous une proposition ?

    Merci d'avance pour votre aide
    Bon week-end

    Mag

    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
     
        Sub transferer()
        'masque l'execution des macros
        Application.ScreenUpdating = False
     
     
        'ouvre le fichier
        Workbooks.Open Filename:="N:\Serveur1\GESTION SUIVI CAF.xlsx"
     
        'récupère le nom dans une variable
        doc1 = ActiveWorkbook.Name
     
     
        Windows("RECEVABILITE_AUTO DP.xlsm").Activate
     
        'récupère le nom dans une variable
        doc2 = ActiveWorkbook.Name
     
        Windows(doc2).Activate
     
        Sheets("nir caf").Visible = True
        Sheets("nir caf").Select
     
     
        ' copie les données
           Columns("A:n").Select
            Selection.Copy
            Windows(doc1).Activate
            Columns("A:n").Select
            ActiveSheet.Paste
            Range("a1").Select
     
        ' vide le presse papier
        Call presse
     
        'enregistre et ferme le doc1 après copie
        Windows(doc1).Activate
        ActiveWorkbook.Save
        ActiveWorkbook.Close
     
        End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'ai été amené à répondre à cette problématique, que je déconseille personnellement
    en partant du principe que le fichier excel n'est pas ouvert trop longtemps pour l'écriture et l'utilisation du fichier cible (quelques secondes), voici comment j'ai procédé, ce n'est pas la panacée

    une fonction d'ouverture un peu brute
    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
    Option Explicit
     
    ' ESSAYE D'OUVRIR LA BDD EN ECRITURE
    Function Ouverture_BDD() As Variant
    Dim LectureSeule As Boolean, Cpt As Long
    Application.ScreenUpdating = False
        Do
            ' ON TENTE 5 FOIS DE SUITE D'OUVRIR LA BDD EN ECRITURE
            With Workbooks.Open(CheminBDD & NOM_BDD, , False, , PASSWORD)
                LectureSeule = .ReadOnly
                Cpt = Cpt + 1
                If LectureSeule Then
                    .Close False
                    ' AU BOUT DE 5 ECHECS, L'UTILISATEUR CHOISIS DE REESSAYER OU PAS
                    If Cpt = 5 Then
                        If MsgBox("La BDD est fermée en écriture, voulez-vous refaire une tentative ?", vbYesNo) = vbYes Then
                            Cpt = 0
                        Else
                            ' SI ECHEC ET ARRETE DE L'UTILISATEUR
                            ' ON RENVOIE UN FALSE
                            Ouverture_BDD = False
                            Exit Do
                        End If
                    End If
                End If
            End With
        Loop While LectureSeule = True
     
    ' SI OUVERTURE REUSSIE
    ' ON RENVOIE UN OBJET WORKBOOK REPRESENTANT LA BDD
    Set Ouverture_BDD = Workbooks(NOM_BDD)
    Application.ScreenUpdating = True
    End Function
    Voici comment je l'appelle dans mes procédures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Sub Export_Saisie()
    Dim Wb_BDD As Workbook
        Application.ScreenUpdating = False
            On Error Resume Next: Set Wb_BDD = Ouverture_BDD: On Error GoTo 0
            If Wb_BDD Is Nothing Then Exit Sub
     
            ' TRAITEMENT
     
            Wb_BDD.Close True
        Set Wb_BDD = Nothing
        Application.ScreenUpdating = True
    End Sub
    Avec trois constantes publiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Const CheminBDD As String = "CheminDuFichier"
    Public Const NOM_BDD As String = "NomDuFichier"
    Public Const PASSWORD As String = "MdpEventuelDuFichier"

    Pour le moment, ça tient avec 6 ou 7 utilisateurs de l'outil déporté, mais je maintiens que c'est pas conseillé

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, peut-être via Code de macro pour vérifier si un fichier est déjà ouvert ou allégé dans la FAQ.

Discussions similaires

  1. Développer une routine interruption erreur critique 24h
    Par MSM_007 dans le forum Assembleur
    Réponses: 1
    Dernier message: 19/12/2006, 15h49
  2. Réponses: 13
    Dernier message: 12/12/2006, 21h44
  3. Utilisation de classes pour gérer une table
    Par mathias dans le forum Access
    Réponses: 11
    Dernier message: 30/08/2006, 16h57
  4. Réponses: 1
    Dernier message: 22/02/2006, 09h02
  5. Réponses: 3
    Dernier message: 09/10/2005, 19h10

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