VBA : "enregistrer sous" sans boite de dialogue

rico83600

XLDnaute Occasionnel
Bonjour,

j'affecte a un bouton une macro qui sert a enregister ce fichier sous un nom différent (pour ne pas l'écraser). Ce nom différent est composé du nom d'origine auquel je rajoute +1 à une variable contenu dans une case.

C'est a dire que mon fichier se nomme Fichier 47.xls
Le nombre 47 se trouve dans mon fichier dans la cellule B13
Et lorsque que click sur le bouton je veux qu'il me fasse une sauvegarde du fichier sous Fichier 48.xls.

Voici ce que je suis arrivé a faire pôur le moment :

Code:
Sub EnregistrerSous()

    Dim NomFichier, x As String, w As String, NomDefaut As String
    
    NomVariable = Range("B13").Value
    x = ThisWorkbook.Name
    w = " " & NomVariable
    
    NomDefaut = x & w
    
    NomFichier = Application.GetSaveAsFilename(NomDefaut, "Microsoft Excel (*.xls), *.xls")
    
    If NomFichier = False Then
        MsgBox "Enregistrement annulé."
    Else
        MsgBox NomFichier
    End If

End Sub

De cette facon, il va m'oubrir la boite de dialogue "enregister sous" avec comme nom de fichier prérempli "Fichier 47.xls 47"

Comment lui faire comprendre que je veux qu'il me fasse un enregistrer sous Fichier 48.xls (=47+1=B13+1)

De plus je souhaiterais que la boite de dialogue n'apparaisse pas mais qu'il me fasse la sauvegarde directement dans le même dossier que le fichier actif.

Merci d'avance
 
Dernière édition:
G

Guest

Guest
Re : VBA : "enregistrer sous" sans boite de dialogue

Bonjour,

Si le nom de fichier ne contient qu'une espace avant le numéro à remplacer:

Code:
Sub EnregistrerSous()
 
    Dim x As String
 
 
     x = ThisWorkbook.Name
     'substituer les caractères qui suivent l'espace, jusqu'au . de l'extension par le contenu
     'de B13+1
     Mid(x, InStr(1, x, " ") + 1, InStr(1, x, ".") - InStr(1, x, " ") - 1) = Range("B13").Value + 1
     'Enregistre une copie du fichier sous le nouveau nom
    ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & x
 
 
End Sub

Seule la ligne Mid a été testée.

A+
 

rico83600

XLDnaute Occasionnel
Re : VBA : "enregistrer sous" sans boite de dialogue

OK, ca marche tres bien, merci.

Par contre j'essaye de comprendre mais je n'y arrive pas. Si par exemple tu veux (si si ^^) qu'on utilise 3 espaces avant le nombre à remplacer, comment fait ? J'ai essayé de toucher à quelques trucs ca n'a rien donné et je ne trouve rien sur le net pour m'y aider.

Par exemple si le nom du fichier est : Fichier microsoft excel 54.xls
 
G

Guest

Guest
Re : VBA : "enregistrer sous" sans boite de dialogue

Re,

S'il y a plusieurs espaces, remplacera ce qui suit le dernier, jusqu'au point:

Code:
Mid(x, InStrRev(x, " ") + 1, InStrRev(x, ".") - InStrRev(x, " ") - 1) = 58
Où 58 est un n° arbitraire pour test
A+
 

rico83600

XLDnaute Occasionnel
Re : VBA : "enregistrer sous" sans boite de dialogue

Merci, ca marche super.

Par contre ( XD), dans mon nouveau fichier enregistré, le nombre en B13 (correspondant au numéro de fichier auquel nous ajoutons +1 à chaque mise a jour) n'a pas pris +1 lui non plus.

Donc si je sauvegarde ce nouveau fichier avec la macro il va s'ecraser car portera le même numéro ..

Il faudrait donc que le nombre en B13 s'actualise quand le nom du fichier change.
Exemple, si on passe de "fsdklf dflkdsf dfsd 55.xls" à "fsdklf dflkdsf dfsd 56.xls", il faut qu'en B13 on passe aussi de 55 à 56.

Pour cela je pensais faire ca :

=STXT(CELLULE("filename";A1);TROUVE("[";CELLULE("filename";A1))+1;SOMME(TROUVE({"[";"]"};CELLULE("filename";A1))*{-1;1})-1)

De ce fait j'extrais le nom du classeur (dsqlmdksq sldkqslm sldk 55.xls)

Maintenant j'essaye de faire un substitue() ou autre pour n'avoir que le numéro 55 dans cette cellule (ou une cellule a coté), mais je n'y arrive pas ..
 
G

Guest

Guest
Re : VBA : "enregistrer sous" sans boite de dialogue

Re,

Ou par vba après :
Code:
ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & x
Rajouter la ligne
Range("B13")=Range("B13")+1

On peut changer aussi avant l'enregistrement, avant de récupérer la valeur, mais si par hasard l'enregistrement ne se faisait pas....

A+
 

rico83600

XLDnaute Occasionnel
Re : VBA : "enregistrer sous" sans boite de dialogue

Par contre ce qui m'interesserait, meme si cela mériterait un nouveau topic, c'est d'afficher la date de création de ces nouveaux fichiers dans une cellule.

J'ai trouvé pas mal de macro sur le net, mais ca me met les dates de sauvagarde dans le fichier où j'ai cliqué sur "energistré sous" et non dans le fichier créé ...
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87