Patienter pendant l'utilisation d'un classeur

Zouzou93

XLDnaute Occasionnel
Re-Bonjour le Forum,

Y a t-il possibilité de mettre en place un message d'attente lorsque un classeur est déjà utilisé par une autre personne.

En fait ce classeur "Archives" ne fait qu'être ouvert momentanément pour l'enregistrement de certaines données saisies sur une interface multiutilisateur et se ferme au bout de 30 secondes.

Plutôt que de demander au 2ème utilisateur déjà bien avancé dans la saisie de ses données de quitter l'application et de revenir ultérieurement en raison d'un classeur en cours d'utilisation, n'est il pas possible de mettre un code -Message d'attente qui après avoir détecté l'utilisation du classeur Archives par un autre utilisateur de faire patienter 1 minute et donc de mettre en standby la macro en cours et de la relancer une fois que le classeur Archives est refermé.

Merci par avance
Zouzou
 

jigagneur

XLDnaute Nouveau
Re : Patienter pendant l'utilisation d'un classeur

bonjour,

j' ai été confrontée au même cas.Et je l'ai résolu de cette façon:

Quand j'ai besoin de mon fichier destination, je teste son utilisation . Si il est ouvert je charge un userform d'attente avec un do events.Et j'ai crée une boucle de test de changement d'état du fichier destination.
Dès qu'il est fermé hide et unload et je reprends le cours de ma macro.

if workbook(xxxx).readonly=true then
load userform1
end if

private sub userform_activate
doevents
call "macro de test de changement d'état"
unload Me
end sub
 

Zouzou93

XLDnaute Occasionnel
Re : Patienter pendant l'utilisation d'un classeur

Bonjour Jigagneur et merci pour ton aide .... mais la débutante que je suis en VBA n'a pas su appliquer correctement ton code ...
Je suppose que la première partie du code doit être placée avant la demande d'ouverture de mon fichier soit :

If Workbooks("Archives").ReadOnly = True Then
Load Animation
End If

Workbooks.Open ("\\Mrssfp01\CEVAFrance\documents\Outils\COTATEUR AIR EXPORT\ENREGISTREMENT\Archives.xls")

Qu'en est-il de la 2ème partie du code ?

Est ce que je dois créer un module supplémentaire ? Ou bien est-il possible de l'intégrer à la suite de la macro en cours ? Mais où et à quel moment ?
Désolée, encôre pour ces questions un peu naives mais j'ai besoin de comprendre pour appliquer au mieux.

private sub userform_activate
doevents
call "macro de test de changement d'état" - Qu'appelle tu macro de test de changement d'état ?
unload Me
end sub


Voici mon code


If Workbooks("Archives").ReadOnly = True Then
Load Animation
End If
Workbooks.Open ("\\Mrssfp01\CEVAFrance\documents\Outils\COTATEUR AIR EXPORT\ENREGISTREMENT\Archives.xls")

Windows("COTATION.xls").Activate
Range("C15:E15").Select
Selection.Font.ColorIndex = 0
Range("I1").Select
Range("B10").Select
Selection.Copy
Windows("ARCHIVES.XLS").Activate
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Windows("COTATION.xls").Activate
Range("B12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ARCHIVES.XLS").Activate
Range("C6").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "yyyy"

ActiveSheet.Columns(1).Find("*", , , , , xlPrevious).EntireRow.Select
Selection.Copy
Sheets("ENREG").Select
ActiveSheet.Columns(1).Find("*", , , , , xlPrevious).Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Feuil1").Select
ActiveSheet.Columns(1).Find("*", , , , , xlPrevious).Offset(1, 0).Select
Sheets("Feuil1").Select
Range("A6").Select

ThisWorkbook.Save
ActiveWorkbook.SaveAs Filename:= _
"\\Mrssfp01\CEVAFrance\documents\Outils\COTATEUR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close (False)

C'est une fois la macro ci dessus exécutée et enregistrée que mon fichier Archives se referme pour être de nouveau accessible et disponible au prochain utilisateur.

Merci de ton aide précieuse.
Zouzou
 

Zouzou93

XLDnaute Occasionnel
Re : Patienter pendant l'utilisation d'un classeur

Re,

Merci Jigagneur
Je t'aurais bien envoyé mon fichier mais il pèse 1,6Mo ... alors difficile !

En fait j'avais déjà crée mon USERFORM (Car c'est à peu près la seule chose que je sache faire en VBA ... Hum Hum)
Mais le code que je dois y placer est bien ?:

private sub userform2_activate
doevents
call "macro de test de changement d'état" ...... 'Mais qu'elle macro de test dois je saisir ici ?
unload Me
end sub

Est ce que la 1ère partie du code est bien placée ?

Merci
Zouzou
 

Zouzou93

XLDnaute Occasionnel
Re : Patienter pendant l'utilisation d'un classeur - SVP SVP - MERCI

