Erreur de Compilation Nom ambigu detecté SaveClasseur

Bonjour !

Apres avoir importer un fichier de la Banque Postale ( format CSV ) j'ai fait tourner mon macro mais j'obtiens le message : " "Erreur de Compilation Nom ambigu detecté SaveClasseur".. que se passe t-il ?

Car je cherche à sauver le fichier CSV au format xlsx ( ( avec ajout de date au niveau du nom du fichier )

Est-ce lié au changement de la structure du fichier CSV a changé depuis debut 2023 ( plus de colonnes FRANCS ) ?

Sub Module20()
'
' Module20 Macro ( copie du Mod19 ) car CSV a changé ! '
'
'
' Pour interrompre : Appuyez sur les 2 touches "CTRL" et "ARRET DEFIL"
'
Dim Wb As Workbook
Dim FeuilleImport As Workbook
Dim Criteres As Workbook
Set Wb = ActiveWorkbook
Dim Derniere As Long
Dim Lastline As Variant
Dim feuille_courante As String
Dim classeur_actif As String
Dim Quel_Fichier As String
Dim Cellule As Range
Dim ligne As Range

MsgBox " Debut de l'Import Module20 "
'
' Ouvrir et choisir le fichier
'
Quel_Fichier = Application.GetOpenFilename("Fichiers CSV XLS XLSX , *.csv;*.xls;*.xlsx")
'MsgBox "1) Quel_Fichier = " & Quel_Fichier
'
suffixe = InStr(Quel_Fichier, ".csv")
'MsgBox "2) position du Suffixe = " & suffixe
'
pos2 = InStrRev(Quel_Fichier, "\")
'MsgBox "3) adresse = " & pos2
'
Fichier = Mid(Quel_Fichier, pos2 + 1, suffixe - pos2 - 1)
'MsgBox "4) fichier = " & fichier
'
nocompte = Left(Fichier, 11)
MsgBox " compte = " & nocompte
Index = Mid(Fichier, 12, 15)
MsgBox " index = " & Index
'
' Date du jour ( format US/ENG : aaa mm jj
'
Dim DateJourUS As String
DateJourUS = Format(Now, "yyyy_mm_dd")
'
' Application.ScreenUpdating = False pour empecher de voir defiler les ouvertures des feuilles Excel ( ne pas oublier de le remettre sur TRUE en fin de porgramme
Application.ScreenUpdating = False
'
'
' TRES IMPORTANT : toujours mettre Local:=True pour ne pas avoir des points virgules ";"
'
Set FeuilleImport = Workbooks.Open(Filename:=Fichier, local:=True, origin:=xlWindows)
'
'
Cells.Select
Selection.Columns.AutoFit
'
' Sauvetage AVANT remplacement des caracteres illisibles
'
SaveClasseur FeuilleImport, Wb.Path & "\" & DateJourUS & "_Import_" & nocompte & "_" & Index & ".xlsx"
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Lastline = ActiveCell.Row
'MsgBox " il y a " & Lastline & " lignes"
'
' Ajout d'une colonne numero de compte' dans premiere colonne
'
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Select
'
' Suppression de la colonne E contenant "Montant(FRANCS)"
'
Columns("E:E").Delete Shift:=xlToLeft
' Remplacement des caracteres illisibles et Suppression des lignes avec montants(FRANCS)
'
For Each Cellule In Range("A1:A" & Lastline)
If Cellule.Offset(0, 1) Like "*Numéro Compte*" Then Cellule.Offset(0, 1).Value = "Numero Compte"
If Cellule.Offset(0, 1) Like "*Solde (EUROS)*" Then Cellule.Offset(0, 2).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
If Cellule.Offset(0, 1) Like "*/*/*" Then
Cellule.Offset(0, 3).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cellule.Offset(0, 3).ColumnWidth = 17
Cellule.Offset(0, 4).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cellule.Offset(0, 4).ColumnWidth = 17
End If
If Cellule.Offset(0, 2) Like "Libellé" Then
Cellule.Offset(0, 2).Value = "Libellé"
Cellule.Offset(0, 0).Value = "Numero Compte"
End If
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Trim(Cellule.Offset(0, 2))
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "*NÂ*" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), "NÂ", "N")
If Cellule.Offset(0, 3) Like "Montant(EUROS)" Then Cellule.Offset(0, 4).Value = "Montant(EUROS)"
If Cellule.Offset(0, 3) > 0 And Cellule.Offset(0, 3) <> "Montant(EUROS)" Then
Cellule.Offset(0, 4).Value = Cellule.Offset(0, 3)
Cellule.Offset(0, 3).Value = ""
End If
'
' Suppression de la ligne contenant "Solde (FRANCS)" sans sortir du boucle
'
If Cellule.Offset(0, 1) Like "*Solde*(FRANCS)*" Then Cellule.Offset(0, 1).EntireRow.Delete
'
'
'
Next
'
' Tri sur Date
'
Range("B7").Select
ActiveWorkbook.Worksheets(1).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(1).Sort.SortFields.Add Key _
:=Range("B8:B99"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets(1).Sort
.SetRange Range("A7:E99")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Sauvetage APRES remplacement des caracteres illisibles
'
SaveClasseur FeuilleImport, Wb.Path & "\" & DateJourUS & "_Import_" & nocompte & "_" & Index & ".xlsx"
'
MsgBox " c'est fini !"
'
End Sub

Edit modo : merci de mettre le code entre balises SVP avec le bouton </>

D'avance merci

Bonjour Toto92 et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître

Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)

