Si fichier existe alors monfichier(2)

Gozeone 4 Messages postés lundi 7 mars 2016Date d'inscription 8 mars 2016 Dernière intervention - 7 mars 2016 à 14:09 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 7 mars 2016 à 14:21
0
Utile
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 "".
Commenter la réponse de ucfoutu
Gozeone 4 Messages postés lundi 7 mars 2016Date d'inscription 8 mars 2016 Dernière intervention - 8 mars 2016 à 11:13
0
Utile
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
Commenter la réponse de Gozeone
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 8 mars 2016 à 12:59
0
Utile
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à ...
Commenter la réponse de ucfoutu
Gozeone 4 Messages postés lundi 7 mars 2016Date d'inscription 8 mars 2016 Dernière intervention - 8 mars 2016 à 13:28
0
Utile
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
Commenter la réponse de Gozeone
Gozeone 4 Messages postés lundi 7 mars 2016Date d'inscription 8 mars 2016 Dernière intervention - 8 mars 2016 à 13:56
0
Utile
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
Commenter la réponse de Gozeone
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 8 mars 2016 à 14:57
0
Utile
Je ne vois pas le nom de fichier (pathnomexport) évoluer dans ta boucle while !


Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 8 mars 2016 à 17:35
0
Utile
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).
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 9/03/2016 à 08:02
0
Utile
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.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.