Re-Bonjour,

Je n'avance pas ... J'ai vraiment tout essayé avec l'aide de Jigagneur. Et Ca ne fonctionne pas.
S'il n'est pas possible de mettre en attente (Suspendre) une macro en cours d'exécution le temps que le second classeur Archives demandé soit à nouveau dispo (Si en déjà utilisé)
Comme expliqué ce classeur Archives n'est utilisé que 30 secondes voir 1 Min maxi .... Le temps de l'ouverture - de la copie de certaines données d'être sauvegardé et refermé.
ou bien y-t-il possibilité de créer un fichier tampon par exemple ? l
J'ai aussi pensé à dupliquer le fichier si le classeur original était déjà utilisé mais il me faudrait mettre en place une condition que je ne sais pas faire.

SVP SVP SVP .... Merci de votre aide
Zouzou
 

skoobi

XLDnaute Barbatruc
Re : Patienter pendant l'utilisation d'un classeur

Bonsoir jigagneur, Zouzou93,

Tout d'abord, il faut que le nom de l'USF correspond à celui se trouvant dans la macro:
If Workbooks("Archives").ReadOnly = True Then
Animation.Show
End If

Ensuite, ci-joint un exemple d'attente avant poursuite d'une macro.
 

Pièces jointes

  • fichier ouvert patienter.zip
    10.8 KB · Affichages: 100

Zouzou93

XLDnaute Occasionnel
Re : Patienter pendant l'utilisation d'un classeur

Snif Snif Skoobi .... J'ai essayé d'appliquer tes codes et le débogueur me répète ce même message : "Un document Archives est déjà ouvert ....." et me surligne
workbooks.Open ("\\Mrssfp01\CEVAFrance\documents\Outils\COTATEUR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls")

Peux tu me confirmer dans quelle mesure j'ai bien rentré les codes au bon endroit ?

workbooks.Open ("\\Mrssfp01\CEVAFrance\documents\Outils\COTATEUR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls")
If workbooks("Archives").ReadOnly = True Then
Animation.Show
End If
Application.ScreenUpdating = False
Windows("COTATION.xls").Activate
Range("C15:E15").Select
Selection.Font.ColorIndex = 0
Range("I1").Select
Range("B10").Select
Selection.Copy
Windows("ARCHIVES.XLS").Activate
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False

.../...

ThisWorkbook.Save
ActiveWorkbook.SaveAs filename:= _
"\\Mrssfp01\CEVAFrance\documents\Outils\COTATEUR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close (False)
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

J'ai ensuite saisie ces codes dans mon UF nommé Animation

Do
Label1.Caption = Round(Timer - début) & " s"
DoEvents
If Not IsFileOpen("\\Mrssfp01\CAVAFrance\documents\Outils\COTATEUR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls") Then
Exit Do
End If
Loop
Unload Me
End Sub
Function IsFileOpen(filename As String)
' La Fonction ==================================== :
' Merci a Excellabo.com pour cette fonction. Liée à la macro
' elle permet la vérification de fichier déjà ouvert
' Frédéric Sigonneau, El-Joker, Thierry Rural, (N°701)


Dim filenum As Integer, errnum As Integer

On Error Resume Next
filenum = FreeFile()
Open filename For Input Lock Read As #filenum
Close filenum
errnum = Err
On Error GoTo 0
Select Case errnum
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
Error errnum
End Select
End Function


Est ce bien comme cela qu'il fallait faire ?

Merci de ton aide.

Zouzou
 

skoobi

XLDnaute Barbatruc
Re : Patienter pendant l'utilisation d'un classeur

Re bonjour,

une petite erreur, tu demande à ouvrir le fichier avant de savoir s'il est déjà ouvert.

fais les modifications suivantes (en rouge à enlever, en bleu à déplacer):


If workbooks("Archives").ReadOnly = True Then
Animation.Show
End If
workbooks.Open ("\\Mrssfp01\CEVAFrance\documents\Outils\COTATE UR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls")
Application.ScreenUpdating = False
Windows("COTATION.xls").Activate
Range("C15:E15").Select
.......
......

Test et dis nous.

Edit:
Tu as oublié ceci au début du code de l'USF

Private Sub UserForm_Activate()
début = Timer
Do
Label1.Caption = Round(Timer - début) & " s"
.......
........
..........
 
Dernière édition:

Zouzou93

XLDnaute Occasionnel
Re : Patienter pendant l'utilisation d'un classeur

Désolée Skoobi .... Je viens de procéder aux modifications mais le message d'attente reste figé dans tous les cas et rien ne se passe: Même si le classeur archives n'est pas utilisé. Il ne s'ouvre qu'à partir du moment où je "shoote-Force" l'UF pour ressortir ....

