Macro pour changer nom des feuilles
Bonjour Le Forum
J'ai une macro qui change le nom de mes feuilles.
Ces feuilles sont exportées et ont des noms inutilisables du style StatExportDonneesActivitePassagesAuxArrets_GUID_DateTime_v2.
Je veux donc changer leur nom.
Le souci c'est que lorsque je clique sur mon bouton qui associe cette macro, j'ai un message d'erreur.
Je dois donc enregistrer, accepter la récupération des feuilles car le nom n'est pas valide et ensuite la macro fonctionne.
Une petite aide serait sympa.
Voici la macro:
Sub NomFeuille()
Dim Sh As Worksheet, TmpSh As Worksheet, Tmp As Variant, TmpName As String
'Declaration Variable
For Each Sh In Sheets 'Pour chaque feuille du classeur
If Sh.Name <> "Recap" And Not IsEmpty(Sh.Range("M5")) Then
'Si la feuille ne se nomme pas Recap et si M5 non vide
Sh.Name = Sh.Index ' Le nom de la feuille est le numéro feuille
Tmp = Split(Sh.Range("M5"), "-") ' Coupure après - dans M5
TmpName = Left(Trim(Tmp(UBound(Tmp))), 31) 'Coupure à gauche de Tmp jusqu'à 31 caractères
On Error Resume Next ' Si pas d'erreur
Set TmpSh = Sheets(TmpName) 'Feuille prend valeur de TmpName
On Error GoTo 0 'Si erreur
If Not TmpSh Is Nothing Then 'Si Feuille nommée TmpName existe déjà
Sh.Name = Left(Trim(TmpName), 29) & Sh.Index ' Feuille prend TmpName mais avec 29 caractères
Set TmpSh = Nothing 'Mettre TmpSh vide car Feuille avec ce nom existe maintenant
Else
Sh.Name = Left(Trim(TmpName), 31) 'Sinon Prise Valeur TmpName comme nom
End If
End If
Next Sh ' Feuille Suivante.
End SubMerci à vous.
PS: Si je suis pas assez clair, demander des infos
Bonjour ,
Ne pouvant pas créer de feuille portant ce genre de nom (limité à 32 caractère il me semble) , pourrait-tu joindre ton fichier pour pouvoir tester des solutions si elle se présente ?
cordialement
Re,
Bonjour ramoutch,
Bien sûr, je te joins les fichiers.
Me heurtant aux problèmes de la récupération de feuilles d'Excel, je ne peux envoyer un fichier unique avec la feuille avec la macro et les onglets posant problème. (changement nom StatExportDonneesActivitePassagesAuxArrets_GUID_DateTime_v2 en récupéré_Feuille1 par exemple).
J'ai donc joins 4 fichiers.
Il est nécessaire d'envoyer les feuilles à modifier sur le classeur Aide_Macro ( un déplacer ou copier tout simple).
J'ai testé d'envoyer les feuilles une par une sur mon fichier type, là la macro fonctionne sans "hic".
Mais dès que j'essaye par deux feuilles ou plus, ma jolie erreur réapparaît.
Voilà merci.
Maxi.
Bonjour,
N'ayant pas eu de réponses et le problème n'étant toujours pas résolu, je me permets de relançer le sujet.
Merci.
Cordialement,
Maxi.
Bonjour ,
Je m'excuse pour le long temps de réponse , mais j'ai manquer un peu de temps cette semaine
Donc j'ai testé ta macro après avoir coller les trois fichier-exemple dans le principal mais je n'ai aucun message d'erreur , les trois feuilles prennent bien le nom indiqué en M5 .
Par contre la nomination des onglets des trois feuilles était identiques "StatExportDonneesActivitePassag" (tronquage dut à la longueur du nom ) , l'erreur survient peut-être lorsque le nom est complet .
Je ne sais pas d'où tu exporte tes données mais n'y a-t-il pas une possibilité pour paramétrer le nom des onglets de sortie ?
désolé de ne pas pouvoir t'aider plus que cela
Cordialement,
Re,
Bonjour ramoutch,
J'ai testé avec les mêmes fichiers que toi; à savoir le classeur type et les trois fichiers exemples et j'ai une erreur.
"La méthode Name de l'objet _Worksheet a échoué" ; Erreur 1004
Sh.Name = Sh.Index ' Le nom de la feuille est le numéro feuilleApparemment, cette ligne pose problème. Je vois vraiment pas pourquoi.
Pour répondre à tes questions, mes feuilles viennent d'un logiciel et j'exporte en enregistrant aux formats Excel.
Je peux donc changer le nom initial du fichier evidemment mais ceci n'influe pas sur le nom de la feuille qui se nomme StatsExportDonnees... comme dans mes fichiers.
Je remets le code de la macro au cas où cela éclairerait certains :
Sub NomFeuille()
Dim Sh As Worksheet, TmpSh As Worksheet, Tmp As Variant, TmpName As String
'Declaration Variable
For Each Sh In Sheets 'Pour chaque feuille du classeur
If Sh.Name <> "Recap" And Not IsEmpty(Sh.Range("M5")) Then
'Si la feuille ne se nomme pas Recap et si M5 non vide
Sh.Name = Sh.Index ' Le nom de la feuille est le numéro feuille
Tmp = Split(Sh.Range("M5"), "-") ' Coupure après - dans M5
TmpName = Left(Trim(Tmp(UBound(Tmp))), 31) 'Coupure à gauche de Tmp jusqu'à 31 caractères
On Error Resume Next ' Si pas d'erreur
Set TmpSh = Sheets(TmpName) 'Feuille prend valeur de TmpName
On Error GoTo 0 'Si erreur
If Not TmpSh Is Nothing Then 'Si Feuille nommée TmpName existe déjà
Sh.Name = Left(Trim(TmpName), 29) & Sh.Index ' Feuille prend TmpName mais avec 29 caractères
Set TmpSh = Nothing 'Mettre TmpSh vide car Feuille avec ce nom existe maintenant
Else
Sh.Name = Left(Trim(TmpName), 31) 'Sinon Prise Valeur TmpName comme nom
End If
End If
Next Sh ' Feuille Suivante.
End SubMerci.