conflits d'enregistrement avec 2 formulaires vers un autre fichier

armelle1303

XLDnaute Junior
bonjour

j'ai un problème de priorités, de conflits ... en plus clair

j'ai deux formulaires (avec le même contenu mais des noms différents) qui sont utilisés par 2 personnes différentes. Ces 2 formulaires alimentent le même fichier excel.
les données s'enregistrent lignes par lignes avec un numéro de fiche qui s'incrémente . J'ai mis une condition dans ma macro qui vérifie que le numéro n'est pas déja utilisé sinon cela ajoute 1.
le problème est apparent que lorsque les 2 personnes valide le formulaire quasiment en même temps cela provoque un conflit, demande si on veut enregsitrer le fichier et peut être enregistre avec des mauvais numéros.

Bref, je souhaiterai faire une macro qui vérifie si on est déja en train de travailler dans le fichier base de données (enregistrement des données du form1) et si oui met en attente les infos du form 2 pour ensuite rouvrir la BDD et les stocker.

donc voilà j'aurai besoin d'un bout de code
Merci pour votre aide
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : conflits d'enregistrement avec 2 formulaires vers un autre fichier

Bonsoir Armell,
Voici une façon de faire en utilisant un fichier externe
avec cette macro un fichier .txt est crée s'il n'existe pas.
il est incrémenté chaque fois....
copie ce code dans un classeur deja enregistré sur ton disque dur
fait des essais ...si cela conviens pas efface alors le fichier crée
dans le mm répertoire "N°fiche.txt" celui-ci est modifiable avec le blocnote

Code:
Dim nf As Integer, chemin As String
chemin = ThisWorkbook.Path
canal = FreeFile
On Error Resume Next
Open chemin & "\N°fiche.txt" For Input As #canal
Input #canal, nf
Close #canal
nf = nf + 1
Open chemin & "\N°fiche.txt" For Output As #canal
Print #canal, nf
Close #canal
MsgBox nf
 

armelle1303

XLDnaute Junior
Re : conflits d'enregistrement avec 2 formulaires vers un autre fichier

bonjour youky
merci pour ta réponse.
cela crée bien un fichier txt.


mais je me suis aperçue que je n'avais pas pris la bonne solution (copier les données dans un fichier d'attente) car après je devais lui dire que dès que mon fichier était fermé, j'aille rechercher les valeurs dans le txt , ouvrir le classeur et les copier.

j'ai pris une autre piste :
quand j'appuie sur le btnOK de mon form, il teste si la base est ouverte si ouui, affiche une msgbox qui me propose de ressayer et teste à nouveau. ainsi tant que la base est ouverte (quelqu'un d'autre y travaille) je ne pourrais pas la mettre à jour.
pour améliorer je pourrais mettre une tempo avant de relancer le test ; je vais essayer de trouver comment on fait.

Voici le code que j'ai utlisé :


Dim lWorkbook As Workbook
Dim lFound As Boolean

1: lFound = False
For Each lWorkbook In Workbooks
If lWorkbook.Name = "BDDRC.xls" Then
lFound = True
retour = MsgBox("la base est déja ouverte. Cliquez sur le bouton Ok pour réessayer!", vbOKOnly)
If retour = vbOK Then
GoTo 1:
End If
Exit For
End If
Next



en revanche si tu as le temps de me donner quelques précisions sur ton code, car je n'ai pas bien compris tout ce que cela faisait. par ex :
FreeFile ?
For Input As #canal ? pour entrer des données? mais #canal ?
Input #canal, nf?
Close #canal?


et merci encore.
si tu as des commentaires sur mon code, je prends

autre question pratique : comment fais tu pour mettre en cadre le code concerné , je trouve cette présentation plus lisible
 

youky(BJ)

XLDnaute Barbatruc
Re : conflits d'enregistrement avec 2 formulaires vers un autre fichier

Re,
voici un fichier
ma macro tente d'activer le fichier en gérant l'erreur
Si error donc fichier libre sinon application.ontime rentre en jeu
et te reteste toutes les 15 secondes (tu peux toujours Annuler)
Mets ce fichier dans le même répertoire que le fichier source.

Pour canal c'est une variable qui indique le N°de canal pour ouvrir le fichier
je laisse l'ordi gèrer cela mais il faut lui signifier.
A+
 

Pièces jointes

  • Atest.xls
    31.5 KB · Affichages: 60
  • Atest.xls
    31.5 KB · Affichages: 60
  • Atest.xls
    31.5 KB · Affichages: 60

youky(BJ)

XLDnaute Barbatruc
Re : conflits d'enregistrement avec 2 formulaires vers un autre fichier

re
encore un truc
Dans la macro pour ne pas voir affiché le classeur source remplace
cette ligne
'Workbooks("BDDRC.xls").Activate ' "BDDRC.xls"
par celle-ci
rep = Workbooks("BDDRC.xls").Feuil1.[A1] ' "BDDRC.xls"

pour en revenir à canal
la fonction FreeFile donne un numéro de fichier encore non utilisé.

le signe # ...indique et se dit canal mais il faut aussi un N°
on peux mettre #1 si le canal 1 est libre
Freefile est le N° du 1er canal libre souvent le 1
essai...
MsgBox FreeFile

ton code fait une boucle sur tout les classeurs ouvert, moi je vais direct au fichier en gérant l'error. A toi de choisir
 

Discussions similaires

Statistiques des forums

Discussions
312 793
Messages
2 092 156
Membres
105 241
dernier inscrit
Mixlsm