Si classeur deja ouvert activer un timer ou une pose

Résolu/Fermé
pascal - 19 janv. 2013 à 01:11
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 19 janv. 2013 à 18:15
Bonjour,
je vous sollicite car j'aimerai activer un timer ou une pose si mon classeur base de donnée est ouvert,

je m'explique:

j'ai un userform, qui après être rempli, au moment de valider ouvre un classeur "BDT+.xls" pour y coller les valeurs , mais cet userforme peut être utiliser par plusieurs personnes a la fois pour éviter tout beug 'aimerai qu'un timer s'enclenche ou une pose se fasse dans la macro ( exemple 5 secondes) si le classeur "bdt+xls" est ouvert.

car dans se classeur après avoir valider l'userform, les données se copient en feuille1 puis un classeur "BDT+cop.xls" s'ouvre pour y copier les nouvelles données saisies puis "BDT+cop.xls" se ferme ensuite je change de feuille pour imprimer un formulaire, ce qui prend environ 3 a 4 secondes .
Donc comme vous l'avez compris une autre personne peut valider c'est propre saisie pendant les 3 ou 4 secondes est ma macro ne fonctionnera pas car le classeur "BDT+.xls" sera ouvert, (plus de 200 personnes utilise mon userform)

si quelqu'un peut m'aider j'en serais ravi car mes limites en programmation ne me permettent pas de resoudre mon probleme.

merci d'avance
Pascal


3 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
Modifié par f894009 le 19/01/2013 à 09:09
Bonjour,

utiliser par plusieurs personnes a la fois Plusieurs PC?????

je change de feuille pour imprimer un formulaire,Peut se faire par VBA????

A+
0
bonjour f894009
formulaire est le nom que j ai donné à ma feuille 2,
ma macro marche très bien , j aimerai y rajouter une pose ou un timer si mon classeur
qui réceptionne les données est ouvert, car comme je l ai expliquer quand il est utilisé c'est 3 à 4 secondes puis fermer aussitôt.
0
mon système est utiliser sur une 100 de Pc, j explique mon système sur un classeur j ai une sorte d accueil avec des boutons commandes dont un qui permet d ouvrir l userform qui rempli le classeur "BDT+.xsl" , c est seulement ce classeur accueil que les gens on en visuel.
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
19 janv. 2013 à 11:03
Re,
j'ai un userform, dans un fichier par PC ou fichier partage???
"BDT+.xls"fichier unique partage?? vous sert de base de donnee??
"BDT+cop.xls"vous sert a.....??
je change de feuille pour imprimer un formulaire, les donnees viennent d'ou??

A+
0
re
j'ai decris seulement le pourquoi j'ai besoin d'une pose ou d'un timer en expliquant ma façon de fonctionner
les classeurs ne sont pas en partage d'ou le classeur "BDT+cop.xls" qui vient récupérer les nouvelles donnée rempli dans le classeur "BDT+.Xls" a chaque nouvelle validation de mon userform, mais mon probleme n'est pas la.
je souhaiterai si classeur " BDT+xls" deja ouvert lors de l'exécution de ma macro une pose ou qu'un timer s'enclencha pour laisser le temps au classeur "BDT+;xls" de se fermer, et que ma macro reprenne au moment ou j'ouvre le classeur BDT+.xls" car comme j'ai expliqué a chaque fois il ne s'ouvre 3 a 4 secondes pour exécuter ce que ma macro demande.

ou puis je mettre mon code pour une meilleure compréhension?
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
19 janv. 2013 à 12:13
Re,
j'ai decris seulement le pourquoi j'ai besoin d'une pose ou d'un timer en expliquant ma façon de fonctionner Est-ce la meilleure?? C'est pour cela que je pose ces questions. Maintenant si vous voulez absolument faire fonctionner ce que vous avez fait: click sur ce lien pour mettre a dipso https://www.cjoint.com/
0
voici mon code et mon souhait est en Gras. pour info mes fichiers excel sont sur un reseau d'entreprise voila pourquoi je ne fais pas de partage.


Dim Wb As Workbook
Dim WB1 As Workbook
Dim Ws As Worksheet
Dim WS1 As Worksheet
Dim NumLigneVide As Integer


If TextSection.Text = "" Then
MsgBox "renseignez Votre Section EX (T6000)", vbInformation, "champs obligatoire"
TextSection.SetFocus

ElseIf CboMoteur.Text = "" Then
MsgBox "renseignez le Moteur a l'aide du menu déroulant", vbInformation, "champs obligatoire"
CboMoteur.SetFocus



Else

