[déplacé VB.NET -> VBA] Déplacement de Repertoire

Signaler
Messages postés
6
Date d'inscription
mercredi 13 mai 2009
Statut
Membre
Dernière intervention
2 octobre 2012
-
Messages postés
6
Date d'inscription
mercredi 13 mai 2009
Statut
Membre
Dernière intervention
2 octobre 2012
-
Bonjour à tous, novice en la matière, je vous présente mon souci:
Je travaille sur une base de données Suivi Intervention Client avec Excel en VB
A l'aide d'une userform, je crée un nouveau client et en même temps je crée un fichier Trame excel situé dans un repertoire spécifique à ce client.
Ensuite avec une autre userform j'ouvre le fichier trame excel qui va contenir quelques données de ma userform. Celles-ci vont ensuite être exploitées afin de renomer le fichier correctement et sauvegarder sous le repertoire du client.
Enfin une dernière userform me permet d'effacer le client de ma bdd et en même temps de créer un backup en déplaçant le repertoire vers un autre et c'est la que le problème survient.
En effet j'ai un message Run-time error '70' Permission Denied lorque le code veut déplacer le repertoire. Idem si je veux le deleter a la mano. Si je veux que cela fonctionne, il faut que ferme ma bdd excel afin de pouvoir ensuite deleter le client.
Que se passe-t-il?

6 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,
tu ne peux supprimer ni déplacer un classeur ouvert ===>> ferme-le d'abord
Ou alors : sauvegarde ton fichier par saveas là où tu veux et détruis le 1er.
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
6
Date d'inscription
mercredi 13 mai 2009
Statut
Membre
Dernière intervention
2 octobre 2012

