Bonjour,

Je n'arrive pas à résoudre un problème que j'ai depuis plusieurs jours et je ne trouve aucune solution sur internet.

Je souhaite que ma macro enregistre une feuille de mon classeur au format texte (FileFormat:=xlTextMSDOS) sans fermer mon classeur actif (et en fermant le fichier texte créé).

Cependant lorsque j'exécute ma macro je rencontre plusieurs problèmes majeurs :

- Je génère bien un fichier texte au format MS-DOS et d'extension .BAT mais je ne peux pas l'ouvrir (en mode modifier) pour visualiser le contenu, sa me fait : "ACXXX.bat (Ne répond pas)".

- Quand je double clique sur le fichier généré, sa me fait ce message d'erreur :
"Ce fichier est utilisé par une autre application"

- Enfin, mon classeur excel qui s'appelle reprise_taille.xlsm change de nom avec celui du fichier crée : ACXXX.bat


Voici mon bout de code VBA :

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
Private Sub CommandButton1_Click()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim n As String 'déclare la variable N (Nom)
Dim pathfile As String
Set OS = Worksheets("Feuil2") 'définit l'onglet source OS (à adapter à ton cas)
Set OD = Worksheets("Feuil3") 'définit l'onglet destination OD (à adapter à ton cas)
Set R = OS.Columns(5).Find(">limite", , xlValues, xlWhole) 'définit la recherche R (recherche les occurrences de ">seuil" dans la colonne 5 (=E) de l'onglet source OS
    If Not R Is Nothing Then 'condition : s'il existe au moins une occurrence
    PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
    Do 'exécute
        'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet destination OD)
        If OD.Range("A1").Value = "" Then Set DEST = OD.Range("D1") Else Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 3)
        DEST.Value = Mid(OS.Cells(R.Row, 1).Value, 3) 'récupère les numéros de R
        DEST.Offset(0, -3) = "taille"
        DEST.Offset(0, -2) = "enfants"
        DEST.Offset(0, -1) = 0
        DEST.Offset(0, 1).Value = Mid(OS.Cells(R.Row, 2), 3) 'récupère les numéros de T
        n = OS.Cells(R.Row, 1).End(xlUp).Value 'récupère le nom
        n = Left(n, Len(n) - 4) 'enlève l'extension
        DEST.Offset(0, 3).Value = n 'récupère le nom
        Select Case Right(n, 3)
        Case Is = "T1"
            DEST.Offset(0, 2) = 600
        Case Is = "T2"
            DEST.Offset(0, 2) = 800
        Case Is = "T3"
            DEST.Offset(0, 2) = 900
        Case Is = "T4"
            DEST.Offset(0, 2) = 1000
        Case Is = "T5"
            DEST.Offset(0, 2) = 1200
        End Select
        Set R = OS.Columns(5).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
    Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
    End If 'fin de la condition
 
pathfile = ThisWorkbook.path & "\"
Worksheets("Feuil3").SaveAs FileName:=pathfile & "ACXXX.bat", _
FileFormat:=xlTextMSDOS, CreateBackup:=False
End Sub
pouvez vous m'aider svp ? je suis complètement désespéré. Merci.