La galere pour un newbie

Résolu
cs_ludwig89 Messages postés 47 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 18 septembre 2009 - 22 sept. 2004 à 12:04
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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 :
NomFichier = Mid("" & F, InstrRev("" & F, "") + 1)
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)

-- Pour enlever l'extension :
NomFichier = Left(F & ".", Instr(1, F & ".", ".") - 1)
Même méthode avec F & "." plutôt que F tout seul

Vala
3
Rejoignez-nous