Mon fichier Trame excel est bien enregistré et fermé. Lorsque je fais le backup ce ne sont pas les fichiers qui m'ennuient, c'est le repertoire. En effet j'ai réalisé plusieurs tests (deplacement repertoire avec "name rep origine as rep.backup" ou un copier, coller, kill et je me suis aperçu que le repertoire client et les fichiers sont bien transférés dans mon repertoire backup mais le repertoire client d'origine reste (tandis que les fichiers xls a l'intérieur de celui-ci disparraissent bien.)
Lorsque j'essai de supprimer le repertoire manuellement j'ai un message qui me dit que le repertoire est utilisé par quelqu'un ou bien unautre programme (je pense que le fichier excel Base de Données doit garder des traces temporaires de ce repertoire car comme je le dit dans le message precedent dès que je ferme le fichier xls Bdd et que je le réouvre, mon backup fonctionne correctement)
Autre test: Je crée un nouveau client et je l'efface aussitôt (sans avoir executé ma commande pour remplir mon fichier trame.xls) mon backup fonctionne
Etrange, Etrange...
Si vous avez compris mon message (car particulier), qu'en pensz-vous
Merci de votre aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Monttre ton code . On y verra plus clair !

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
6
Date d'inscription
mercredi 13 mai 2009
Statut
Membre
Dernière intervention
2 octobre 2012

Je te donne deux codes:
le 1er concerne l'effacement d'un client de la bdd avec backup
le 2nd c'est le bouton qui permet a mon fichier Trame de s'enregistrer sous le bon nom et le bon repertoire
Cela sera peut être un peu brouillon pour toi mais cela ne fait que quelques mois que je programme
Merci de ton coup de main


Private Sub CommandButton1_Click()
'Effacement Client dans le fichier xls Base de Données

Dim ChercheClient As Variant
Dim a As Variant
Dim Repertoire As String
Dim Repertoire2 As String
Dim Destination As String
Dim fso As Object

'Variable contenant le Repertoire d'accèe au Fichier Backup
Repertoire = ThisWorkbook.Path & "\BACKUP\BACKUP EFFACEMENT CLIENT.xls"

'Vérification si une selection du Client a été faite
If UserForm6.ComboBox1.Value = "" Then
MsgBox "VEUILLEZ SELECTIONNER LE NOM D'UN CLIENT", vbExclamation, "CHOIX OBLIGATOIRE"
Exit Sub
End If

UserForm2.Show
UserForm6.Hide

'Incrémentation de la Progress Bar
UserForm2.ProgressBar1.Value = 500
DoEvents

'Incrémentation de la Progress Bar
UserForm2.ProgressBar1.Value = 1000
UserForm2.Label1.Caption = "CREATION D'UN BACKUP"
DoEvents

'Création d'un backup de la fiche Client
ChercheClient = UserForm6.ComboBox1.Value
Workbooks.Open (Repertoire)
ThisWorkbook.Activate
Application.DisplayAlerts = False
Sheets(ChercheClient).Copy After:=Workbooks("BACKUP EFFACEMENT CLIENT.xls").Sheets(1)
Range("A1").Select
Sheets("INFO").Select
Application.DisplayAlerts = True
ActiveWorkbook.Save
ActiveWindow.Close

'Incrémentation de la Progress Bar
UserForm2.ProgressBar1.Value = 2000
UserForm2.Label1.Caption = "EFFACEMENT DU CLIENT DE LA BASE"
DoEvents



'Backup du Dossier de Maintenance
Repertoire2 = ThisWorkbook.Path & "\MAINTENANCE" & UserForm6.ComboBox1.Value
Destination = ThisWorkbook.Path & "\BACKUP\BACKUP MAINTENANCE" & userform6.ComboBox1.Value

Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder Repertoire2, Destination
'C'EST ICI QUE MON CODE PLANTE'
fso.DeleteFolder (Repertoire2)


'Incrémentation de la Progress Bar
UserForm2.ProgressBar1.Value = 3000

'Recherche du Nom Client et de sa position dans la Base de Données
'pour ensuite l'effacer (Répète x fois l'effacement du client si plusieurs machines)
Do
Set a = Worksheets("Base").Columns("A").Find(What:=UserForm6.ComboBox1.Value)
If a Is Nothing Then Exit Do
a.EntireRow.Delete
'Incrémentation de la Progress Bar
Progression Progression 10
UserForm2.ProgressBar1.Value = Progression
Loop

'Effacement du Client dans la Base de Données
Application.DisplayAlerts = False
Sheets(ChercheClient).Select
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

'Incrémentation de la Progress Bar
UserForm2.ProgressBar1.Value = 10000

Sheets("Accueil").Select
Unload UserForm6
MsgBox "CLIENT " & ChercheClient & " SUPPRIME DU FICHIER. " & "VOUS POUVEZ TOUJOURS RECUPERER CE CLIENT DANS LE MENU ADMINISTRATIF\RESTAURE SAUVEGARDE", vbInformation, "SAUVEGARDE"

Unload UserForm2

End Sub

********************************************************************************************

Private Sub CommandButton1_Click()
'Commande afin d'enregistrer le fichier Trame xls

Dim Fichier As String
Dim a As String

'Déverrouille la feuille Afin d'extraire les Données pour créer le nom du fichier
ActiveSheet.Unprotect Password:="2201"
'Modification du Format Date afin de l'utiliser pour le nom du fichier a sauvegarder
a = Range("M2")
a = Replace(a, "/", "_")
Range("M2") = a

'Variable contenant le Repertoire d'accèe au Fichier Backup
Fichier = Range("M1").Value & " du " & Range("M2").Value

ChDir _
ThisWorkbook.Path & "" & Range("K1").Value
ActiveWorkbook.SaveAs Filename:= _
Fichier & ".xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

'Vérouille la feuille avec le mot Password
ActiveSheet.Protect Password:="2201"
ActiveWorkbook.Save
ActiveWorkbook.Close



End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder Repertoire2, Destination
'C'EST ICI QUE MON CODE PLANTE'
fso.DeleteFolder (Repertoire2)

- la copie d'un répertoire vers l'autre ne vide pas le répertoire copié
- on ne peut détruire un répertoire non vide

Pourquoi, par ailleurs, alourdir inutilement ton appli en utilisant FSO ? FileCopy et Kill existent sous VBA... mais existe en plus, sous VBA, la méthode Move ===>>> aide en ligne ===>>

Déplace un fichier ou un dossier spécifié d'un emplacement vers un autre.




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
6
Date d'inscription
mercredi 13 mai 2009
Statut
Membre
Dernière intervention
2 octobre 2012

Salut ucfoutu, j'ai fini par trouver!!
Pour la méthode move j'avais déjà pensé & essayé (cela ne fonctionnait pas)
En fait le problème venait de mon chdir dans le deuxième fichier excel lors de son enregistrement.
En effet lorsque je voulais effacer ou bien déplacer le repertoire, windows avait alors a ce moment là "le focus" sur ce repertoire.
La solution a été de remettre un chdir "c:\windows" à la fin de mon code (juste avant ThisWorkbook.Close) pour que windows perde "le focus" sur mon repertoire.
C'est peut-être une bidouille mais ça marche et ça ne ralentit pas mon appli.
Merci de tes conseils et a bientôt peut-être