Concernant votre demande :
1) merci de mettre votre code entre balises la prochaine fois grâce au bouton </>
2) Ce message indique que vous n'avez pas qu'une seule procédure nommée "SaveClasseur", mais au moins 2
ou que vous avez mis cette procédure dans un module du même nom

Merci pour votre participation

Cordialement

Sub Module20()
'
' Module20 Macro ( copie du Mod19 ) car CSV a changé ! '
'
'
' Pour interrompre : Appuyez sur les 2 touches "CTRL" et "ARRET DEFIL"
'
Dim Wb As Workbook
Dim FeuilleImport As Workbook
Dim Criteres As Workbook
Set Wb = ActiveWorkbook
Dim Derniere As Long
Dim Lastline As Variant
Dim feuille_courante As String
Dim classeur_actif As String
Dim Quel_Fichier As String
Dim Cellule As Range
Dim ligne As Range

MsgBox " Debut de l'Import Module20 "
'
' Ouvrir et choisir le fichier
'
Quel_Fichier = Application.GetOpenFilename("Fichiers CSV XLS XLSX , *.csv;*.xls;*.xlsx")
'MsgBox "1) Quel_Fichier = " & Quel_Fichier
'
suffixe = InStr(Quel_Fichier, ".csv")
'MsgBox "2) position du Suffixe = " & suffixe
'
pos2 = InStrRev(Quel_Fichier, "\")
'MsgBox "3) adresse = " & pos2
'
Fichier = Mid(Quel_Fichier, pos2 + 1, suffixe - pos2 - 1)
'MsgBox "4) fichier = " & fichier
'
nocompte = Left(Fichier, 11)
MsgBox " compte = " & nocompte
Index = Mid(Fichier, 12, 15)
MsgBox " index = " & Index
'
' Date du jour ( format US/ENG : aaa mm jj
'
Dim DateJourUS As String
DateJourUS = Format(Now, "yyyy_mm_dd")
'
' Application.ScreenUpdating = False pour empecher de voir defiler les ouvertures des feuilles Excel ( ne pas oublier de le remettre sur TRUE en fin de porgramme
Application.ScreenUpdating = False
'
'
' TRES IMPORTANT : toujours mettre Local:=True pour ne pas avoir des points virgules ";"
'
Set FeuilleImport = Workbooks.Open(Filename:=Fichier, local:=True, origin:=xlWindows)
'
'
Cells.Select
Selection.Columns.AutoFit
'
' Sauvetage AVANT remplacement des caracteres illisibles
'
SaveClasseur FeuilleImport, Wb.Path & "\" & DateJourUS & "_Import_" & nocompte & "_" & Index & ".xlsx"
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Lastline = ActiveCell.Row
'MsgBox " il y a " & Lastline & " lignes"
'
' Ajout d'une colonne numero de compte' dans premiere colonne
'
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Select
'
' Suppression de la colonne E contenant "Montant(FRANCS)"
'
Columns("E:E").Delete Shift:=xlToLeft
' Remplacement des caracteres illisibles et Suppression des lignes avec montants(FRANCS)
'
For Each Cellule In Range("A1:A" & Lastline)
If Cellule.Offset(0, 1) Like "*Numéro Compte*" Then Cellule.Offset(0, 1).Value = "Numero Compte"
If Cellule.Offset(0, 1) Like "*Solde (EUROS)*" Then Cellule.Offset(0, 2).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
If Cellule.Offset(0, 1) Like "*/*/*" Then
Cellule.Offset(0, 3).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cellule.Offset(0, 3).ColumnWidth = 17
Cellule.Offset(0, 4).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Cellule.Offset(0, 4).ColumnWidth = 17
End If
If Cellule.Offset(0, 2) Like "Libellé" Then
Cellule.Offset(0, 2).Value = "Libellé"
Cellule.Offset(0, 0).Value = "Numero Compte"
End If
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Trim(Cellule.Offset(0, 2))
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "* *" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), " ", " ")
If Cellule.Offset(0, 2) Like "*NÂ*" Then Cellule.Offset(0, 2) = Replace(Cellule.Offset(0, 2), "NÂ", "N")
If Cellule.Offset(0, 3) Like "Montant(EUROS)" Then Cellule.Offset(0, 4).Value = "Montant(EUROS)"
If Cellule.Offset(0, 3) > 0 And Cellule.Offset(0, 3) <> "Montant(EUROS)" Then
Cellule.Offset(0, 4).Value = Cellule.Offset(0, 3)
Cellule.Offset(0, 3).Value = ""
End If
'
' Suppression de la ligne contenant "Solde (FRANCS)" sans sortir du boucle
'
If Cellule.Offset(0, 1) Like "*Solde*(FRANCS)*" Then Cellule.Offset(0, 1).EntireRow.Delete
'
'
'
Next
'
' Tri sur Date
'
Range("B7").Select
ActiveWorkbook.Worksheets(1).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(1).Sort.SortFields.Add Key _
:=Range("B8:B99"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets(1).Sort
.SetRange Range("A7:E99")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Sauvetage APRES remplacement des caracteres illisibles
'
SaveClasseur FeuilleImport, Wb.Path & "\" & DateJourUS & "_Import_" & nocompte & "_" & Index & ".xlsx"
'
MsgBox " c'est fini !"
'
End Sub

1) ici avec </>