'set WB= Worbook. etc est l'ouverture de mon classeur oui je copie mes donnée de l'userform,
' c'est la ou je voudrais mettre un timer ou une pose oui une boucle si le classeur "BDT+.xls" est ouvert
' et que des qu'il est fermer la macro l'ouvre et s'execute jusqu'a la fin
'( pour info lors de l'impression plus pas se sont des formule qui recupere les nouvelle donnees de la feuille1 de
'mon "BDT+.xls" pour les remplir dans mon "formulaire" Feuille 2

Set Wb = Workbooks.Open("C:\Users\Propriétaire\Desktop\Turbo+Test\BDT+.xls")



Worksheets("T+general").Activate
'on choisi la ligne vide puis le n° de ligne
Range("B65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
NumLigneVide = ActiveSheet.Columns(2).Find("").Row

'on remplit les données dans le tableau
ActiveSheet.Cells(NumLigneVide, 2) = TextItem.Text
ActiveSheet.Cells(NumLigneVide, 3) = CboMoteur.Text
ActiveSheet.Cells(NumLigneVide, 4) = TextRef.Text
ActiveSheet.Cells(NumLigneVide, 5) = TextNumSerie.Text
ActiveSheet.Cells(NumLigneVide, 6) = TextOrdre.Text
ActiveSheet.Cells(NumLigneVide, 7) = TextSection.Text
ActiveSheet.Cells(NumLigneVide, 8) = CboAnomalie.Text
ActiveSheet.Cells(NumLigneVide, 9) = TextEcart.Text
ActiveSheet.Cells(NumLigneVide, 10) = CboNligne.Text
ActiveSheet.Cells(NumLigneVide, 11) = CboNom.Text
ActiveSheet.Cells(NumLigneVide, 12) = Textdate.Text
ActiveSheet.Cells(NumLigneVide, 19) = CboMS7.Text

' couleur de la ligne
Range("a" & (ActiveCell.Row)).Select
Range("a" & (ActiveCell.Row), "l" & (ActiveCell.Row)).Select
Selection.Interior.ColorIndex = 48
'on efface le formulaire et curseur au debut

TextItem.Text = ""
CboMoteur.Text = ""
TextRef.Text = ""
TextNumSerie.Text = ""
TextEcart.Text = ""
TextOrdre.Text = ""
TextSection.Text = ""
CboNligne.Text = ""
CboNom.Text = ""
CboAnomalie.Text = ""
CboMS7.Text = ""


'on cache la fenetre
frmnouvelle1.Hide

Set WB1 = Workbooks.Open("C:\Users\Propriétaire\Desktop\Turbo+Test\BDT+Cop.xls")
Set WS1 = WB1.Worksheets(1)

Workbooks("BDT+Cop.xls.xls").Sheets(1).Range("b4:l10000") = Workbooks("BDT+Cop.xls").Sheets(1).Range("b4:l10000").Value
Workbooks("BDT+Cop.xls").Save
Workbooks("BDT+Cop.xls").Close True

' impression feuille impression
ActiveCell.Offset(0, -1).Select
Selection.Copy
Sheets("impression").Select
Range("I3").Select
ActiveSheet.Paste
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("T+General").Select


'on ferme le classeur
Workbooks("BDT+.xls").Close True

End If
End Sub
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
19 janv. 2013 à 14:31
Re,

Recuperez le code sur ce site et adaptez le a votre fichier:

https://support.microsoft.com/fr-fr/help/291295

Faites des essais pour confirmer que cela fonctionne avec un fichier ouvert sur un répertoire partage. Rendez compte.
0
merci mais cela ne répond pas a mon probleme, je connais cette méthode moi je veux un arret de la macro si le classeur est ouvert et non un message, je veux que cela reste transparent pour l'utilisateur.
je veux
si classeur "BDT+.xls" ouvert entendre X secondes et retenter l'ouverture .
sinon ouvrir classeur "BDT+.xls
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
19 janv. 2013 à 16:16
Re,
merci mais cela ne répond pas a mon probleme, je connais cette méthode moi je veux un arret Etes-vous sur de connaitre, parce que c'est en partant de cette methode que vous pourrez faire une "pause" a votre programme en ajoutant l'utilisation de Application.OnTime (voir aide excel). A vous de jouer.
0
alors je l'ai mal comprise et je ne sais pas l'appliquer,
il est pas possible de faire tout simplement:
if classeur"BDT+.xls" ouvert Then
Application.Wait Time + TimeSerial(0, 0, 5)
else
exit sub
end if
0
merci a vous en tout cas d'avoir pris le temps de me trouver une solution
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
19 janv. 2013 à 16:48
Re,

if classeur"BDT+.xls" ouvert c'est le code que je vous ai propose. Vous devez tester que votre fichier n'est pas ouvert par un autre utilisateur ,
pour info mes fichiers excel sont sur un reseau d'entreprise et mon système est utiliser sur une 100 de Pc ca en fait des utilisateurs simultanes
0