Si fichier existe alors monfichier(2)

Gozeone Messages postés 4 Date d'inscription lundi 7 mars 2016 Statut Membre Dernière intervention 8 mars 2016 - Modifié par Gozeone le 7/03/2016 à 14:13
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 9 mars 2016 à 08:01
Bonjour,

Je bloque sur une macro dans un formulaire.

Voici une partie de mon code:

ChangeFileOpenDirectory "W:\12_STR\13_FIMO\09_TOOLS\05_Verified points of comparaison"
ActiveDocument.SaveAs FileName:=Left(UserForm2.ComboBox1.Value, 5) & "_" & Left(UserForm2.ComboBox2.Value, 5) & "_" & TextBox1.Value & "_" & Right(UserForm2.TextBox2.Value, 4) & Mid(UserForm2.TextBox2.Value, 4, 2) & Left(UserForm2.TextBox2.Value, 2) & ".docm"


Avec mon code, tout fonctionne bien sauf qu'il écrase un fichier dans le même répertoire si il possède le même nom de fichier.

Je souhaiterais ceci:

If filename existe dans le répertoire then
MsgBox("Un fichier portant le même nom existe déjà, souhaitez-vous le rempalcer?", vbYesNo)

If MsgBox("Un fichier portant le même nom existe déjà, souhaitez-vous le rempalcer?") = vbNo Then
ActiveDocument.SaveAs filename(2)
Else
ActiveDocument.SaveAs FileName
End If

Else
ActiveDocument.SaveAs FileName
End If

J'ai cherché partout, mais pas évident car je suis débutant.

Je vous remercie d'avance pour l'aide que vous m'apporterez

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 mars 2016 à 14:21
Bonjour,
Question récurrente ...
Ouvre donc ton aide VBA sur la fonction Dir
Un fichier "toto" existe dans le répertoire "X:\titi" si dir("X:\titi\toto" est différent de "".
0
Gozeone Messages postés 4 Date d'inscription lundi 7 mars 2016 Statut Membre Dernière intervention 8 mars 2016
8 mars 2016 à 11:13
Bonjour,

Je te remercie pour ta réponse, le code si dessous fonctionne, mis à part mon "n"...

Je souhaiterais que si monfichier(1) existe alores monfichier(2)... si monfichier(2) existe alors monfichier (3).

Pourriez-vous m'aider?

En vous remerciant,

Function saveform() As String

n = 1
repertoire = "W:\12_STR\13_FIMO\09_TOOLS\05_Verified points of comparaison\"
PathNomExport = Left(UserForm2.ComboBox1.Value, 5) & "_" & Left(UserForm2.ComboBox2.Value, 5) & "_" & TextBox1.Value & "_" & Right(UserForm2.TextBox2.Value, 4) & Mid(UserForm2.TextBox2.Value, 4, 2) & Left(UserForm2.TextBox2.Value, 2) & "(" & n & ")" & ".docm"

If Dir(repertoire & PathNomExport) <> "" Then
MsgBox "Le fichier existe déjà", vbInformation
n = n + 1
ActiveDocument.SaveAs (repertoire & Left(PathNomExport, Len(PathNomExport) - 8) & "(" & n & ")" & ".docm")

Else
ActiveDocument.SaveAs (repertoire & PathNomExport)

End If

End Function
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 mars 2016 à 12:59
Oui ?
et qu'est-ce qui t'empêche donc de faire une toute bête boucle While avec Dir, jusqu'à ce que dir te retourne "" (pour savoir que ce fichier-là n'existe pas encore) ?
Qu'as-tu au moins tenté dans ce sens ?
Je VEUX voir cet effort-là ...
0
Gozeone Messages postés 4 Date d'inscription lundi 7 mars 2016 Statut Membre Dernière intervention 8 mars 2016
8 mars 2016 à 13:28
Bien entendu j'ai essayé...

Je suis débutant en VBA, mais je fais de mon mieux, cela fait deux jours que j'essaye de trouver une solution.

Voici mon code avec While... mais il me fait apparaitre le msgbox autant de fois que le fichier existe...

Exemple:

fichier existant: monfichier(1) - monfichier(2) - monfichier(3)

Avec mon code actuel, il me fait apparaitre 3 fois le msgbox...mais aussi non le résultat final fonctionne.

En te remerciant,

Function saveform() As String


