Problème, nom de fichiers trop long
Bonjour je suis en train de travailler sur une macro.
Elle me permet de transformer chacun des dossiers que je sélectionne en onglets dans ma page active.
Chaque onglet porte le nom de chaque fichier excel, Dossier avec feuille 1, feuille 2, feuille 3 devient, onglet nommée "feuille 1", onglets "feuille 2"...
Tout fonctionne bien sauf que le nom des feuilles dépassent 31 caractères.
Je vous mets mon travail en pièce jointe.
J'ai lu sur un forum que l'on pouvait aller jusqu'à 255 caractères
Si quelqu'un pouvait m'aider par des conseils ou en adaptant directement le fichier, ça m'aiderait beaucoup.
Bonjour,
il y a beaucoup de chose qui font qu'un nom d'onglet n'est pas valide...
Voici une petite fonction qui teste la validité d'un nom :
Function vérif_validitée_nom(le_nom As String) As Boolean
vérif_validitée_nom = True
Dim NbCar As Long
NbCar = Len(le_nom)
If NbCar > 28 Then
vérif_validitée_nom = False
Exit Function
End If
Dim CPT As Long
Dim Carac As String
For CPT = 1 To NbCar
Carac = Mid(le_nom, CPT, 1)
If InStr("[]/?*:", Carac) <> 0 Then
vérif_validitée_nom = False
Exit For
End If
Next CPT
End FunctionComme vous pouvez le voir c'est 28 caractères maximum, et une série de caractères interdis...
Cette fonction renvoie VRAI si le nom est compatible avec Excel et FAUX dans le cas contraire...
@ bientôt
LouReeD
Bonjour,
Ton fichier revisité avec une fonction personnalisée pour vérifier et modifier le nom de feuille.
Pour info, 31 est bien le nombre max de caractères pour le nom d'une feuille.
Cdlt.
Sub ouvreFichiers()
Dim NomFichier As Variant, Filtre As String, cmpt As Long, fich() As String
Dim wb As Workbook, nom As String
Filtre = "Tous les fichiers(*.xl*),*.xl*"
NomFichier = Application.GetOpenFilename(Filtre, 1, "Ouvrir", , True)
If IsArray(NomFichier) Then
Application.ScreenUpdating = False
For cmpt = LBound(NomFichier) To UBound(NomFichier)
Set wb = Workbooks.Open(NomFichier(cmpt))
nom = Mid(wb.Name, 1, InStrRev(wb.Name, ".") - 1)
nom = RenameWorksheet(nom)
With ThisWorkbook
.Activate
wb.Sheets(1).Copy After:=.Sheets(.Sheets.Count)
.Sheets(.Sheets.Count).Name = nom
End With
wb.Close
Next cmpt
ThisWorkbook.Sheets(1).Activate
End If
End SubPublic Function RenameWorksheet(sText As String) As String
Dim x As String, newText As String
Dim I As Long
newText = ""
For I = 1 To Len(sText)
'x = Replace(sText, " ", "_")
x = Mid(sText, I, 1)
If InStr("/?,;*&:[]", x) > 0 Then
newText = newText & "_"
Else
newText = newText & x
End If
Next I
RenameWorksheet = Left(newText, 31)
End FunctionBonsoir,
en effet... Oups... c'est une fonction que j'ai mis en place sur une de mes applications où j'ajoute un "terme" générique, du coup elle prend en compte que 28 caractères...
Et en effet il est judicieux de modifier par un caractère générique les caractères non acceptés !
@ bientôt
LouReeD