2) - Il n y a qu'une seule procedure dans cette module20

- je n'ai pas de module qui a pour nom Saveclasseur

- donc : Est ce lié à la présence d'une autre module ( module2 ) présente dans mon explorateur de projets ? VBA accepte qu'un nombre limite de modules ? ( info : impossible de supprimer certains modules car je ne vois pas de commande supprimer une à une les modules )

Merci et bon Apres Midi

Re

Re,

Qu'est-ce que je disais

Ce message indique que vous n'avez pas qu'une seule procédure nommée "SaveClasseur", mais au moins 2
ou que vous avez mis cette procédure dans un module du même nom

2023 01 09 19h59 39

Et

2023 01 09 20h00 09

Je n'ai pas été plus loin, déjà 2

Vous avez l'air de confondre "Module" et Procédure ou "Sub"

Jusqu'à la création de la module n°20 et 21 .. j'avais déjà 12 modules avec le même SUB...la dernière a bien marché....

je ne crois pas que le problème vient de là ...

je crois que j'ai du toucher quelque part dans les outils> options sous VBA

comment empêcher certaines modules d’accéder aux SUB se trouvant dans d'autres modules à l’intérieur d'un seul workbook ?

je vais me documenter sur les differences entre SUB et Module

Re,

Comme me l'a gentiment fait remarqué Cousinhub
On peut, mais il faut alors appeler la procédure par son nom de module

Ceci dit, pourquoi multiplier une Sub qui fait toujours la même chose

Il suffit de créer un module "mOutils" par exemple dans lequel on met la sub

Sub SaveClasseur(Wb As Workbook, FichierXls As String)
  Wb.Application.DisplayAlerts = False
    Wb.SaveAs Filename:= _
    FichierXls, _
    FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Wb.Application.DisplayAlerts = True
End Sub

On supprime toutes les autres et voilà

ok

Bonsoir

Rechercher des sujets similaires à "erreur compilation nom ambigu detecte saveclasseur"