Problème avec SaveCopyAs

white-spirit

XLDnaute Occasionnel
Bonjour le Forum,

je bloque depuis qq jours sur le problème suivant:

- dans le déroulement d'une macro, je crée une copie d'une feuille pour l'enregistrer sous forme d'un classeur, en l'état de l'instant, avec la dénomination correspondante.

voici le code: ( les variables "durée" & "épreuve" sont renseignées préalablement..)

Dim nom_fichier As String
nom_fichier = "PROVISOIRE" & "_" & durée & "_" & épreuve

'définir dossier
Dim dossier As String
Range("B1").Select
dossier = ActiveCell.Text

'créer dossier s'il n'existe pas

On Error Resume Next
ChDir "ActiveWorkbook.Path & " \ " dossier"
If Err <> 0 Then
MkDir ActiveWorkbook.Path & "\" & dossier
End If

'définir chemin
Dim chemin As String
chemin = ActiveWorkbook.Path & "\" & dossier & "\" & nom_fichier

'créer la copie!
ActiveSheet.Copy
ActiveWorkbook.SaveCopyAs chemin


et c'est ici que cela se gâte, car le dossier est créé (ou existait déja), mais point de classeur Excel dedans ....!!

Je comprends d'autant moins que ceci fonctionnait parfaitement depuis 2 ans, j'ai bien sur fait d'autres évolutions dans mon appli, mais rien à ce niveau ...

J'ai cru que l'install récente de l'Add-In Open Office ( pour ouvrir des données que je reçois) était en cause --> désinstallation --> ça ne change rien...

Autre piste : j'ai aussi installé récemment DisplayFusion, gestionnaire de fenêtres, serait-ce la cause ?
Je vais essayer en le désinstallant... cependant si qq'un connait des causes de dysfonctionnement de SaveCopyAs, je suis preneur d'avis ....

Merci d'avance.

Cdlt

WS
 

Roland_M

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

bonsoir à tous,

c'est quoi ça: (les guillemets !?)
ChDir "ActiveWorkbook.Path & " \ " dossier"

ça ne peut pas fonctionner !?

EDIT:

tout à fait camarchepas !
c'est parce que ça m'avait frappé !
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

Bon,

@ Bonjour Roland : Bien vu , les espaces

Cela ne solutionnera pas le pourquoi mais tu peux essayer ceci au lieu de Savecopyas :

with ActiveWorkbook.SaveAs Filename:=Fichier : .Close False :end with
 
Dernière édition:

white-spirit

XLDnaute Occasionnel
Re : Problème avec SaveCopyAs

Bsr Roland, Re Camarchepas,

1- pour Roland: en voyant la remarque sur les guillemets, je me suis dit que j'étais débile... mais sans, ça ne fonctionne pas plus...

De surcroit, j'ai vérifié des anciennes applis qui contenaient cette partie de macro, il y avait les guillemets et ça marchait bien ! Donc le pb n'est pas la, parce que j'ai testé un petit bout de code dans un classeur simple ( faire un SaveCopyAs avec le contenu d'une cellule, pas de ChDir...) ça ne marche pas non plus ...

J'ai pensé que l'installation récente de DisplayFusion pouvait être responsable, j'ai donc restauré à la veille, sans succès non plus pour l'enregistrement...

Je finis par penser que c'est un pb Windows, mais pourquoi tt à coup ?

2- pour Camarchepas. Je souhaite essayer ta suggestion de code, mais je n'arrive pas à l'intégrer : ça me surligne Filename, et je ne sais pas comment intégrer le nom Fichier. Peux-tu m'éclairer STP.

Je vais peut-etre essayer sur un autre PC qui n'a jamais vu Excel, ni ces applis là ...
Merci à vous de vous intéresser à mon problème,

cordialement

@WS
 

Roland_M

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

re

tu dis:
De surcroit, j'ai vérifié des anciennes applis qui contenaient cette partie de macro, il y avait les guillemets et ça marchait bien ! ...

oui mais tu oublies qu'il y a: on error resume next qui fait passer out !
mets en rem on error resume next
effectues le pas à pas (F8) et tu verras qu'il y erreur !

maintenant il est vrai que ça ne solutionne pas le problème !
mais c'est un bug !
 

white-spirit

XLDnaute Occasionnel
Re : Problème avec SaveCopyAs

re,

Exact Roland !!

Je n'avais pas tenu compte de la formule "magique", et c'est vrai que ton raisonnement est fondé ! Pour exemple, la suite qui prévoit la création du dossier (si absent) ne contient pas de guillemets ! Merci pour cela.

Sur le reste, ben j'essaie plein de trucs, sans succès ....

ça doit-être un truc très simple... ou très tordu ! Mais on y arrivera !!!

Cordialement

@WS
 

camarchepas

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

Peut être plus compréhensible pour toi
Et oui , le fameux on error , magique , mais aussi trés d'anges heureux


Code:
'définir chemin
Dim chemin As String
chemin = ActiveWorkbook.Path & "\" & dossier & "\" & nom_fichier

