Aller au contenu

compteur pour affectation numéro


Messages recommandés

Posté(e)

Salut à tous,

 

je reviens un peu sur un ancien message si vous le voulez bien.

 

le message était le suivant:

http://www.cadxp.com/sujetXForum-2829.htm

 

pour lister mes fichiers dans une listbox, pas de problème, mais ce n'est pas exploitable directement. Maintenant, je voudrais extraire de chaque fichier une liste de caractères qui désigne un numéro. Pour effectuer des sauvegardes de fichiers ultérieurement, j'ai besoin de connaître si un numéro est libre (pour ne pas écraser d'autres fichiers)

dans mon raisonnement, je pense faire:

1) lire les fichiers

2) extraire les numéros et les ranger dans un tableau (?)

3) trier ou chercher un numéro en partant d'un numéro de référence

 

si c'est un tri, je commence par un numéro 300 par exemple et je regarde lequel est immédiatement supérieur à celui-ci (et ne soyant pas déjà utilisé dans le tableau).

 

 

merci d'avance !!

gawel

Posté(e)

Autant pour moi, je vais essayer de mieux me faire comprendre.

 

voilà j'ai par exemple une soixantaine de fichiers dans un dossier qui sont nommés de cette manière:

9999_REP001_SPC_01_A#toto.CATPart

9999_REP024_SPC_01_A#titi.CATPart

9999_REP025_SPC_01_A#tutu.CATPart

9999_REP300_SPC_01_A#lolo.CATPart

9999_REP474_SPC_01_A#lele.CATPart

etc....

 

le numéro qui m'intéresse est situé à ce niveau:

9999_REP001_SPC_01_A#toto.CATPart

 

j'ai besoin de connaître quel est le numéro le plus grand en partant de 001 qui ne soit pas encore pris. Ici par exemple, le 002 serait bon; ou alors en partant d'un chiffre de référence, par exemple 300, donc ici je pourrais prendre le 301.

 

je pensais dans mon raisonnement prendre tous les numéros présents en partant du 9ème caractères et les rangés dans un tableau, j'aurais donc extraits:

001

024

025

300

474 etc...

 

et là en comparant les numéros stockés par rapport à une variable je me dis :

le 001 est déjà pris, j'incrémente de 1, je regarde s'il exite:

si oui alors je continue d'incrémenter

si non alors bingo, je prends ce numéro !

 

voili voilà mon casse-tête !!

 

gawel

Posté(e)

coucou

ben, je vois pas une solution comme çà,

il faut bien réfléchir, car cette façon de nommer les fichiers

présente beaucoup d'inconnues,

on arrivera à isoler le numéro voulu mais il faudra se "rappeler"

le reste de la chaîne de caractère qui compose le nom de ce fichier.

bizarrement étrange ton cas,

désolé de ne pouvoir t'aider, mais c'est particulier.

dans un premier temps, écris un ALGORITHME bien précis,

ensuite on verra quelle méthode appliquer.

amicalement

 

Posté(e)

Salut,

 

Didier a raison, on comprend beaucoup mieux après ton second message.

 

Voila une proposition, si j'ai bien compris ton problème :

- ton tableau doit être ordonné de manière croissante

- ta variable de comparaison contient au départ ton nombre de référence,

- tu compare avec la premiere cellule du tableau :

< à la variable : tu passes à la cellule suivante,

= à la variable : tu incrémentes cette variable et tu passes à la cellule suivante,

> à la variable : la variable contient le numéro que tu recherches, bingo !

 

 

Voila, j'espère que c'est assez clair et que ça t'aidera.

 

 

Ciao :cool:

Posté(e)

bon j'ai beau triturer mon code dans tous les sens (j'ai même réussi à fabriquer une machine à gaz, si si !! je vous assure!), il me manque un truc dans ma boucle. je vous mets mon code:

 

Dim NomFichier As String

Dim NomDossier As String

Dim tableau() As String

Dim stock As String

Dim i As Integer

 

NomDossier = "K:\" & OF & SERMOFOLDER 'ici on arrive dans mon dossier

NomFichier = dir(NomDossier & "*.CATPart") 'là je prends tous les fichiers *.CATPart

i = 1

ReDim tableau(i) 'je redimensionne mon tableau pour avoir au moins une valeur

Do While NomFichier <> "" 'boucle tant que le dossier n'a pas été entièrement parcouru

stock = Mid(NomFichier, 9, 3) 'je stocke le numéro du fichier

tableau(i) = stock ' je rentre ma valeur dans le tableau

i = i + 1

