Si classeur deja ouvert activer un timer ou une pose

[Résolu/Fermé]
Signaler
-
Messages postés
16039
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 octobre 2021
-
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

Messages postés
16039
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 octobre 2021
1 548
Bonjour,

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

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

A+
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.
Messages postés
16039
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 octobre 2021
1 548
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+
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?
Messages postés
16039
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 octobre 2021
1 548
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/
je ne peux pas mettre le classeur car confidentiel alors je vais mettre le code
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
Messages postés
16039
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 octobre 2021
1 548
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.
je comprend mais je ne sais pas l'insérer dans mon code je ne comprend pas et excel me mets une erreur sur IsFileOpen.
pour ce qui est des utilisateurs ils ne l'utilise pas en même temps heureusement mais si deux personnes l'utilise en même temps je veux faire une pose dans ma macro
je peux pas expliquer mieux mon cas car c'est:
si classeur ouvert faire une pose sinon continuer et si dans le cas ou il y a la pose ouvrir le classeur a la fin de la pose et si encore ouvert refaire une pose une sorte de boucle
j'ai trouver une solution:
Sub classouvert()
Dim i As Integer
Dim Ton As String
Ton = "C:\Users\Propriétaire\Desktop\Turbo+Test\BDT+.xls"
For i = Workbooks.Count To 1 Step -1
If Workbooks(i).Name = "BDT+.xls" Then
Application.Wait Time + TimeSerial(0, 0, 5)
Else
Exit Sub

End If
Next i
End Sub

et juste avant d'ouvrir mon classeur ( set Set Wb = Workbooks.Open("C:\Users\Propriétaire\Desktop\Turbo+Test\BDT+.xls")

je mets call classouvert

ca fonctionne
Messages postés
16039
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 octobre 2021
1 548
Re,

Oui, si le classeur est ouvert sur le PC ou vous etes, mais si c'est un utilisateur sur un autre PC non.

Ton = "C:\Users\Propriétaire\Desktop\Turbo+Test\BDT+.xls" Ce n'est pas un fichier qui se trouve sur un PC en reseau, c'est un fichier en local

pour info mes fichiers excel sont sur un reseau d'entreprise et mon système est utiliser sur une 100 de Pc C'est bien vous qui l'avez ecrit!!!!!!!!
oui mais la je suis chez moi pour tester le code le chemin est différent dans mon entreprise quand un utilisateur a un classeur ouvert et que l'on veux bosser sur le même classeur il y a le message voulez vous ouvrir ce classeur en lecture seule,
pensez vous que ce code ne marchera pas en reseau?
Messages postés
16039
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 octobre 2021
1 548
Re,

voulez vous ouvrir ce classeur en lecture seule, Pas possibilite de modifcation et pas vraiment transparent

oui mais la je suis chez moi pour tester le code le chemin est différent La methode est la meme, le code que je vous ai donne fonctionne a merveille.