Verifier la présence d'un fichier en VBA

Fermé
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 - 3 déc. 2019 à 08:29
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 - 3 déc. 2019 à 15:59
Bonjour à tous,

Dans un classeur comportant plusieurs macros l’une d’elle vérifie la présence ou le chemin des répertoires et fichiers nécessaires à l’exécution de l’ensemble.
J’ai pu modifier sans problème tous les tests sur le répertoires, mais dans la ligne de code ci-dessous je vérifie la présence d’un fichier dans un répertoire :
If Not exist("C:\__Jugement_FDT\Diaporama\Palmares.xlsx ") Then MsgBox "Le fichier Palmares est introuvable.": Exit Sub

Je souhaiterais remplacer le chemin du répertoire par une « variable+le nom du fichier » ou par deux variables pour obtenir quelque chose comme :
If Not exist("Ma variable\Palmares.Xlsx") Then MsgBox "Le fichier Palmares est introuvable.": Exit Sub
ou
If Not exist("Ma variable\Mon fichier") Then MsgBox "Le fichier Palmares est introuvable.": Exit Sub

Je n’y suis pas arrivé et c’est pour ça que je sollicite votre aide.
D’avance merci.
Mistral
A voir également:

3 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
3 déc. 2019 à 08:41
Bonjour,

Explications ici (concaténation) : http://boisgontierjacques.free.fr/pages_site/chaines.htm
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
3 déc. 2019 à 10:48
Bonjour,

il suffit de vérifier si le fichier existe comme ceci:

https://excel-malin.com/codes-sources-vba/vba-verifier-si-le-fichier-existe/

0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
3 déc. 2019 à 14:29
Bonjour Pivert,

C'est toujours pour le même classeur que celui ou tu m'as déjà aidé.
Comme c'est un classeur qui sera à la disposition de plusieurs personnes avec des ordinateurs différents et pas forcément la même arborescence, je ne peux pas mettre le nom d'un chemin en dur dans la macro.

Grace à toi je sais récupérer le chemin d'une répertoire. Je sais aussi affecter un chemin à une variable.
L'idée c'est de vérifier la présence du fichier avec une variable pour le chemin et une autre pour le nom de fichier.

Le dernier code que j'ai mis précédemment fonctionne correctement mais il ne trouve pas le fichier et je ne sais pas pourquoi. Sans ça je ne peux pas continuer les autres macros.

Aurais-tu une idée?
Cordialement
Mistral
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
3 déc. 2019 à 14:54
Ta méthode de mettre un chemin en variable n'est pas bonne!

Il faut utiliser ce qu'Excel met à ta disposition pour avoir toujours le même chemin dans n'importe quelle configuration:

ThisWorkbook.Path

Il suffit à l'utilisateur de mettre son classeur dans le dossier dans lequel se trouve ses données.

ThisWorkbook.Path & "\"
lui donnera le chemin du dossier

voir ceci:

https://excel.developpez.com/faq/?page=FichiersDir#VerifExistenceFichier

Sinon il y a la méthode de recherche de fichier

Je ne comprends pas ta démarche!
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
3 déc. 2019 à 15:22
Je vais regarder …

Le classeur final sera utilisé par 6 personnes différentes. Chacune d’elles aura son propre ordinateur donc 6 architectures et configurations différentes. D’autre part, elles auront déjà reçu toutes les photos qu’elles auront installées, je ne sais ou sur leur machine.
À chacune d’elles je vais fournir un fichier Zip, avec un répertoire (nommé diaporama) et 3 sous-répertoires, qu’elles installeront là où elle le souhaite. Le fichier Xlsx, en question sera issu d’une base de données Access et sera obligatoirement dans le répertoire Diaporama fourni. Le nom du fichier sera différent pour les 6 personnes : de fichier S1 à Fichiers S6 .xlsx.
Pour que mon classeur fonctionne, j’ai besoin de connaitre les emplacements d’un certain nombre de choses :
- Les emplacements de fichiers sources et destinations (réglé la semaine dernière).
- L’emplacement du répertoire Diaporama qui me donnera accès au fichier.Xlsx et aux sous-répertoires de travail.

Voilà tu sais tout et j’espère avoir été clair.
Cordialement.
Mistral
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
3 déc. 2019 à 15:41
C'est donc ThisWorkbook.Path qu'il te faut utiliser!

Pour ce qui est ton fichier que tu ne trouves pas. As-tu mis un antislash après ta variable chemin comme ceci:

Diaporama & "\"


@+
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
3 déc. 2019 à 15:49
Je viens de regarder ThisWorkbook.Path mais ça ne marche pas.
1) Cela donne l chemin du fichier ou se trouve la macro
2) Le chemin du répertoire et du fichier ne peut pas être en dur dans la macro.

Dernière précision, chaque utilisateur s'identifiera ce qui me permettra de connaitre le nom du fichier
Utilisateur A aura le Fichier _S1.xlsx … l'utilisateur F aura le fichier _S6 ce nom de fichier sera mis dans une variable
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
3 déc. 2019 à 10:51
Bonjour Patrice et merci pour ta réponse,

J'ai suivi le lien que tu m'as indiqué. Il est super intéressant et je ne le connaissais pas.
Grace à ça j'ai une ligne de code qui fonctionne (qui s'exécute sans erreur):
If Not exist(Diaporama & "F_Palmares_S3.xlsx") Then MsgBox "Le fichier Palmarès est introuvable.": Exit Sub

"Diaporama" est le chemin exact du répertoire.
"F_Palmares_S3.Xlsx" c'est le fichier qui est bien présent dans le répertoire.
Et pourtant j'ai MsgBox qui m'indique que le fichier n'y est pas.

Une idée, je sèche?

Cordialement.
Albert
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
3 déc. 2019 à 11:16
J'ai essaye une autre solution mais toujours non exploitable.
Pour plus de précision je vous mets le code complet de ma macro :

Public Function exist(chemin, Optional typ = 0) As Boolean
exist = IIf(Dir(chemin, IIf(typ = 0, 0, vbDirectory)) = "", False, True)
End Function


Sub Verfication()
'
' V?rification v?rifie la conformit? et la pr?sence des repertoires et fichiers au bon endroit
' et la syntaxe des noms.
'
Dim Couleur As String
Dim Nature As String
Dim Monochrome As String
Dim Theme As String
Dim Palamares As String
Dim Diaporama As String

Dim Fichier As String
Fichier = "F_Palmares_S3.xlsx"

Couleur = Sheets("Données").Range("C3").Value
Nature = Sheets("Données").Range("C4").Value
Monochrome = Sheets("Données").Range("C5").Value
Theme = Sheets("Données").Range("C6").Value
Diaporama = Sheets("Données").Range("C7").Value
Destination = Sheets("Données").Range("E3").Value



'If Not exist("C:\__Jugement_FDT\1_Couleur", 1) Then MsgBox "Le r?pertoire 1_Couleur est introuvable.": Exit Sub
If Not exist(Couleur, 1) Then MsgBox "Le r?pertoire 1_Couleur est introuvable.": Exit Sub
If Not exist(Nature, 1) Then MsgBox "Le r?pertoire 2_Nature est introuvable.": Exit Sub
If Not exist(Monochrome, 1) Then MsgBox "Le r?pertoire 3_Monochrome est introuvable.": Exit Sub
If Not exist(Theme, 1) Then MsgBox "Le r?pertoire 4_Th?me est introuvable.": Exit Sub
If Not exist(Destination, 1) Then MsgBox "Le r?pertoire 5_Destination est introuvable.": Exit Sub

' If Not exist("C:\__Jugement_FDT\Diaporama\Palmares.xlsx ") Then MsgBox "Le fichier Palmares est introuvable.": Exit Sub



If Not exist(Diaporama & Fichier) Then MsgBox "Le fichier Palmares est introuvable.": Exit Sub



Range("A1").Select_

MsgBox "Vérification termin?ée vous pouvez commencer ? créer votre diaporama."

End Sub


Mo, problème est toujours le même je ne retrouve pas le fichier "Palmares.Xlsx".

Merci d'avance pour votre aide.
Cordialement.
Mistral
0