Afficher lien si présence d'un fichier dans le répertoire

Bonjour à tous,

Grâce à vba-new, j'arrive à afficher seulement les liens qui sont fonctionnels dans mon tableau via la fonction personnalisée ci-dessous :

Function LIENVALIDE(lien As String)
    Application.Volatile
    LIENVALIDE = lien <> "" And Dir(lien) <> ""
End Function

Et dans la cellule :

=SI(LIENVALIDE("X:\Test\Project\John\");LIEN_HYPERTEXTE("X:\Test\Project\John\";"Rapports");"")

Est-il possible de modifier cette fonction pour n'afficher le lien que s'il y a un ( ou plusieurs ) fichiers dans le répertoire ?

Bonjour geoffrey,

Quelle est la différence ?

Normalement, lien fonctionnel=existence du fichier

Peux-tu développer ?

Bonjour vba-new,

Effectivement, mais dans mon cas, pour faire simple, tous les fichiers se trouvant dans les liens n'ont pas les mêmes noms. Je ne peux donc pas appliquer une seule et même formule de lien pour tous le tableau. En revanche, les répertoires où il y a ces fichiers sont tous les mêmes ( le lien est généré avec des variables des cellules A et B ).

Seulement voilà, grâce à une de tes macros, tous ces répertoires sont créés automatiquement à présent, et du coup, la fonction personnalisée affiche tous les liens vu qu'ils existent tous, mais beaucoup d'entre eux n'ont pas encore de fichiers dedans. ( des collègues vont venir les ajouter par la suite ).

Alors dans mon tableau, j'aimerais que cette fonction personnalisée n'affiche les liens que s'il y a présence d'au moins un fichier.

J'espère que l'explication est compréhensible

Et si tu ajoutes le nom du fichier dans le lien comme ceci :

=SI(LIENVALIDE("X:\Test\Project\John\Rapports.xls");LIEN_HYPERTEXTE("X:\Test\Project\John\Rapports.xls";"Rapports");"")

ou encore si le nom du fichier se trouve en A1 par exemple :

=SI(LIENVALIDE("X:\Test\Project\John\"&A1);LIEN_HYPERTEXTE("X:\Test\Project\John\"&A1;"Rapports");"")

Impossible vu que ce n'est pas moi qui nomme les fichiers, je sais où ils seront stockés mais je n'ai aucun moyen de savoir comment ils seront nommés. Je ne peux pas obliger les gens à respecter une mise en forme, j'ai peur qu'elle ne soit pas respectée

La meilleur solution, serait une fonction perso qui affiche le lien seulement si présence d'un fichier dans le répertoire. C'est faisable tu penses ?

Ah ok.

La fonction suivante regarde s'il existe au moins un fichier xls dans un répertoire donné :

Function EXISTEFICHIER(repertoire As String)
    Application.Volatile
    EXISTEFICHIER = Dir(repertoire & "*.xls") <> ""
End Function

Puis-je intégrer d'autres extensions dans ta fonction ? ( .pdf par exemple )

Oui. Essaie la fonction suivante :

Function EXISTEFICHIER(repertoire As String, ParamArray extensions())
    Dim i&
    Application.Volatile
    For i = 0 To UBound(extensions())
        If Dir(repertoire & "*." & extensions(i)) <> "" Then
            EXISTEFICHIER = True: Exit Function
        Else
            EXISTEFICHIER = False
        End If
    Next i
End Function

Exemple d'utilisation :

=EXISTEFICHIER("C:\";"pdf";"xls";"doc")

S'il existe soit un fichier pdf soit un xls soit un doc, la fonction te retournera VRAI

Est-il possible d'activer le lien genre C:\Test\Archive\ Dossier "&C2&"\Archives"&A2&"\Défauts s'il y a présence d'un fichier au lieu d'afficher VRAI dans la cellule ?

Oui c'est possible, en utilisant la même structure que la fonction LIENVALIDE plus haut. Quelque chose du genre :

=SI(EXISTEFICHIER("C:\Test\Archive\ Dossier "&C2&"\Archives"&A2&"\Défauts";"pdf";"xls");LIEN_HYPERTEXTE("C:\Test\Archive\ Dossier "&C2&"\Archives"&A2&"\Défauts";"Nom_Lien");"")

On regarde dans le répertoire C:\Test\Archive\ Dossier "&C2&"\Archives"&A2&"\Défauts si un fichier pdf ou xls existe. S'il y en a, on affiche le lien sinon on affiche rien.

une nouvelle merci pour ton aide précieuse !

Rechercher des sujets similaires à "afficher lien presence fichier repertoire"