therealmitch
Messages postés14Date d'inscriptionmardi 30 septembre 2008StatutMembreDernière intervention 5 janvier 2009
-
17 déc. 2008 à 17:15
therealmitch
Messages postés14Date d'inscriptionmardi 30 septembre 2008StatutMembreDernière intervention 5 janvier 2009
-
5 janv. 2009 à 11:28
Bonjour les p'tits loups.
Je viens vous voir pour un problème d'Excel, n'hésitez pas à rediriger si je suis pas dans le bon topic.
première étape (pas trop compliquée) : Je voudrais (pour le boulot) créer un formulaire Excel dans lequel une cellule contenant le numéro s'incrémente à chaque impression du document.
Deuxième étape (un peu plus cossue) : je voudrais que si les utilisateurs se créént des copies de ce fichier sur leur disque dur, mon fichier ne donne pas le même numéro à deux impressionx. pour ce faire j'ai penser que je pourrai mettre un .txt sur le serveur qui donnerai le numéro à chaque fichier imprimé, et enregistrerai le nom de la personne qui à fait l'impression, la date, l'heure et le numéro attribué.
A vos cerveaux et un grand merci d'avance.
Geo
A voir également:
Quel est le système le plus classique de numérotation des versions ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 17 déc. 2008 à 19:45
Salut
Première étape :
Facile si l'impression passe par une de tes macros, parce sinon, intercepter la commande "Fichier, Imprimer", ce n'est peut-être pas du gâteau.
Deuxième étape :
Oui, ta solution de fichier peut fonctionner.
Ce n'est qu'une gestion de fichier texte.
Il y a des tas d'exemples de lecture écriture de fichiers sur le site.
Il te suffit :
Solution 1
- d'ouvrir le fichier unique, en lecture (Open en mode Read)
- lire le chiffre (Line Input)
- l'incrémenter
- refermer le fichier (Close)
- réouvrir le fichier en mode écriture (Open en mode Write)
- écrire le chiffre (Print)
- refermer le fichier (Close)
Solution 2
- d'ouvrir le fichier unique, en lecture et écriture (Open en mode Binary)
- lire le chiffre (formatté en entier long (4 octets)) : Get
- l'incrémenter
- repositionner le 'curseur' en début de fichier (Seek)
- écrire le chiffre (Put)
- refermer le fichier (Close)
Ne pas le laisser ouvert trop longtemps sinon tu pourrais avoir (et tu auras certainement) un aléat si 2 postes veulent accéder au même fichier en même temps --> Gérer l'erreur et refaire un nouvel essai après 1 ou 2 secondes.
Une fois que tu as le chiffre, tu ouvres un second fichier dans lequel tu stockeras les données (non, date, heure ...)
Là aussi, fichier unique que tu ouvriras en mode Append afin d'être positionné de suite à la fin du fichier pour y ajouter ta ligne.
Si tu n'avais pas eu besoin de consigner les noms, dates ..., tu pourrais te suffire d'un compteur local, par poste.
L'identification unique de l'impression pouvant être faite par 'nom de la machine' (ou adresse IP) suivi de ce numéro.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
therealmitch
Messages postés14Date d'inscriptionmardi 30 septembre 2008StatutMembreDernière intervention 5 janvier 2009 18 déc. 2008 à 14:20
D'abord merci beaucoup de t'intéresser à mon problème.
avec tes conseils, j'ai réussi à faire ça.
ede contient le numéro du document
nouveau contient le numéro à lire, incrémenter et reporter sur nouveau.
tu remarquera que je suis une brèle en VB car ma macro est "sale" mais ca marche, le numéro s'incrémente et se reporte sur le doc de destination quand je click sur un bouton auquel je l'ai affecté.
maintenant je voudrai que cette macro fonctionne quelque soit le nom du fichier nouveau, j'imagine qu'il faut qu'elle commence par Dimqqchose as workbook mais j'en sais pas plus.
ensuite je voudrai que cette macro se déclenche à chaque impression. il faut donc quelquechose du genre
Private Sub Workbook_BeforePrint(Cancel As Boolean)
mamacro
end sub
mais encore une fois je n'en sais pas plus
ci-dessous ma macro. encore merci pour ton aide
Sub Macro3()
'
Workbooks.Open Filename:= _
"C:\Documents and Settings\ggrave\Bureau\Nouveau Feuille de calcul Microsoft Excel.xls"
casefin = Range("A1").End(xlDown).Address
Range(casefin).Select
Selection.Copy
Windows("ede.xls").Activate
Range("H2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
Windows("Nouveau Feuille de calcul Microsoft Excel.xls").Activate
Dim nb As Integer
nb = ActiveCell
'Selectionne la cellule directement en dessous
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell = nb + 1
ActiveWorkbook.Save
ActiveWorkbook.Close
Windows("ede.xls").Activate
End Sub
therealmitch
Messages postés14Date d'inscriptionmardi 30 septembre 2008StatutMembreDernière intervention 5 janvier 2009 18 déc. 2008 à 17:27
ok pour la date et l'heure j'ai rajouté
ActiveCell.Offset(0, 1).Select
ActiveCell = Now
Il me reste deux choses à solutionnée :
- lancer l'incrémentation uniquement à la confirmation de l'impression.
- que la macro fonctionne encore si le nom du fichier qui la contient change.
désolé pour les multi post, je trouve pas de fonction éditer.