vba : faire une feuille de saisie "collaborative" qui n'écrase pas la saisie du copain précédent ...
Le
Alfred WALLACE
Bonsoir les gurus,
j'ai une feuille de saisie (excel 2007) qui doit être remplie
par plusieurs personnes. le fichier est enregistré dans un répertoire
d'un réseau local.
heu "normalement" (quoique) c'est la dernière personne
qui enregistre le fichier qui "à raison", en écrasant éventuellement
la saisie d'autre personnes
Je crois savoir qu'une gestion d'accès concurrents existe, mais
de mémoire, cela génère des fichiers excel très gros (ce qui est pe=
ut
être
normal).
j'aimerai expérimenter (grâce à votre aide) une autre méthode.
supposons :
PIERRE doit remplir les cellules de G10 à G15
ISABELLE " " " " G16 à G17
LUCIEN - G18 à G20.
j'imagine que, lorsque Pierre saisi quelque chose en G10, puis G11,
etc . une macro
irait écrire un fichier excel nommé (par exemple pierrejanvier.xls)
De la même façon, Isabelle aurait son fichier isabellejanvier.xls, et
lucienjanvier.xls.
la feuille principale feuille.xls, ne serait à aucun moment
enregistrée ! et, par contre
à l'ouverture de cette feuille, les valeurs des cellules
correspondantes seraient affichées
purement et simplement dans feuille.xls (et on n'affiche rien si les
feuilles secondaires n'existent pas).
Est-ce que, avec un petit exemple, un guru pourrait me montrer comment
lorsque dans la feuille.xls on saisie une valeur dans G10, la plage
[G10:G15] est
enregistrée dans le fichier secondaire ?
Au delà de la "pratique", je suis preneur des suggestions éclairées
de tous !
Merci
José
j'ai une feuille de saisie (excel 2007) qui doit être remplie
par plusieurs personnes. le fichier est enregistré dans un répertoire
d'un réseau local.
heu "normalement" (quoique) c'est la dernière personne
qui enregistre le fichier qui "à raison", en écrasant éventuellement
la saisie d'autre personnes
Je crois savoir qu'une gestion d'accès concurrents existe, mais
de mémoire, cela génère des fichiers excel très gros (ce qui est pe=
ut
être
normal).
j'aimerai expérimenter (grâce à votre aide) une autre méthode.
supposons :
PIERRE doit remplir les cellules de G10 à G15
ISABELLE " " " " G16 à G17
LUCIEN - G18 à G20.
j'imagine que, lorsque Pierre saisi quelque chose en G10, puis G11,
etc . une macro
irait écrire un fichier excel nommé (par exemple pierrejanvier.xls)
De la même façon, Isabelle aurait son fichier isabellejanvier.xls, et
lucienjanvier.xls.
la feuille principale feuille.xls, ne serait à aucun moment
enregistrée ! et, par contre
à l'ouverture de cette feuille, les valeurs des cellules
correspondantes seraient affichées
purement et simplement dans feuille.xls (et on n'affiche rien si les
feuilles secondaires n'existent pas).
Est-ce que, avec un petit exemple, un guru pourrait me montrer comment
lorsque dans la feuille.xls on saisie une valeur dans G10, la plage
[G10:G15] est
enregistrée dans le fichier secondaire ?
Au delà de la "pratique", je suis preneur des suggestions éclairées
de tous !
Merci
José

Poser une question


Supposons que les 3 personnes ouvrent le fichier en même temps,
chacun remplit la section des données comme il se doit...
le hic, seules les données de celui qui fermera le fichier en dernier seront enregistrées.
Tu pourrais créer 3 fichiers (1 pour chacun) et un fichier de consolidation ayant une petite macro
qui se chargerait de mettre tout à jour à chaque ouverture.
Une autre alternative est une macro qui indique aux personnes subséquentes que le fichier est déjà
ouvert par quelqu'un d'autre et qu'il est par conséquent non disponible pour le moment.
Voici un bout de code à partir duquel tu pourrais travailler. Perso, je ne l'ai jamais testé.
Écris par Michel Rameaux la proposition originale de Sigonneau et Cie
'---------------------------------------------------------------
Sub DémoOuvrirFichier()
Dim Chemin As String, Chemin2 As String
Dim Fichier As String
' Classeur nécessaire :
Chemin = _
Workbooks("Gestion.xls").Worksheets("Données").Range("A1").Value
Chemin2 = "Suivi"
Fichier = "Données.xls"
'Test de l'existence du fichier et son chemin
Call ExisteFichier(Chemin, Chemin2, Fichier)
If Trouvé = False Then
Call FichierAbsent
'Le Fichier n'existe pas :
'traitement de l 'erreur
GoTo FichierAbsent
Exit Sub
End If
'Test d'Ouverture du classeur
Call OuvrirFichier(Chemin, Chemin2, Fichier)
'Traitement
If Occupé = True Then
GoTo FichierUtilisé ' Traitement de l'erreur
Exit Sub
Else
If OuvertLocal = True Then
MsgBox "Tout va bien, mais le fichier " & _
"est ouvert localement"
Exit Sub
Else
MsgBox "Tout va bien. On ouvre le fichier"
End If
End If
Exit Sub
FichierAbsent:
' Placer ici le code
MsgBox "Le fichier n'existe pas"
Exit Sub
FichierUtilisé:
' Placer ici le code
MsgBox "Le fichier n'est pas disponible"
End Sub
'---------------------------------------------------------------
Private Function ExisteFichier(Chemin, Chemin2, Fichier) As Boolean
If Dir(Chemin & "" & Chemin2 & "" & Fichier) = "" Then
' Le Fichier n'existe pas
Trouvé = False
Mess = MsgBox("Le dossier - " & UCase(Fichier) & _
" n'existe pas ou a été déplacé." & vbCrLf & vbCrLf & _
"Impossible de continuer.", vbOKOnly, _
"Ouverture des dossiers")
Else
'Le Fichier existe
Trouvé = True
End If
End Function
'---------------------------------------------------------------
Private Function OuvrirFichier(Chemin, Chemin2, Fichier) As Boolean
Dim FileNum As Integer, ErrNum As Integer
' Le Fichier est-il déja disponible s
' sur le PC (en local)?
On Error Resume Next
Set W = Workbooks(Fichier)
If Err = 0 Then
Debug.Print Err
'Fichier Ouvert en local
OuvertLocal = True
Exit Function
Else
'Err=9
Debug.Print Err
'Fichier non ouvert en local
OuvertLocal = False
End If
If OuvertLocal = False Then
'Le Fichier n'est pas ouvert localement,
'est-il disponible sur le réseau?
On Error Resume Next
FileNum = FreeFile()
Open (Chemin & "" & Chemin2 & "" & Fichier) _
For Input Lock Read As #FileNum
Close FileNum
ErrNum = Err
On Error GoTo 0
Select Case ErrNum
Case 0
'Fichier non utilisé
Occupé = False
Case 70
'Fichier utilisé
Occupé = True
Mess = MsgBox("Le dossier - " & UCase(Fichier) & _
"n'est pas disponible. Merci de renouveler " & _
"votre demande ultérieurement.", _
vbOKOnly, "Ouverture des dossiers")
Case Else
Error ErrNum
End Select
End If
End Function
'---------------------------------------------------------------
MichD
------------------------------------------
"Alfred WALLACE" a écrit dans le message de groupe de discussion :
Bonsoir les gurus,
j'ai une feuille de saisie (excel 2007) qui doit être remplie
par plusieurs personnes. le fichier est enregistré dans un répertoire
d'un réseau local.
heu ... "normalement" (quoique) c'est la dernière personne
qui enregistre le fichier qui "à raison", en écrasant éventuellement
la saisie d'autre personnes ...
Je crois savoir qu'une gestion d'accès concurrents existe, mais ...
de mémoire, cela génère des fichiers excel très gros (ce qui est peut
être
normal).
j'aimerai expérimenter (grâce à votre aide) une autre méthode.
supposons :
PIERRE doit remplir les cellules de G10 à G15
ISABELLE " " " " G16 à G17
LUCIEN ------------------------------------- G18 à G20.
j'imagine que, lorsque Pierre saisi quelque chose en G10, puis G11,
etc .... une macro
irait écrire un fichier excel nommé (par exemple pierrejanvier.xls)
De la même façon, Isabelle aurait son fichier isabellejanvier.xls, et
lucienjanvier.xls.
la feuille principale feuille.xls, ne serait à aucun moment
enregistrée ! et, par contre
à l'ouverture de cette feuille, les valeurs des cellules
correspondantes seraient affichées
purement et simplement dans feuille.xls (et on n'affiche rien si les
feuilles secondaires n'existent pas).
Est-ce que, avec un petit exemple, un guru pourrait me montrer comment
lorsque dans la feuille.xls on saisie une valeur dans G10, la plage
[G10:G15] est
enregistrée dans le fichier secondaire ?
Au delà de la "pratique", je suis preneur des suggestions éclairées
de tous !
Merci
José
je recherche plutôt la solution évoquée dans mon message
et dont tu reparles avec le "fichier de consolidation".
L'idée est d'ouvrir ce fichier de consolidation.
lorsque une personne saisie une valeur dans une cellule, la macro
va écrire dans la même cellule d'un AUTRE fichier particulier.
Chaque personne ayant une zone bien déterminée à remplir, rien
n'est écrasé puisque le fichier de consolidation **n'est pas**
enregistré.
c'est pas de la tarte ...
Merci !
José
On 8 fév, 19:06, "MichD"
Seules les données du dernier usager à la fermeture du fichier seront présentes
dans le classeur. Les données des deux autres auront été écrasées. En conséquence,
le fichier ne recevra que les données du dernier fichier! Non ?
Le principe, chaque usager à une copie différente du même fichier. Chacun remplit la section qui lui est assignée.
Dans le fichier de consolidation, tu crées une macro qui s'exécute au moment de l'ouverture du fichier (ou autre moment)
et qui est appelée par le Workbook_Open du ThisWorkbook. Cette macro a pour objet de ressembler les données des
3 autres fichiers...
MichD
------------------------------------------
"Alfred WALLACE" a écrit dans le message de groupe de discussion :
Bonjour MichD, et merci pour ce code !
je recherche plutôt la solution évoquée dans mon message
et dont tu reparles avec le "fichier de consolidation".
L'idée est d'ouvrir ce fichier de consolidation.
lorsque une personne saisie une valeur dans une cellule, la macro
va écrire dans la même cellule d'un AUTRE fichier particulier.
Chaque personne ayant une zone bien déterminée à remplir, rien
n'est écrasé puisque le fichier de consolidation **n'est pas**
enregistré.
c'est pas de la tarte ...
Merci !
José
On 8 fév, 19:06, "MichD"
ben, les 3 usagers ouvrent le fichier de consolidation.
l'usagé A n'a en charge que les cellules C20 à C25
l'usagé B n'a en charge que les cellules C26 à C28
l'usagé C n'a en charge que les cellules C29 à C30
imaginons que les 3 aient ouvert le fichier de consolidation.
A saisie les valeurs respectives, ainsi que B et que C.
aucun des usagés d'enregistre la feuille de consolidation.
la macro que j'essaye de faire, va "capter" la donnée saisie en C20,
puis
l'enregistrer dans le fichier excel POUR-A.XLS.
et idem pour les 2 autres.
De la sorte que, aucun ne va écraser la saisie du voisin puisque
les données respectives se trouvent dans des fichiers différents. Sauf
biensur si l'un d'eux s'amuse à aller "bidouiller" dans les cellules
qui ne le regardent pas.
voilà j'espère que c'est un peu plus "lisible" ...
merci encore
José
On 9 fév, 14:14, "MichD"
Quelle colonne pour chacun? À la suite des données déjà présentes ou toujours dans la même plage de cellules ?
Donne quelques indications...
MichD
------------------------------------------
"Alfred WALLACE" a écrit dans le message de groupe de discussion :
Hello !
ben, les 3 usagers ouvrent le fichier de consolidation.
l'usagé A n'a en charge que les cellules C20 à C25
l'usagé B n'a en charge que les cellules C26 à C28
l'usagé C n'a en charge que les cellules C29 à C30
imaginons que les 3 aient ouvert le fichier de consolidation.
A saisie les valeurs respectives, ainsi que B et que C.
aucun des usagés d'enregistre la feuille de consolidation.
la macro que j'essaye de faire, va "capter" la donnée saisie en C20,
puis
l'enregistrer dans le fichier excel POUR-A.XLS.
et idem pour les 2 autres.
De la sorte que, aucun ne va écraser la saisie du voisin puisque
les données respectives se trouvent dans des fichiers différents. Sauf
biensur si l'un d'eux s'amuse à aller "bidouiller" dans les cellules
qui ne le regardent pas.
voilà j'espère que c'est un peu plus "lisible" ...
merci encore
José
On 9 fév, 14:14, "MichD"