gawel Posté(e) le 12 juillet 2004 Posté(e) le 12 juillet 2004 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 fichiers2) 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
didier Posté(e) le 12 juillet 2004 Posté(e) le 12 juillet 2004 Bonsoir Gawelil est possible que tu t'étonnes de ne pas avoir de réponses,mais je n'ai RIEN compris à ton message :casstet: de quel numéro nous parles tu ?merci d'expliciter, pour qu'on puisse t'aideramicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
gawel Posté(e) le 13 juillet 2004 Auteur Posté(e) le 13 juillet 2004 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.CATPart9999_REP024_SPC_01_A#titi.CATPart9999_REP025_SPC_01_A#tutu.CATPart9999_REP300_SPC_01_A#lolo.CATPart9999_REP474_SPC_01_A#lele.CATPartetc.... 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:001024025300474 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émentersi non alors bingo, je prends ce numéro ! voili voilà mon casse-tête !! gawel
didier Posté(e) le 13 juillet 2004 Posté(e) le 13 juillet 2004 coucouben, je vois pas une solution comme çà, il faut bien réfléchir, car cette façon de nommer les fichierspré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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
8_pool Posté(e) le 13 juillet 2004 Posté(e) le 13 juillet 2004 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:
gawel Posté(e) le 13 juillet 2004 Auteur Posté(e) le 13 juillet 2004 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 StringDim NomDossier As StringDim tableau() As StringDim stock As StringDim i As Integer NomDossier = "K:\" & OF & SERMOFOLDER 'ici on arrive dans mon dossierNomFichier = dir(NomDossier & "*.CATPart") 'là je prends tous les fichiers *.CATParti = 1ReDim tableau(i) 'je redimensionne mon tableau pour avoir au moins une valeurDo 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 suivantLoop Dim repere_tirant As StringDim debutnumero As Doubledebutnumero = "1" 'je cherche le numéro de repère Do If debutnumero = Val(tableau(i)) Then debutnumero = debutnumero + 1 Else: Exit Do End IfLoop'je formate mon numéro pour l'injecter plus tard dans mon nom de fichier repere_tirant = format(debutnumero, "000")MsgBox repere_tirantStop Y-a-t-il qqchose qui vous choque ??merci gawel
8_pool Posté(e) le 13 juillet 2004 Posté(e) le 13 juillet 2004 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 :DoIf debutnumero = Val(tableau(i)) Thendebutnumero = debutnumero + 1Else: Exit DoEnd IfLoopTu 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:
gawel Posté(e) le 19 juillet 2004 Auteur Posté(e) le 19 juillet 2004 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 StringDim sFolderName As StringDim caract8 As StringDim fd As StringDim sAns() As StringDim lCtr As Long 'initialisation du dossier de OFsFolderName = "K:\" & OF & FOLDER 'OF et FOLDER sont déjà déterminés ultérieurementcaract8 = OF & "_REP" 'création tableau pour tous les repères déjà utilisésReDim sAns(0) As Stringfd = 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 = dirLoopFileList = sAns 'tri par ordre croissant du tableauDim first As LongDim last As LongDim i As LongDim noswap As BooleanDim v As Variant first = LBound(FileList)last = UBound(FileList) last = last - 1Do While first <= lastnoswap = TrueFor i = first To lastIf FileList(i) > FileList(i + 1) Thenv = FileList(i)FileList(i) = FileList(i + 1)FileList(i + 1) = vnoswap = FalseEnd IfNext ilast = last - 1If noswap Then Exit DoLoop 'détermination du numéro libre le plus proche en partant de 003 pour repere tirantDim var_tirant As StringDim j As IntegerDim repere_tirant As StringDim 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 IfNext 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
8_pool Posté(e) le 20 juillet 2004 Posté(e) le 20 juillet 2004 Ravi de t'avoir rendu service. Pour info, c'est quoi au juste ton appli ? Ciao :cool:
gawel Posté(e) le 20 juillet 2004 Auteur Posté(e) le 20 juillet 2004 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant