Destruction et/ou renommage de fichier Excel par macro

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
 
S

sylsyl

Guest
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.
 
Y

yannfran

Guest
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
 
Y

yannfran

Guest
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
 
S

STephane

Guest
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
 
Y

yannfran

Guest
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
 
E

Eric

Guest
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)
 
P

Pascal76

Guest
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
 
E

Eric

Guest
Re: Confirmation avant exécution macro

Merci beaucoup, c'est parfait !

Et bravo pour la rapidité, quelques minutes après ma question voilà la réponse que je cherche depuis des heures...

Encore merci

Eric
 

Discussions similaires

Réponses
2
Affichages
325

Statistiques des forums

Discussions
312 438
Messages
2 088 409
Membres
103 844
dernier inscrit
salma123