nomexport = Left(UserForm2.ComboBox1.Value, 5) & "_" & Left(UserForm2.ComboBox2.Value, 5) & "_" & TextBox1.Value & "_" & Right(UserForm2.TextBox2.Value, 4) & Mid(UserForm2.TextBox2.Value, 4, 2) & Left(UserForm2.TextBox2.Value, 2)
repertoire = "W:\12_STR\13_FIMO\09_TOOLS\05_Verified points of comparaison\"

pathnomexport = repertoire & nomexport & ".docm"

n = 1
MemPath = pathnomexport
While Dir(pathnomexport) <> ""
MsgBox "Le fichier " & vbCr & pathnomexport & vbCr & "existe déjà", vbInformation
pathnomexport = Left(MemPath, Len(MemPath) - 5) & "(" & n & ")" & ".docm"
n = n + 1
Wend

ActiveDocument.SaveAs pathnomexport

End Function
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gozeone Messages postés 4 Date d'inscription lundi 7 mars 2016 Statut Membre Dernière intervention 8 mars 2016
8 mars 2016 à 13:56
Après test, voici la solution:

Function saveform() As String


nomexport = Left(UserForm2.ComboBox1.Value, 5) & "_" & Left(UserForm2.ComboBox2.Value, 5) & "_" & TextBox1.Value & "_" & Right(UserForm2.TextBox2.Value, 4) & Mid(UserForm2.TextBox2.Value, 4, 2) & Left(UserForm2.TextBox2.Value, 2)
repertoire = "W:\12_STR\13_FIMO\09_TOOLS\05_Verified points of comparaison\"

pathnomexport = repertoire & nomexport & ".docm"

n = 1
MemPath = pathnomexport
While Dir(pathnomexport) <> ""
pathnomexport = Left(MemPath, Len(MemPath) - 5) & "(" & n & ")" & ".docm"
n = n + 1
Wend
MsgBox "Le fichier " & vbCr & pathnomexport & vbCr & "existe déjà", vbInformation
ActiveDocument.SaveAs pathnomexport

End Function
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 mars 2016 à 14:57
Je ne vois pas le nom de fichier (pathnomexport) évoluer dans ta boucle while !


0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 mars 2016 à 17:35
Bon .... je t'ai fait un petit exemple.
Dans cet exemple, on cherche le premier fichier nommé essai#.txt (où # est variable) non encore présent dans le répertoire "D:\"
On commence par recherche essai1.txt, puis essai2.txt, etc ... jusqu'à trouver celui non encore là ===>>
nomfic = "essai"
numindex = 1
nomrep = "D:\"
ext = ".txt"
fic_a_creer = nomrep & nomfic & numindex & ext
Do While Dir(fic_a_creer) <> ""
numindex = numindex + 1
fic_a_creer = nomrep & nomfic & numindex & ext
Loop
MsgBox "le premier essai#.txt non encore existant est " & fic_a_creer

(c'est vraiment élémentaire).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/03/2016 à 08:02
Mais à ta place, j'irais jusqu'à supprimer la saisie d'un nom de fichier par l'utilisateur, puis ta "vérif", etc ...
J'utiliserais une listbox dans laquelle j'afficherais les fichiers déjà là et un simple bouton de commande. Si click sur ce dernier :
-- soit un article est sélectionné et on l'écrase
-- soit aucun ne l'est et on crée un nouveau fichier

Je n'ai pas l'intention de tout te faire et t'ôter ainsi le PLAISIR de développer.
Je vais juste te montrer comment alimenter la listbox et déterminer les "choses". A toi de faire le reste sur ces bases (vraiment facile à faire) :
nomfic = "essai"
nomrep = "D:\"
ext = ".txt"
fic = Dir(nomrep & "essai*" & ext)
ListBox1.Clear
Do While fic <> ""
If Val(Mid(fic, Len(nomfic) + 1)) > numer Then numer = Val(Mid(fic, Len(nomfic) + 1))
ListBox1.AddItem fic
fic = Dir
Loop
MsgBox "et soit tu en sélectionnes un dans la liste pour l'écraser " & _
vbCrLf & " soit tu sauvegardes dans un nouveau : " & nomfic & numer + 1 & ext

Il te faut bien entendu ajouter une listbox listbox1. Tu peux décider de ne la rendre visible que si sauvegarde demandée....


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous