XL 2016 Macro pour renommer un fichier, un onglet et ...

luke3300

XLDnaute Impliqué
Bonjour le forum,

J'essaye de créer une macro qui me permettrait de trouver un fichier (avec les 4 derniers caractères du nom qui sont toujours aléatoires) dans un dossier de travail, de le renommer, de renommer et copier un de ses onglets (le 1er) dans un autre fichier déjà ouvert et au départ duquel je travaillerais.
J'ai fais un dossier avec les classeurs nécessaires pour l'exemple.
En clair, du classeur "Visites.xlsm", je clic sur un bouton qui cherche dans le dossier courant, le classeur nommé "AC25_CARS_2108.xlsx" (et dont les 4 derniers caractères sont à chaque fois différents), le renomme en "AC25_CARS.xlsx", l'ouvre et renomme la feuille "AC25_CARS_2108" (dont les 4 derniers caractères sont aussi à chaque fois différents) en "AC25_CARS" et copie cette feuille dans le classeur ouvert avant l'onglet "TAFF". Le tout évidement comme si de rien n'était ;)
Je viens de tester diverses solutions trouvées sur le forum mais sans résultats ...
Merci à tous pour votre aide et agréable journée.
 

Pièces jointes

  • MyTV.zip
    26 KB · Affichages: 37

Lone-wolf

XLDnaute Barbatruc
Bonjour Stephane, le Forum :)

Si tu as 10 classeurs nommés AC25_CARS_xxxx, tu ne peux renommer les fichiers qu'avec AC25_CARS, car tu aura un message d'erreur vu que le 1er AC25_CARS existe déjà.
 
Dernière édition:

luke3300

XLDnaute Impliqué
Bonjour Lone-wolf,

Le travail se fait toujours avec 1 classeur AC_CARS_XXXX à la fois, maintenant je suis obligé de faire la manipulation à chaque utilisation. J'aimerais que ce soit automatisé :)
Aujourd'hui j'ai peut-être celui qui se termine par 2108 mais demain ce sera 9997 ou 1112, etc ...
 

luke3300

XLDnaute Impliqué
@Lone-wolf, ce sont des fichiers à usage unique.
Les résultats sont écrasés une fois le travail fait. En fait je retire les infos qu'il me faut puis c'est fini et je passe à un autre. Il n'y a jamais qu'un fichier à la fois la seule différence c'est qu'ils ont chacun un code différent à la fin.
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re

@luke3300

Là j'ai du mal à saisir. Tu as le fichier 9999 par exemple, ensuite le fichier 1111. Une fois les données copiées, tu le supprime? Puis-ce que tu dit n'avoir qu'un seul fichier à la fois. Si c'est le cas, à quoi ça sert de le renommé?? :rolleyes:

Sinon: un essai comme ceci. En cellule Z1, il y a un numéro qui s'incrémente à chaque nouvelle feuille créée.
 

Pièces jointes

  • MyTV.zip
    28.4 KB · Affichages: 31
Dernière édition:

luke3300

XLDnaute Impliqué
Re,
Le fait qu'on le renomme est qu'une fois que l'onglet est copié dans le classeur, d'autres macros interviennent sur l'onglet nommé comme tel.
Donc oui j'ai un fichier à la fois et il doit être absolument nommé comme j'ai décris.:)
Je viens de tester ton fichier mais est-il possible de ne pas passer par un autre dossier que le courant?
Donc que la macro cherche le fichier dans le dossier courant. L'incrémentation ne m'est pas utile ici ... est-il possible de ne pas l'inclure?

Merci beaucoup pour ton aide ;)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Si j'ai compris ce que doit faire la macro
VB:
Sub Test()
Dim ws As Worksheet, wb As Workbook, fichier As Variant
Set ws = ActiveSheet
fichier = Application.GetOpenFilename("Fichier Excel (*.xls?),*.xls?", , "Choisissez le classeur")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False: Application.DisplayAlerts = False
Set wb = Workbooks.Open(Filename:=fichier)
wb.Sheets("AC25_CARS_2108").Copy After:=Workbooks("Visites.xlsm").Sheets(1)
Xfz = Sheets("AC25_CARS_2108").Name
Sheets("AC25_CARS_2108").Name = Mid(Xfz, 1, Len(Xfz) - 5)
wb.Close False
End Sub

EDITION1: Bonsoir job75
EDITION2: Bonsoir Lone-Wolf
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour luke3300, Lone-wolf, JM,

Le code du bouton :
Code:
Private Sub CommandButton1_Click()
Dim chemin$, ext$, fichier$, fich$, nomfeuille$
chemin = ThisWorkbook.Path & "\"
ext = ".xlsx" 'extension, modifiable
fichier = "AC25_CARS" & ext
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Workbooks(fichier).Close False 'si le fichier est ouvert on le ferme
Kill chemin & fichier 'et on le supprime"
fich = Dir(chemin & Replace(fichier, ext, "_????" & ext)) '1er fichier trouvé
Name chemin & fich As chemin & fichier 'renomme le fichier
With Workbooks.Open(chemin & fichier) 'l'ouvre
    nomfeuille = Replace(fichier, ext, "")
    .Sheets(Replace(fich, ext, "")).Name = nomfeuille 'renomme la feuille
    ThisWorkbook.Sheets(nomfeuille).Delete 'supprime la feuille si elle existe
    .Sheets(nomfeuille).Copy Before:=ThisWorkbook.Sheets("TAFF") 'copie la feuille
    .Close True 'enregistre le fichier et le ferme
End With
Sheets("TAFF").Activate
End Sub
Fichiers zippés joints.

A+
 

Pièces jointes

  • MyTV.zip
    33.8 KB · Affichages: 45

luke3300

XLDnaute Impliqué
Bonjour le forum, Lone-wolf, Staple1600, Job75,
Un énorme merci pour votre aide.
Je vais tester tout cela aujourd'hui et vous tiens au courant ...
J'ai une petite question concernant excel 2016 (office 365) ... depuis quelques temps, il est très lent pour exécuter les macros et ce sur n'importe lequel de mes PC, quelqu'un saurait-il pourquoi?
Je vous souhaite une agréable journée ensoleillée :):):)
 

Discussions similaires

Statistiques des forums

Discussions
311 709
Messages
2 081 754
Membres
101 812
dernier inscrit
trufu