'créer la copie!
ActiveSheet.Copy
with ActiveWorkbook
 .SaveAs Filename:=chemin 
 .Close False 
end with
 

Staple1600

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

Bonsoir à tous


Suggestion
'définir dossier
Dim dossier As String
Range("B1").Select
dossier = ActiveCell.Text
Si B1 Est vide, alors dossier =vbNullstring
Ce qui peut être fâcheux, non ? Surtout pour MkDir ;)

et nomfichier est égal à quoi ?

On le voit pas dans le code VBA du fichier joint (à 16h47 par white-spirit), ni dans la copie partielle du code VBA dans le corps du message.
 

white-spirit

XLDnaute Occasionnel
Re : Problème avec SaveCopyAs

Bonsoir tt le monde ...

pour Staple1600, la cellule B1 ne peut être vide, donc pas de souci pour l'instant, mais c'est vrai il faudrait l'envisager..
Pour info, le contenu est du texte (intitulé d'une épreuve sportive).

Pour Job75, j'ai remis un peu d'ordre, j'utilise donc "On Error Resume Next" pour contourner le pb de test d'existence du "dossier" et/ou le créer si absent, je rajoute donc "On Error Goto 0" pour arrêter la formule "passe-partout", el là, qd j'essaie de "sauvegarder sous" la copie de feuille que je viens de faire, j'ai ce message :

Message.jpg


Ce qui me parait bizarre ce sont les caractères situés à la fin de la chaine...(juste après xv)

Il doit bien y avoir un bug qq part, parce cela fonctionnait bien avant ..

Merci pour vos réponses

Cordialement

@WS
 

Pièces jointes

  • Message.jpg
    Message.jpg
    29.6 KB · Affichages: 50
  • Message.jpg
    Message.jpg
    29.6 KB · Affichages: 54

Roland_M

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

re

essais ton code avec suivi des messages !
et bien voir les : \ et extension ...
exp >>> C:\documents\. . .

Code:
Sub XXXX()
Dim nom_fichier As String
nom_fichier = "PROVISOIRE" & "_" & durée & "_" & épreuve

MsgBox nom_fichier '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 
'définir dossier
Dim dossier As String
Range("B1").Select
dossier = ActiveCell.Text

MsgBox dossier '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 'créer dossier s'il n'existe pas

 On Error Resume Next
 ChDir ActiveWorkbook.Path & "\" & dossier
 If Err <> 0 Then
    MkDir ActiveWorkbook.Path & "\" & dossier
 Else
    MsgBox "erreur !", vbCritical
 End If

 'définir chemin
 Dim chemin As String
 chemin = ActiveWorkbook.Path & "\" & dossier & "\" & nom_fichier

MsgBox chemin '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

'créer la copie!
ActiveSheet.Copy

Application.ScreenUpdating = True
MsgBox "classeur créé ! il sera sauvegardé après ce message", vbInformation

With ActiveWorkbook
  .SaveAs Filename:=chemin
  .Close False
End With

End Sub
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

Bonnjour à tous,

Bon j'ai remis un peu d'ordre dans le code.

et temporairement alimenté toutes les variables par des valeurs connues

Aprés 200 boucles et 200 fichiers sauvegardés voici le code principal

Code:
Sub test()

Dim dossier As String, nom_fichier As String, CheminEntier As String, Chemin As String
Dim durée As Long, épreuve As String
 'Pour test, variables forcées
  durée = 125
  épreuve = "Remplissage_tonneau"

'définir nom du fichier
 nom_fichier = "PROVISOIRE" & "_" & durée & "_" & épreuve & ".xlsx"
'définir dossier
 dossier = "tonneau" 'Range("B1").Text
'définir chemin
 Chemin = ActiveWorkbook.Path & "\" & dossier
'définir chemin complet
 CheminEntier = Chemin & "\" & nom_fichier

'créer dossier s'il n'existe pas
If Dir(Chemin, vbDirectory) = "" Then MkDir Chemin

'créer la copie de la feuille active!
 ActiveSheet.Copy
'Sauvegarde une copie du classeur actif
 ActiveWorkbook.SaveCopyAs CheminEntier
 
 ' Fermeture du fichier sauvegardé
 ActiveWorkbook.Close False
End Sub
 

job75

XLDnaute Barbatruc
Re : Problème avec SaveCopyAs

Bonjour à tous,

Si la variable durée est au format "Date" ou "Heure" elle contient peut-être les caractères "/" ou ":".

Ces caractères sont interdits dans les noms de fichiers.

Il faut formater cette variable sans ces caractères, par exemple pour les heures :

Code:
durée = Format(durée, "hh\hmm")
ou tout bêtement :

Code:
durée = Replace(durée, ":", "h")
Edit : pour les heures supérieures à 24 heures ce peut être plus compliqué.

Bonne journée.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
313 770
Messages
2 102 235
Membres
108 181
dernier inscrit
Chr1sD