Bonjour à tous,

Afin de remplir un programme d'emailing, je dois effectuer des opérations de tri, de répartitions et de conversions afin d'obtenir uniquement les données qui m’intéressent dans des fichiers texte portant le nom des groupes des contacts.
Le fichier de base est au format CSV provenant d'un client mail. (thunderbird)
Afin de simplifier cela j'ai mis en place un code que j'ai développé sur un bouton, voici le code en question :

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
Private Sub CommandButton1_Click()
Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, Comma:=True, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
	Range("A:D,F:F,G:G,I:AK").Select
    Selection.Delete Shift:=xlToLeft
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
Columns("B:B").Select
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, Other:=True, OtherChar _
        :="-", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
	Range("C:D").Select
    Selection.Delete Shift:=xlToLeft
 
    Dim lgLig As Long, lgLigFin As Long, lgLigDerAgent As Long
    Dim boRecherche As Boolean
    Dim strAgent As String
    Application.ScreenUpdating = False    
    lgLigFin = Worksheets("contact").Range("B" & Cells.Rows.Count).End(xlUp).Row
    For lgLig = 1 To lgLigFin
        strAgent = Worksheets("contact").Range("B" & lgLig).Value
        boRecherche = RechercherWS(strAgent)
        If boRecherche = False Then
            Worksheets.Add after:=Worksheets(ThisWorkbook.Worksheets.Count)
            ActiveSheet.Name = strAgent
        End If
        lgLigDerAgent = Worksheets(strAgent).Range("B" & Cells.Rows.Count).End(xlUp).Row + 1
        Worksheets("contact").Range("A" & lgLig & ":B" & lgLig).Copy Destination:=Worksheets(strAgent).Range("A" & lgLigDerAgent)
    Next lgLig
    Sheets.Select
	Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
	For Each Feuille In ThisWorkbook.Worksheets
        Feuille.Copy
		ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ActiveWorkbook.Worksheets(1).Name_
        , FileFormat:=xlTextMSDOS, CreateBackup:=False
		ActiveWorkbook.Close savechanges:=False
    Next Feuille
	Application.ScreenUpdating = True
    MsgBox "La répartition s'est terminée avec succès !"
End Sub
 
Private Function RechercherWS(strAgent As String) As Boolean
    Dim wsFeuil As Worksheet
    RechercherWS = False
    For Each wsFeuil In ThisWorkbook.Worksheets
        If wsFeuil.Name = strAgent Then
            RechercherWS = True
            Exit For
        End If
    Next wsFeuil
End Function
J'obtiens le résultat souhaité malgré mes compétences limitées en VBA. (il y a surement plus simple, soyez tolérant )

Mon problème est le suivant : Je souhaiterais éviter la création systématique d'un bouton dans le fichier CSV car mes collègues doivent également faire cette procédure. Pour cela j'ai pensé utiliser le fichier PERSONNAL.XLSB.
La fleur au fusil j'ai donc intégré ce code dans une macro (Sub etc...) mais ça ne fonctionne pas, VBA bloque à la ligne 26 en m'indiquant qu'il ne peut pas créer de fichier. J'ai bien l'impression que la macro ne prends pas en compte la fonction RechercherWS, qu'en pensez-vous ?

Merci d'avance à tous !