Enregistrer uniquement en .xlsm

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

dans un fichier que je diffuse, je veux interdire aux utilisateurs l’enregistrement sous un format autre que .xlsm
A partir de bribes de code récupérées à droite et à gauche, j’arrive à ce qui suit, qui marche mais dans le code intial, il y avait une instruction que je ne comprends pas (ou plus exactement je ne vois pas sa raison d’être) et que j’ai donc enlevée, sans incidence (apparemment ?)

_________________Mon code, allégé par mes soins _____________________________________________
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim varWorkbookName
If SaveAsUI = True Then
Application.DisplayAlerts = False
varWorkbookName = Application.GetSaveAsFilename(FileFilter:="Uniquement macros (*.xlsm), *.xlsm", Title:=ThisWorkbook.Name)
ThisWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=52
Application.DisplayAlerts = True
Cancel = True
End If
End Sub


_____________________ Le code initial :avec ligne 7 l’instruction mystère ___________________
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim varWorkbookName
If SaveAsUI = True Then
Application.DisplayAlerts = False
varWorkbookName = Application.GetSaveAsFilename(FileFilter:="Excel Macro Enabled Workbook (*.xlsm), *.xlsm", Title:=ThisWorkbook.Name)
If InStr(varWorkbookName, "\") > 0 Then ThisWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=52
Application.DisplayAlerts = True
Cancel = True
End If
End Sub
____________________________________________________________________________________

Ma question porte sur InStr(varWorkbookName, "\") > 0
… je lis à droite et à gauche que InStr(varWorkbookName, "\") > 0 permet de savoir si le caractère « \ » est bien présent dans la chaîne et donc si c’est on a bien un chemin d’accès (à cause des « \ »)

Je ne comprends pas pourquoi cette instruction car pour moi, varWorkbookName remonte quoi qu’il arrive le chemin d’accès

Qui peut m’éclairer sur l’intérêt de cette instruction et surtout mon code (sans Instr …) est-il valide ou recèle-t-il un bug à venir, par exemple dans un cas extrême ?
Merci d'avance
 

Zon

XLDnaute Impliqué
Re : Enregistrer uniquement en .xlsm

Salut,

Application.GetSaveAsFilename affiche la boite de dialogue enregistrer sous afin de récupérer le chemin d'accés pour toi programmeur (si tu ne fais rien ça n'enregistre pas)=>ce n'est pas la" même " que fichier /enregistrer sous où là tu ne peux pas interagir.

si tu cliques sur annuler , ta variable varworkbookname est = à false. donc erreur d'éxécution sans le instr.

A+++
 

Sebast

XLDnaute Impliqué
Re : Enregistrer uniquement en .xlsm

Salut Zon,

merci pour ta réponse, cependant :

le chemin d'accès se récupère bien tout seul, pour preuve place l'instruction MsgBox "Le nom est " & varWorkbookName
avant ThisWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=52 et tu verras bien que ça le remonte automatiquement
Dans ces conditions, pourquoi tester la présence de "\" si quoi qu'il arrive, on est sûr d'être en présence d'un chemin d'accès ?

à +
 

Sebast

XLDnaute Impliqué
Re : Enregistrer uniquement en .xlsm

Re,

tu as raison, dans ce cas je remonte le nom "FAUX.xlsm" sans aucun chemin d'accès !
Dans ces conditions, l'instruction If InStr(varWorkbookName, "\") > 0 se remplacer par if varWorkbookName<>False ?
ou faut-il la remplacer par varWorkbookName<>Faux ?

car je persiste à dire que c'est plus intuitif et lisible que InStr(varWorkbookName, "\") > 0

Merci pour tes lumières
 

Zon

XLDnaute Impliqué
Re : Enregistrer uniquement en .xlsm

Re,

en effet, en testant on aura toujours un chemin d'accés donc tu as raison Instr n'est pas forcément le plus judicieux

alors que if varWorkbookName<>False then
ThisWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=52
else
'ici forcer l'enregistrement dans une répertoire de ton choix , soir en false.xlsm , à toi de voir ,avertir l'utilisateur ...


end if

A+++
 

Discussions similaires

Réponses
2
Affichages
185

Statistiques des forums

Discussions
312 103
Messages
2 085 310
Membres
102 859
dernier inscrit
Diallokass