cs_ludwig89
Messages postés47Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention18 septembre 2009
-
22 sept. 2004 à 12:04
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
22 sept. 2004 à 12:44
bonjour
bon voila ca fait 15jours que je galere a creer ma macro, et la j'ai besoin d'aide
la macro doit servir a modifier des numero de programmes de machines cn en les incrementant, effacer les programmes identiques, scanner l'ensemble des programmes et en sortir les outils utiliser par la machine, imprimer ces outils pour l'operateur
les programmes sont de types fichiers txt mais avec l'extension cnc
les fichiers sont du type
ludo01.cnc
ludo02.cnc
ludo03.cnc
en 1 j'ai programmer le comptage du nombre de fichier :
Private Function FileCount(ByVal chemin2 As String) As Long
Dim F As String, Cnt As Long
Cnt = 0
F = Dir(chemin2)
While F <> ""
Cnt = Cnt + 1
F = Dir
Wend
FileCount = Cnt
End Function
en 2 j'ai programmer la comparaison des 2 fichiers et l'effacement des fichiers identiques et l'incrementation des numero de programmes
Dim difference_detected As Boolean
Dim s1 As String
Dim s2 As String
Dim texte_fichier2 As String
Dim myfile As String
Dim premier_prog As Integer
Dim texte_ligne As String
Dim texte_prog As String
Dim numero_fichier As Integer
Dim texte_fichier As String
Dim nombre_fichier As Integer
Dim texte_nombre_fichier As String
Dim Ligne As String
Dim Reste As String
' extrai ludo de ludo01.cnc
myfile = Left(Dir(sFile), Len(Dir(sFile)) - 6)
'compte le nombre total de fichier ludo*.cnc
nombre_fichier = FileCount(chemin + "" + myfile + "*.cnc")
'affiche une boite de dialogue avec le nombe de fichier ludo*.cnc
MsgBox (Str(nombre_fichier) + " programme(s)")
numero_fichier = 1
premier_prog = 1
'pour tous les programmes
For numero_fichier = 1 To nombre_fichier
If numero_fichier < 10 Then
texte_fichier = numero_fichier
texte_fichier = "0" + texte_fichier
Else
texte_fichier = numero_fichier
End If
'remplace la premier ligne du progamme avec le numero de programme incrementer
numFile1 = FreeFile
Open (chemin + "" + myfile + texte_fichier + ".cnc") For Input As #numFile1
Line Input #numFile1, Ligne
Close #numFile1
Reste = Space(FileLen(chemin + "" + myfile + texte_fichier + ".cnc") - Len(Ligne))
Open (chemin + "" + myfile + texte_fichier + ".cnc") For Binary Access Read As #numFile1
Get #numFile1, Len(Ligne), Reste
Close #numFile1
Ligne = "%" + Str(premier_prog) + "-" + myfile + texte_fichier + ".cnc"
Open (chemin + "" + myfile + texte_fichier + ".cnc") For Binary Access Write As #numFile1
Put #numFile1, , Ligne
Put #numFile1, , Reste
Close #numFile1
'comparaison des 2 fichiers, si ils sont identiques je les effaces
For numero_fichier2 = numero_fichier + 1 To nombre_fichier
difference_detected = False
If numero_fichier2 < 10 Then
texte_fichier2 = numero_fichier2
texte_fichier2 = "0" + texte_fichier2
Else
texte_fichier2 = numero_fichier2
End If
numFile1 = FreeFile
Open (chemin + "" + myfile + texte_fichier + ".cnc") For Input As #numFile1
numFile2 = FreeFile
Open (chemin + "" + myfile + texte_fichier2 + ".cnc") For Input As #numFile2
Line Input #numFile1, s1 ' Skip de la première ligne (ligne avec le numero de progammes incrementer)
Line Input #numFile2, s2 ' Skip de la première ligne (ligne avec le numero de progammes incrementer)
While (Not (EOF(numFile1)) And (Not EOF(numFile2))) And difference_detected = False
Line Input #numFile1, s1
Line Input #numFile2, s2
If Trim(s1) <> Trim(s2) Then
difference_detected = True
numero_fichier = numero_fichier2 - 1
numero_fichier2 = nombre_fichier
End If
Wend
' Verifie que les deux fichiers avaient la même taille
If Not (EOF(numFile1) And EOF(numFile2)) Then
' L'un des deux fichiers n'est pas complètement lu
difference_detected = True
numero_fichier2 = nombre_fichier
End If
Close #numFile2
Close #numFile1
If difference_detected = False Then
Kill (chemin + "" + myfile + texte_fichier2 + ".cnc")
Kill (chemin + "" + myfile + texte_fichier2 + ".apd")
Kill (chemin + "" + myfile + texte_fichier2 + ".ens")
Kill (chemin + "" + myfile + texte_fichier2 + ".hed")
Kill (chemin + "" + myfile + texte_fichier2 + ".lax")
Kill (chemin + "" + myfile + texte_fichier2 + ".nas")
Kill (chemin + "" + myfile + texte_fichier2 + ".var")
Kill (chemin + "" + myfile + texte_fichier2 + ".wmf")
Kill (chemin + "" + myfile + texte_fichier2 + ".ent")
End If
Next numero_fichier2
premier_prog = premier_prog + 1
Next numero_fichier
MsgBox ("fini")
le problemes que j'ai c pour scanner les fichiers qui reste
donc ils peuvent avoir des trous dans l'incremantation :
ludo01.cnc
ludo03.cnc
ludo06.cnc
ludo07.cnc
et en extraire les outils
le test de chaque ligne a faire ou il y a les outils est de type
If Left(montexte, 2) = "(T" And Left(montexte, 3) <> "(T17" Then
ElseIf Left(montexte, 2) = "M1" And (montexte <> "M153" Or montexte <> "M144" Or montexte <> "M145") Then
End If
ce que je n'arrive pas a faire c koi mettre entre mon if et end if
pour ecrire tous ca dans un fichiers texte que je pourrai imprimer
de plus je voudrai enlever tous les doublons (outils commun dans 2 fichiers)
bon j'espere que j'ai ete clair et que quelqu'un poura m'aider
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 22 sept. 2004 à 12:44
Vala
JackSalut ludwig89
J'ai survolé ton code. Je résume ton problème :
En fait, tu comptes le nombre de fichiers "ludo*.cnc" et ensuite, tu fais un traitement pour chacun des fichiers en incrémentant un compteur.
Le problème est que les noms des fichiers ne se suivent pas.
Le plus simple serait de faire ton traitement à partir du vrai nom du fichier.
Au lieu de faire un For-Next incrémental, de la même manière que tu fais ton FileCount, récupère le nom du fichier :
F = Dir(chemin2)
While F <> ""
' Insère ici ton triturage de fichier
' en utilisant F comme nom de fichier
F = Dir
Wend
Si, dans ta boucle, tu as besoin de modifier toute ou partie du nom du fichier, traite le comme une chaine :
Par exemple :
-- Pour récupérer le nom du fichier sans le chemin :
J'utilise "" & F plutôt que F seul, comme ça, si F ne contient pas de chemin, la fonction InstrRev fournira quand même une valeur (sinon, elle renverrait 0 et ferait planter l'instruction Mid)