Est ce que je ne dois pas aussi placer ce code quelque part ?
If workbooks("Archives").ReadOnly = True Then
.../...
End If

Merci
Zouzou
 

skoobi

XLDnaute Barbatruc
Re : Patienter pendant l'utilisation d'un classeur

Re,

Est ce que je ne dois pas aussi placer ce code quelque part ?
If workbooks("Archives").ReadOnly = True Then
.../...
End If
Je ne pense pas car celà implique que tu as déjà ouvert le fichier pour faire cette vérification or tu ne veux l'ouvrir que lorsqu'il a été fermé par l'autre utilisateur c'est bien ça?

As-tu remarqué que tu n'a pas le même chemin entre:
" workbooks.Open ("\\Mrssfp01\CEVAFrance\documents\Outils\COTATE UR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls")"
et
" If Not IsFileOpen("\\Mrssfp01\CAVAFrance\documents\Outils(espace ici)\COTATEUR CEVA AIR EXPORT\ENREGISTREMENT\Archives.xls")......
 

Zouzou93

XLDnaute Occasionnel
Re : Patienter pendant l'utilisation d'un classeur

Skoobi .... Désolée de d'importuner encore. Mais même avec la correction j'ai tjrs le même problème.
Je ne comprends pas.
Merci de ton aide car ce code me permettrait de m'enlever une grosse épine du pied.

RE RE Merci
Zouzou
 

skoobi

XLDnaute Barbatruc
Re : Patienter pendant l'utilisation d'un classeur

Là je ne vois pas trop....
J'ai fais les tests sur mon PC, çà marche, je sais ça ne t'aide pas plus mais alors je me demande si celà marche aussi pour un réseau d'entreprise...
Je test à mon bureau et te dirai, à suivre.....
 

Zouzou93

XLDnaute Occasionnel
Patienter pendant l'utilisation d'un classeur - SVP SVP - MERCI

Bonjour le Forum,

Désolée de revenir à la charge mais j'ai de nouveaux re-parcouru tout ce qui existe en matière de classeurs déjà ouverts ....et je n'arrive décidement pas à appliquer les codes proposés sur le site.

Peux-être ai-je mal formulé ma demande ?

Dans le doute et si cela pouvait aider à mieux cerner ma demande alors je m'explique.

J'ai une macro Enregistre () dans un classeur nommé COTATION situé dans un serveur Réseau dans laquelle grâce à l'aide de nombreux XLNautes impliqués notamment j'ai fait succeder plusieurs actions :

1. Créer un numéro de Cotation automatique
2. Je sauvegarde le classeur Cotation (Car en réseau l'incrémentation automatique ne fonctionne pas .... Je veux dire qu'il ne conserve pas le dernier numéro obtenu pour créer l'Offre créee ci dessous et encoyée au client ...)
2. La macro copie la Feuille Offre de ce classeur COTATION
3. Nomme ce nouveau classeur par le numéro de cotation
4. Ouvre une application Outlook pour envoi le mail au client
..............
Jusque la tout va bien ...Ensuite
5. Je fais ouvrir un classeur nommé ARCHIVES basé aussi sur ce même serveur Réseau afin de recopier certaines données du classeur COTATION- Feuille OFFRE.
7. Une fois les données recopiées le classeur ARCHIVES est saugevardé puis refermé automatiquement.

Mon problème est que tant que le classeur ARCHIVES n'est pas utilisé par un autre USER tout fonctionne .... Hors lorsque ce fichier est déjà est cours d'éxécution - ouvert sur un autre poste je voudrais pouvoir mettre un message d'attente qui permet de patienter et de poursuivre l'éxécution de ma macro dés que le classeur ARCHIVES est disponible.

J'ai lu pas de choses à ce sujets ces derniers jours et dieux sait qu'il y a une mine d'informations sur ce site mais ma connaissance en VBA me limite ...

Merci à celle ou celui qui saura m'aider.

Merci Merci Merci
Zouzou
 

skoobi

XLDnaute Barbatruc
Re : Patienter pendant l'utilisation d'un classeur

Re bonsoir Zouzou93,

J'ai testé le fichier que je t'ai envoyé au travail c'est à dire que lorsque j'ouvre un fichier du réseau (sur mon poste je précise) et que je lance la macro, le message apparaît. Puis j'arrête la macro (Ctrl+Pause) pour pouvoir fermer le fichier. Si je relance la macro, le message bien sur n'apparait pas. Je précise que j'ai fais celà sur le même PC.
Essaye de faire pareil.
Si ça marche, c'est que cette macro ne peut détecter l'ouverture d'un fichier depuis un autre PC ou alors que la fermeture du fichier n'est pas détecté ?!?!?
 

Discussions similaires

Statistiques des forums

Discussions
312 509
Messages
2 089 145
Membres
104 050
dernier inscrit
Pepito93100