ReDim Preserve tableau(i) 'j'agrandis mon tableau pour y rentrer la prochaine valeur

NomFichier = dir 'passe à l'élément suivant

Loop

 

Dim repere_tirant As String

Dim debutnumero As Double

debutnumero = "1"

 

'je cherche le numéro de repère

 

Do

If debutnumero = Val(tableau(i)) Then

debutnumero = debutnumero + 1

Else: Exit Do

End If

Loop

'je formate mon numéro pour l'injecter plus tard dans mon nom de fichier

 

repere_tirant = format(debutnumero, "000")

MsgBox repere_tirant

Stop

 

Y-a-t-il qqchose qui vous choque ??

merci

 

gawel

Posté(e)

J'suis loin d'être un pro en VB, alors merci de votre indulgence !!

 

Si tu as repris mon semblant d'algorithme, je pense qu'il te manque un test dans ta booucle :

Do

If debutnumero = Val(tableau(i)) Then

debutnumero = debutnumero + 1

Else: Exit Do

End If

Loop

Tu testes bien l'égalité entre la cellule du tableau et debutnumero, mais tu dois sortir de la boucle que si la cellule du tableau est supérieur à debutnumero : test à rajouter après le Else: .

 

Es-tu certain que ton tableau soit ordonné en ordre croissant ?

Si ce n'est pas le cas, ça ne fonctionnera pas correctement.

 

 

Ciao :cool:

Posté(e)

Merci Didier :exclam: Merci 8_pool :exclam:

 

ça y est, mon code marche à merveille; j'ai suivi vos conseils, j'ai bien réfléchi sur ma méthode + beaucoup de recherches sur la toile. Voici mon code pour ceux que ça intéresse:

 

Dim FileList() As String

Dim sFolderName As String

Dim caract8 As String

Dim fd As String

Dim sAns() As String

Dim lCtr As Long

 

'initialisation du dossier de OF

sFolderName = "K:\" & OF & FOLDER 'OF et FOLDER sont déjà déterminés ultérieurement

caract8 = OF & "_REP"

 

'création tableau pour tous les repères déjà utilisés

ReDim sAns(0) As String

fd = dir(sFolderName & caract8 & "*.CATPart", vbNormal)

 

Do While Len(fd)

 

If sAns(0) = "" Then

sAns(0) = fd

Else

lCtr = UBound(sAns) + 1

ReDim Preserve sAns(lCtr) As String

sAns(lCtr) = format(Mid(fd, 9, 3), "000")

End If

fd = dir

Loop

FileList = sAns

 

'tri par ordre croissant du tableau

Dim first As Long

Dim last As Long

Dim i As Long

Dim noswap As Boolean

Dim v As Variant

 

first = LBound(FileList)

last = UBound(FileList)

 

last = last - 1

Do While first <= last

noswap = True

For i = first To last

If FileList(i) > FileList(i + 1) Then

v = FileList(i)

FileList(i) = FileList(i + 1)

FileList(i + 1) = v

noswap = False

End If

Next i

last = last - 1

If noswap Then Exit Do

Loop

 

'détermination du numéro libre le plus proche en partant de 003 pour repere tirant

Dim var_tirant As String

Dim j As Integer

Dim repere_tirant As String

Dim last2 As Long

 

last2 = UBound(FileList)

 

var_tirant = "003"

 

For j = 0 To last2

If FileList(j) < var_tirant Then

j = j + 1

ElseIf FileList(j) = var_tirant Then

var_tirant = var_tirant + 1

j = j + 1

ElseIf FileList(j) > var_tirant Then

repere_tirant = format(var_tirant, "000")

End If

Next

 

MsgBox repere_tirant

 

 

je viens bientôt pouvoir partir en vacances la tête tranquille........

 

ah!! j'suis vraiment content, en plus pour un début de semaine, j'suis beacoup plus serein.

 

@+ !

Gawel

Posté(e)

c'est une appli qui sert à insérer automatiquement tout un environnement mécanique lié à un type de pièce. Etant donné le nombre conséquent de possibilité, on a pensé à créer une sorte d'assistant pour le choix des différentes fonctions et l'appli se charge d'aller les chercher, les insérer, les renommer et les sauvegarder (et c'est à ce niveau que le code me sert).

 

pour l'instant , je vais créer la version 1.0, ensuite j'ai déjà pas mal d'idée pour rajouter des nouvelles fonctionnalités et rendre l'appli assez ergonomique.

 

Si ça marche bien (je vais mettre l'appli en production vers la fin de semaine), je vais appliquer le même principe pour d'autres types de pièces.

 

Voili voilà !!

 

gawel

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité