Microsoft 365 Creer un classeur dans Application.FileDialog si il n'existe pas

manu_tella

XLDnaute Junior
Bonjour à tous,

Je souhaiterai savoir si il est possible de créer "automatiquement" un classeur avec un nom par défaut dans le cas ou l'utilisateur ne trouve pas son bonheur parmi les fichiers existants lors de l'ouverture de Application.FileDialog.

En fait j'ai un bout de code qui permet d'aller pointer dans un dossier un fichier Excel existant afin de le compléter. Malheureusement je n'arrive pas à gérer le cas ou l'utilisateur ne sélectionne pas de fichier car il ne trouve pas con bonheur... La seule méthode que j'ai trouvé c'est clic droit, créer un fichier excel et pointer dessus mais c'est pas simple et surtout pas intuitif.

Le morceau de code concerné

With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
'Définit un nom de fichier par défaut
.InitialFileName = defaut & ".xls"
End With
Application.FileDialog(msoFileDialogOpen).Show
Chemin = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
NomFic_cible = Split(Chemin, "\")(UBound(Split(Chemin, "\")))

et après la suite du code fonctionne bien.

j'arrive à ouvrir la fenêtre avec un nom par défaut mais quand je fais ouvrir j'ai le message suivant:
"fichier introuvable, vérifiez le nom du fichier et ressayez".

ce que je souhaiterai c'est générer le fameux fichier excel "defaut.xls" si l'utilisateur n'a rien sélectionné d'autre

est-il possible de gérer cette erreur à partir de la fenêtre ou faut-il la gérer autrement?
je suis preneur de vos conseils

d'avance merci

manu
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Personnellement j'utilise plutôt ça, qui me parait plus simple :
VB:
Sub test()
   Dim ChNomF As Variant, Wbk As Workbook
   ChNomF = Application.GetOpenFilename("Classeur,*.xls*")
   If VarType(ChNomF) <> vbString Then Exit Sub
   Set Wbk = Workbooks.Open(ChNomF)
   End Sub
 

Dranreb

XLDnaute Barbatruc
Bon, alors :
VB:
Sub test()
   Dim ChNomF As Variant, Wbk As Workbook
   ChNomF = Application.GetOpenFilename("Classeur,*.xls*")
   If VarType(ChNomF) = vbString Then
      Set Wbk = Workbooks.Open(ChNomF)
   Else
      Set Wbk = Workbooks.Add
      End If
   End Sub
Mais s'il voulait faire ça juste pour éviter un plantage …
 

manu_tella

XLDnaute Junior
hello,

Merci pour vos réponses.
Désolé si le besoin est pas clair. je vais essayer de détailler les 2 cas:

1 - l'utilisateur pointe sur un fichier excel visible dans la fenêtre, il clic sur ouvrir, la suite du code se déroule bien

2- l'utilisateur ne trouve pas le fichier Excel qu'il souhaite et dans ce cas quand il clique sur ouvrir il a le message d'erreur du fichier introuvable... Je voudrais en lieu et place de ce message créer un fichier avec un nom par défaut et ensuite dérouler la suite du code

il s'agit donc bien de gérer la création d'un nouveau classeur si pb.

je vais essayer avec getopenfilname si vous pensez que c'est plus approprié

manu
 

patricktoulon

XLDnaute Barbatruc
re
ce que je souhaiterai c'est générer le fameux fichier excel "defaut.xls" si l'utilisateur n'a rien sélectionné d'autre
peut être faire saves As dans le dossier préalablement choisi dans le dialogue
ce qui rend compliqué la chose car une annulation ou le choix defaut dans le dialogue ne renvoie pas le chemin du dossier éventuellement choisi dans le dialogue
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
hello,

Merci pour vos réponses.
Désolé si le besoin est pas clair. je vais essayer de détailler les 2 cas:

1 - l'utilisateur pointe sur un fichier excel visible dans la fenêtre, il clic sur ouvrir, la suite du code se déroule bien

2- l'utilisateur ne trouve pas le fichier Excel qu'il souhaite et dans ce cas quand il clique sur ouvrir il a le message d'erreur du fichier introuvable... Je voudrais en lieu et place de ce message créer un fichier avec un nom par défaut et ensuite dérouler la suite du code

il s'agit donc bien de gérer la création d'un nouveau classeur si pb.

je vais essayer avec getopenfilname si vous pensez que c'est plus approprié

manu
comme je l'ai dis juste au dessus tu te heurte a un probleme
a savoir le chemin de destination qui n'est pas renvoyé sur l'erreur ou annulation
perso fait une recherche sur Chdrive et chdir qui te permettent d'ouvrir ta boite de dialogue sur un dossier précis
tu aura ainsi ton chemin de base pour la création de ton fichier avec curdir
 

Dranreb

XLDnaute Barbatruc
Essayez peut être comme ça :
VB:
Sub test()
   Dim ChNomF As Variant, Wbk As Workbook
   ChNomF = Application.GetOpenFilename("Classeur,*.xls*")
   If VarType(ChNomF) = vbString Then
      Set Wbk = Workbooks.Open(ChNomF)
   Else
      ChNomF = Application.GetSaveAsFilename("Défaut.xlsx", "Classeur,*.xlsx")
      If VarType(ChNomF) <> vbString Then Exit Sub
      Set Wbk = Workbooks.Add
      Wbk.SaveAs ChNomF
      End If
   End Sub
 

patricktoulon

XLDnaute Barbatruc
re
@Dranreb relire post #7,#8
ok pardon le 2d dialog est le saveasfilename
sinon simplement
VB:
Sub test()
    Dim ChNomF As Variant, Wbk As Workbook
    ChDir (Environ("userprofile") & "\DeskTop") 'chemin par defaut
    ChNomF = Application.GetOpenFilename("Classeur,*.xls*")
    If VarType(ChNomF) = vbString Then
        Set Wbk = Workbooks.Open(ChNomF)
    Else
        Set Wbk = Workbooks.Add
        Wbk.SaveAs CurDir & "\" & "Défaut.xlsx"
    End If
End Sub
 
Dernière édition:

manu_tella

XLDnaute Junior
merci a tous les 2.

Ca fonctionne bien pour le cas ou le fichier existe et est sélectionné mais ca ne marche pas dans l'autre cas.
Je vais faire une msgbox a l'exécution du code pour prévenir de faire clic-droit et créer un fichier excel pour contourner le désagrément et surtout prévenir l'utilisateur.

manu
 

Dranreb

XLDnaute Barbatruc
Ça devrait marcher pourtant. Aussi bien la mienne permettant à l'utilisateur de confirmer son intention d'ouvrir un nouveau classeur, que celle de patricktoulon qui le crée systématiquement.
Votre erreur est peut être dans la suite du code, en essayant bêtement de retrouver le classeur dans la collection Workbooks avec un mauvais nom, au lieu d'utiliser simplement Wbk comme expression Workbook.
 

manu_tella

XLDnaute Junior
hello

encore merci pour vos réponses.

j'ai isolé le codé dans un nouveau fichier excel pour ôter les doutes sur mon code.
Alors je corrige, ca fonctionne mais avec un subtilité très particulière qui n'est pas du tout intuitive :)

A l'ouverture du Application.GetOpenFilename, si l'utilisateur ne sélectionne pas de fichier alors il faut fermer (avec la croix) ce qui génère ensuite:
- dans le code de patricktoulon l'enregistrement direct d'un fichier excel défaut
- dans le code de Dranreb l'ouverture du Application.GetSaveAsFilename

(petite préférence pour la seconde option car elle laisse plus de choix).

Pas super intuitif de fermer la fenêtre voila le pourquoi de ma réponse d'hier ;)
En fait l'idée aurait été dans la fenêtre Application.GetOpenFilename, suggererer un nom par défaut (genre initial.value) et quand on clique sur ouvrir si le nom existe pas dans le dossier alors le créer automatiquement.

en espérant avoir assez détaillé les cas.

manu
 

Discussions similaires

Réponses
1
Affichages
305
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 279
Messages
2 086 724
Membres
103 379
dernier inscrit
Berzekiel