Destruction et/ou renommage de fichier Excel par macro

  • Initiateur de la discussion Initiateur de la discussion yannfran
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Y

yannfran

Guest
Bonjour,

Je suis nouveau sur ce site et vous prie par avance de m'excuser si je ne resoecte pas tous les points de la charte et du fonctionneme.

Description du contexte:

J'ai un fichier Excel, "Maitre", qui contient dans une de ses feuilles une liste d'autres fichiers Excel "Esclaves", avec pour chacun un nom différent.
Bien entendu cela permet de gérer de façon différente des données, de faire des calculs automatiques, ... sans laisons directes.
Je gère donc par macro les ouvertures/fermetures de fichiers sans problème.

Mon souci est le suivant:
pour une raison ou une autre, l'utilisateur souhaite changer le nom d'un fichier Esclave. Je peux le faire en ouvrant le fichier initial, puis faire un "SaveAs" avec le nouveau de fichier.
Mais je souhaiterais:
- soit détruire l'ancien fichier esclave
- soit le renommer entièrement
- soit le déplacer dans une directorie différente de celle utillisée

J'espère avoir été suffisament précis dans la description de mon problème.

Je remercie par avance tous ceux qui voudront bien se pencher sur ce problème, et à charge de revanche.

Cordialement

Yannick
 
Salut Yannick,

voici un code que j'ai ecris pour le meme pb il y a qq mois, ici le fichier et supprimer, je n'ai pas encore reflechi pour le deplacer...
cette macro fais une copy renommee du classeur (SaveAs) dans le meme dossier que l'ancien (appele ActivePath) puis "tue" l'ancien.

Cn = MsgBox("Are you sure you want to change the filename:" & vbCrLf & vbCrLf & ResultLab & vbCrLf & vbCrLf & _
"TO:" & vbCrLf & vbCrLf & ResultChange.Value & ".xls", vbYesNo, "Change filename")
' C'est un message de confirmation (ResultLab et ResultChange sont des labels/textboxs)

If Cn = 6 Then '=si oui

Windows("Classeur_a_effacer.xls").Activate
Set wb = ActiveWorkbook: ActivePath = Left(wb.FullName, Len(wb.FullName) - Len(ActiveWorkbook.Name))
'code trouve sur ce forum tel quel


Newname = ActivePath & ResultChange.Text & ".xls"
On Error Resume Next
ActiveWorkbook.SaveAs FileName:=Newname
'le fameux SaveAs


Df = MsgBox("Do you want to delete definitively the former file:" & vbCrLf & ResultLab, vbYesNo, "Delete ?")
'message de confirmation pour effacer


If Df = 6 Then 'si=oui
Pa = ActivePath & ResultLab.Caption
Kill Pa
End If
'L'ancien fichier est efface

ResultLab.Caption = ResultChange & ".xls"
End If


Attention, j'ai vu dans un fil que certain antivirus n'acceptent pas "Kill", et il me semble que le "repondeur" de ce fil disait que si c'est le cas, il n'y a pas d'autre moyen que d'effacer manuellement (dans ton cas tu peux essayer de deplacer).

A++, Sylsyl.

P.S.:j'ai fais copier/coller puis le menage mais il reste peut etre des lignes inutiles ou des lignes manquantes.
 
Sylsyl,
Merci pour ta réponse rapide.
Il se trouve que dans l'intervalle j'ai trouvé également de mon côté! Tant de temps pour trouvé ce petit mot: Kill

et quelle simplicté pour une fois.

Bref, en dehors des messages de confirmation à demander évidemment pas sécurité à l'utilisateur, voici ce que j'ai écrit:


'SubName 'nom du fichier d'origine, récupéré dans une UserForm
'NewSubName 'nom du nouveau nom de fichier, récupéré dans la même UserForm
'ce sont des String

'identification du fichier d'origine avec son emplacement
sNameOfFile = Application.ThisWorkbook.path & Application.PathSeparator & NewSubName & ".SUB.xls"

'ouverture du fichier
Workbooks.Open Filename:=sNameOfFile
'modification (exemple) dans le nouveau fichier
Worksheets("summary").Activate
Range("mysub") = NewSubName

'enregistrement du nouveau fichier
sNameOfFile = Application.ThisWorkbook.path & Application.PathSeparator & NewSubName & ".SUB.xls"
ActiveWorkbook.SaveAs Filename:=sNameOfFile

'recréation de l'ancien fichier avec conservation de la modification (historique)
Range("mysub") = SubName & "renamed as " & NewSubName
Range("mysub").Interior.Color = vbRed
sNameOfFile = Application.ThisWorkbook.path & Application.PathSeparator & _
"Olds" & Application.PathSeparator & SubName & ".SUB.xls"

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=sNameOfFile, writerespassword:="kscfy*5/"
Application.DisplayAlerts = True
 
Suite - (interruption suite à erreur de manip)

'le répertoire Olds a été créé avant et est fourni dans l'environnement
'l'utilisation de Application.DisplayAlerts False/True permet d'éviter le message Excel: "ce fichier existe déjà voulez-vous le remplacer
'le writerespassword permet de protéger ce fichier en écriture (le pass indiqué est à titre d'exemple, mais je vous conseille d'en avoir un aussi compliqué, et d'en garder la copie quelque part!!!)

'on ferme ce fichier
ActiveWorkbook.Close

'reprise du nom du fichier d'origine et de son emplacement
sNameOfFile = Application.ThisWorkbook.path & Application.PathSeparator & SubName & ".SUB.xls"

'Destruction finale !!!
Kill (sNameOfFile)

je sais c'est un peu long et lourd, mais c'est ce que j'ai trouvé de plus simple.

A priori Kill à l'air de bien marché sur W 2000, et avec les AntiVir que jai;

Si enrevanche quelqu'un a une astuce pour faire un déplacer direct, je suis preneur.

Merci quand même et bon week-end.

Yannick
 
bonjour


la commande Name est tutilisable pour renommer un fichier
name toto as tata (indiquer éventuellement les chemins complets)


kill supprime le fichier sans passage à la corbeille, il y a une solution à l'aide de librairies de fonction qui permetteraient l'envoi à la corbeille

j'ai une solution, à éprouver, sur cette page <http://xlbysteph.free.fr/aideinformatique/actionfichier.htm>

bye
 
Bonjour,
Merci beaucoup à sylsyl, et surtout à STephane: la doc récupérée avec le lien est très complète et répond à de nombreux problèmes de gestion de fichiers.
Cela va beaucoup me simplifier la vie.

Encore merci.

J'essaierai de revenir pour rendre la paraille à d'autres utillisateurs.

Cordialement

Yannick
 
Confirmation avant excécution d'une macro

Bonjour,

J'ai créé une macro toute bête qui excécute des copier/coller en grand nombre.
J'ai ensuite créé un menu dans ma barre d'outil avec un bouton qui excécute la macro.

Comme elle est une peu "sensible", je souhaiterais qu'un message s'affiche me demandant confirmation d'excécution de cette macro avec deux boutons (OUI et NON par exemple), afin d'éviter de la lancer par mégarde.

J'espère avoir été clair... Cette question est sans doute un grand classique mais après quelques heures de recherche, je n'ai toujours pas trouvé la solution.

D'avance merci

Eric
(Excel 2002 sous Windows XP Pro)
 
Re: Confirmation avant exécution macro

Salut Eric

Rajoutes ceci en tout début de macro

marep = MsgBox("Vous allez lancer une macro. Voulez-vous continuer ?", vbYesNo + vbExclamation)
If marep = vbNo Then
Exit Sub
End If

Bon courage

Pascal
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour