Numérotation automatique [Résolu]

therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 17 déc. 2008 à 17:15 - Dernière réponse : therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 17 déc. 2008 à 19:45
3
Merci
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)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_Jack
therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 18 déc. 2008 à 14:20
0
Merci
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
Commenter la réponse de therealmitch
therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 18 déc. 2008 à 14:50
0
Merci
j'ai réussi a la lancer à l'impression.

il fallait mettre
Private Sub Workbook_BeforePrint(Cancel As Boolean)
mamacro
end sub
dans thisworkbook et laisser la macro dans module.
Commenter la réponse de therealmitch
therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 18 déc. 2008 à 14:56
0
Merci
le problème c'est que le numéro s'incrémente même si j'annule l'impression.

sais tu comment restreindre la macro à une impression confirmée?

par contre j'oubli la consignation de la date et de l'heure, on fera juste le numéro.

encore merci
Commenter la réponse de therealmitch
therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 18 déc. 2008 à 17:27
0
Merci
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.

merci d'avance.
Commenter la réponse de therealmitch
therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 18 déc. 2008 à 17:37
0
Merci
Yes!!!!!!

Set nom = activeworkbook

ensuite faire nom.activate

bowdel!!!!

allez plus que l'histoire d'impression confirmée!!

eh bein 3h pour ça!
Commenter la réponse de therealmitch
therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 24 déc. 2008 à 09:13
0
Merci
personne pour cette histoire d'impression confirmée?

s'il vous plait?
Commenter la réponse de therealmitch
therealmitch 14 Messages postés mardi 30 septembre 2008Date d'inscription 5 janvier 2009 Dernière intervention - 5 janv. 2009 à 11:28
0
Merci
up
Commenter la réponse de therealmitch

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.