Bonjour,

Je travail actuellement sur un projet de rangement de dossier en vu de la création de pièces CAO sur le logiciel CATIA V5.
Mon but est ici d'organiser une architecture de rangement de dossiers en fonction d'un fichier Excel (préalablement rempli).

Je vous met ci dessous une partie du code avant d'expliquer plus profondément.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
Private Sub SOUS_ENSEMBLE_Click()
 
'Déclaration variables
Dim h As Integer '
Dim g As Integer '
Dim i As Integer
Dim j As Integer '
Dim NomRacine As String
Dim U As Integer
U = 0
 
'On pose les valeurs
g = 0
i = 2
NomRacine = "RACINE"
 
'Déclaration des chemins
chemin = CATIA.ActiveDocument.Path
 
'Ouverture fichier Excel
Set oExcel = CreateObject("Excel.Application")
Set wb = Workbooks.Open(chemin & "\RACINE_000.xls")
 
'Calcul du nombre de ligne non vides
Do Until Worksheets("Gestion Sous Ensemble").Cells(i, 1) = ""
    h = Cells(i, 1).Value
 
 '----------------------------CREATION DOSSIER RACINE---------------------------------'
    If Dir(chemin & "\" & NomRacine & "_" & h, vbDirectory) <> "" Then
        'MsgBox "Le dossier existe déjà"
    Else
        'MsgBox "Le dossier n'existe pas"
        MkDir chemin & "\RACINE_" & h
    End If
 
    Dim cheminbis As String
    cheminbis = chemin & "\" & NomRacine & "_" & h
 
    '-----------------------CREATION DOSSIER RACINE_DETAIL--------------------------'
    If Dir(cheminbis & "\" & NomRacine & "_" & h & "_" & "detail", vbDirectory) <> "" Then
        'MsgBox "Le dossier existe déjà"
    Else
        MkDir cheminbis & "\" & NomRacine & "_" & h & "_" & "detail"
 
    End If
 
Dim cheminbisbis As String
cheminbisbis = cheminbis & "\" & NomRacine & "_" & h & "_" & "detail"
Dim conversion As String
 
    For j = 1 To Worksheets("Gestion Sous Ensemble").Cells(i, 2) + U + 1
        'MsgBox (Worksheets("Gestion Sous Ensemble").Cells(i, 2))
        If Dir(cheminbisbis & "\" & NomRacine & "_" & h + j & "_detail", vbDirectory) <> "" Then
 
        Else
                conversion = CInt(h + j) 
                'MsgBox (conversion)
                If conversion Like "*0" Then 'On evite les nombres finissant par 0
                j = j + 1
                U = U + 1
                Else
                End If
 
        On Error Resume Next
        Dim cheminbisbisbis As String
        cheminbisbisbis = cheminbisbis & "\" & NomRacine & "_" & h + j & "_detail"
 
        Dim Product As Documents
        Dim productDocument As productDocument
 
        MkDir cheminbisbis & "\" & NomRacine & "_" & h + j & "_detail"
        Set Product = CATIA.Documents
        Set productDocument = Product.Add("Product") 'on ouvre un fichier CATIA sans nom
        On Error Resume Next
        'MsgBox (cheminbisbisbis & "\" & NomRacine & "_" & h + j & ".CATProduct")
        productDocument.SaveAs (cheminbisbisbis & "\" & NomRacine & "_" & h + j & ".CATProduct") 'on sauve le fichier sans nom là ou on veut avec le bon nom
        productDocument.Close 'on ferme le fichier pour passer à la suite
        End If
 
    Next
 
i = i + 1
g = g + 1
 
Loop
 
oExcel.Quit
 
 
End Sub
Ce qu'il se passe actuellement : Ma macro vient ouvrir le fichier Excel et exécute ligne par ligne jusqu'à la première ligne vide rencontrée la boucle For.

Cette dernière, quant à elle, vient lire la deuxième case de la ligne en cours, et en fonction du nombre inscrit, va créer X dossier suivis de X fichier CATIA dans ces dis dossiers.
Seule ombre au tableau, c'est que je bannis les dossiers finissant par 0 et par conséquent, dés que la boucle For rencontre un nombre finissant par 0 (10 par ex, elle passe à 11. Et ainsi de suite).

Jusque là tout va bien, cependant quand je lui demande 10 dossier, j'en ai 11, entre 10 et 30, j'en ai le bon nombre, et au delà de 30, il m'en crée deux de plus.

Je ne suis pas allé au delà de ce chiffre car cela m'est inutile.

Voilà mon problème, car je ne peux demander à la personne voulant créer ses dossiers de devoir en plus gérer un nombre aléatoire dans cette création.

Enfin, j'ai mis pas mal de fois "One error resume next" car je n'arrive pas à gerer le fait que le programme plante quand les dossiers existent déjà, et que je ne veux pas les remplacer.


Je vous sollicite donc pour avoir un peu d'aide et je ne m'attend pas à une solution "clé en main", mais plutot de comprendre comment un programme fonctionne car c'est mon premier en VBA

Cdt

Anthony