Microsoft 365 Remplacement par Cellule active

Francky79

XLDnaute Occasionnel
Bonjour le forum,

Comment remplacer dans la macro ci-dessous D101847-02 par la valeur de la cellule active ?

VB:
Sub A()
Dim Fichier As String
Fichier = Dir("C:\Users\fd\Documents\Thierry\Ds\D101847-02.pdf")
If Fichier <> "" Then
    MsgBox "Le fichier '" & Fichier & "' éxiste"
Else
    MsgBox "Le fichier n'éxiste pas"
End If
Fichier = Dir("C:\Users\fd\Documents\Thierry\Ds\D101847-02.jpg")
If Fichier <> "" Then
    MsgBox "Le fichier '" & Fichier & "' éxiste"
Else
    MsgBox "Le fichier n'éxiste pas"
End If
End Sub

Merci pour votre aide.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous ;),

Pour éviter les caractères interdits, une piste :
VB:
Sub A()
Dim NomLongFichier As String, NomCourtFichier As String, RechercheFichier As String
   NomLongFichier = LCase("C:\nul*.>")      ' ou  LCase(ActiveCell)
   NomCourtFichier = Mid(NomLongFichier, InStrRev(NomLongFichier, "\") + 1)
   On Error Resume Next:  RechercheFichier = LCase(Dir(NomLongFichier)): On Error GoTo 0
   MsgBox NomLongFichier & vbLf & IIf(NomCourtFichier = RechercheFichier, "existe bien.", "N'EXISTE PAS !"), vbInformation
End Sub

nota 1 : alors que si vous testez avec le nom "C:\nul", le fichier existera. C'est un héritage du système d'exploitation DOS -> nul est un fichier caché et système qui existe dans tous les répertoires. On peut même s'en servir pour tester l'existence d'un répertoire.
 
Dernière édition:

crocrocro

XLDnaute Impliqué
Je reviens sur la discussion
Je reprends ma remarque
à condition que la macro soit lancée depuis la feuille contenant la valeur.
et celle de job75
La feuille active soit être une feuille de calcul c'est tout.
Si la cellule sélectionnée de la feuille 1 (B2 par exemple) contient la valeur correspondant au nom du fichier et que vous vous mettez sur la feuille 2 avec (B2 ou n'importe qu'elle autre cellule sélectionnée) , si vous exécutez la macro, c'est la cellule de la feuille 2 qui est l'ActivCell et non celle de la feuille 1.

@mapomme que je salue
je n'ai pas bien compris ta manière d'intercepter les caractères spéciaux, il me semble que dans ta macro, tu passes juste sous silence la présence de caractères spéciaux, ce que fait également la macro de @Francky79.
Ce code par exemple affiche un message pour tous les caractères interdits
VB:
Sub ControleCaractèresInterditsNom()
' Les caractères suivants sont interdits pour nommer un fichier
Const CARACTERES_INTERDITS = "/\:*?""<>"
Dim i As Integer
Dim NomFichier As String
    NomFichier = "Nom Fichier Sans Extension<pasbon>"
    For i = 1 To Len(CARACTERES_INTERDITS)
        If InStr(NomFichier, Mid(CARACTERES_INTERDITS, i, 1)) Then
            MsgBox "le caractère " & Mid(CARACTERES_INTERDITS, i, 1) & " est interdit pour les noms des fichiers.", vbCritical
        End If
    Next i
End Sub
 

job75

XLDnaute Barbatruc
Si la cellule sélectionnée de la feuille 1 (B2 par exemple) contient la valeur correspondant au nom du fichier et que vous vous mettez sur la feuille 2 avec (B2 ou n'importe qu'elle autre cellule sélectionnée) , si vous exécutez la macro, c'est la cellule de la feuille 2 qui est l'ActivCell et non celle de la feuille 1.
Bien sûr, la feuille active contient forcément ActiveCell à condition d'être une feuille de calcul.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour 3xcro 😜 ,
@mapomme que je salue
je n'ai pas bien compris ta manière d'intercepter les caractères spéciaux, il me semble que dans ta macro, tu passes juste sous silence la présence de caractères spéciaux,

Il me semble que
On Error Resume Next: RechercheFichier = LCase(Dir(NomLongFichier)): On Error GoTo 0
combiné avec
NomCourtFichier = RechercheFichier
fait ce travail.

  • Si NomLongFichier existe alors Dir(NomLongFichier) renvoie le nom court du fichier NomCourtFichier. Et donc RechercheFichier est égal à NomCourtFichier
  • Si pour une raison ou une autre (et notamment si le nom comporte des caractères interdits) alors Dir(NomLongFichier) retourne la chaine vide "". Et donc RechercheFichier est différent de NomCourtFichier
  • Si le nom comporte des caractères spéciaux acceptés par Dir() tels que * et ? alors Dir(NomLongFichier) renvoie le nom du premier fichier qui répond au filtre. Mais ce fichier forcément ne comporte aucun des caractères * ou ? (sinon il n'existerait pas). Donc encore une fois, RechercheFichier est différent de NomCourtFichier
 
Dernière édition:

crocrocro

XLDnaute Impliqué
@mapomme ,
je viens de comprendre, par caractères spéciaux tu entends caractères jokers (* et ?) 🃏,
moi, des caractères interdis poure les noms de fichiers comme tu pourras le tester directement en essayant de renommer un fichier sur l'explorateur
[EDIT de 16h15] en réponse au post 14 de @mapomme : lecture rapide, trop rapide de ma part de ton post 12. Mais... ma macro ControleCaractèresInterditsNom était un exemple de contrôle de saisie correcte d'un nom de fichier. A faire en préalable du contrôle d'existence du fichier.
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
e viens de comprendre, par caractères spéciaux tu entends caractères jokers (* et ?) 🃏,
moi, des caractères interdis poure les noms de fichiers comme tu pourras le tester directement en essayant de renommer un fichier sur l'explorateur
Non j'entends tous les caractères qui ne peuvent pas se trouver dans un nom de fichier. Je n'ai jamais dit que je ne considérais que les caractères "*" et "?" mais ils font partie des caractères interdits dans un nom de fichier.

Le demandeur se donne une chaine de caractères. Le demandeur veut savoir si cette chaine correspond à un fichier existant. Si un tel fichier existe alors il ne comportera aucun caractère interdit quel que soit ce caractère (y compris * et ?).

Mais la fonction DIR() de VBA accepte les caractères joker "*" et "?" contrairement aux noms des fichiers. C'est pour ça qu'un simple dir(xxxxx) <> "" ne suffit pas. Dir("*.*") va renvoyer un nom de fichier alors qu'aucun nom de fichier ne peut être égal à "*.*"
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 085
Messages
2 116 071
Membres
112 648
dernier inscrit
Otete Christian