Microsoft 365 VBA ouvrir fichier excel sans connaitre son extension

RCAVBA

XLDnaute Junior
Bonsoir à tous et à toutes

j'utilise le code suivant pour ouvrir le fichier
Workbooks.Open Filename:=ThisWorkbook.Path & "\TEST.xls"
Mais si ce fichier est enregistré en .xlsx ou .xlsm ou autre, le code ne fonctionne plus

Avez-vous une solution à me proposer?

Merci
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @RCAVBA , le Forum

As-tu essayé sans indiquer l'extension du tout ?
Workbooks.Open Filename:=ThisWorkbook.Path & "\TEST"

Normalement il ouvrira le premier "Text.xl*" qu'il trouvera dans le répertoire...

Et sinon il reste à faire appel à la boite de dialog :
Application.GetOpenFilename("microsoft excel files (*.xl*),")

Bonne soirée
@+Thierry
 

RCAVBA

XLDnaute Junior
Bonjour @RCAVBA , le Forum

As-tu essayé sans indiquer l'extension du tout ?
Workbooks.Open Filename:=ThisWorkbook.Path & "\TEST"

Normalement il ouvrira le premier "Text.xl*" qu'il trouvera dans le répertoire...

Et sinon il reste à faire appel à la boite de dialog :
Application.GetOpenFilename("microsoft excel files (*.xl*),")

Bonne soirée
@+Thierry

@_Thierry @Yoyo01000
J'ai modifié mon code sachant que j'ai 3 variables :
1 - L'adresse ou lien du dossier (répertoire)
2 - Le nom du fichier
3 - L'extension

VB:
Workbooks.Open Filename:=adresse_dossier + "\" + nom_fichier + extension

Je ne sais comment laisser la variable extension prendre toutes les valeurs : xls, xlsx...
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonsoir @RCAVBA , le Fil, le Forum

Ce qui est bizarre c'est que si tu vas jusqu'à ce niveau de détails de tes variables pour construire le FullPath en trois "morceaux" tu ne soies pas en mesure de savoir ce qu'il y a dans ton répertoire....

Tu peux aussi faire un loop préalable pour tester l'existence du fichier avec DIR(adresse_dossier + "\" + nom_fichier + extension) pour voir celui qui est bon entre XLS, XLSX et XLSM...
Et ensuite "recalibrer" extension ....


Et comme dans mon post #2, il reste la solution de GetOpenFilename ...

@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
on connait le chemin et le nom d'un fichier mais pas le type xl de l'extension ;comment faire?
voyons voir ;)
dim chemin$,nom$
chemin=thisworkbook.path &"\"
nom="test"
x=dir(chemin & nom &".xl*")
if x<>"" then Workbooks.Open Filename:=chemin & x
else
msgbox "pas de fichier portant ce nom "
end if
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour à tous

Pour ta solution Patrick, oui en effet ca ouvre n'importe quelle extension "xl*" et finlament ca revient au même que ce que je propose en Post #2
(A savoir SANS extension du tout : Workbooks.Open Filename:=ThisWorkbook.Path & "\TEST" )
La différence c'est que Patrick teste avec Dir l'existence pour eviter un plantage..

La problématique de @RCAVBA est plus "tordue" car il nous "impose" dans sa construction les trois variables :
@_Thierry @Yoyo01000
J'ai modifié mon code sachant que j'ai 3 variables :
1 - L'adresse ou lien du dossier (répertoire)
2 - Le nom du fichier
3 - L'extension

Ce qui me "chiffonne" ce sont les répercussions éventuelles si on ouvre un file existant "TestOpen.XLSM" alors que dans le même répertoire on a aussi un "TestOpen.XLS" et un "TestOpen.XLSX" ... qui pourraient tous être totalement différents chacun d'entres eux.... D'où des effets totalement imprévisibles dans les traitements suivants....

Comme ceci :
1592663413067.png


Pour tenter de pallier à ce risque (comme précisé dans mon Post #6) , je propose "l'armada" (LoL !!!)

VB:
Option Explicit
Sub Test_Extension()
'Les Variables "imposées" par RCAVBA -------------------------------
Dim MyFolder As String, MyFileName As String, MyExtention As Variant
'-------------------------------------------------------------------

Dim x As Byte
Dim MyFullPath As String
Dim DirFullPath As String
Dim MyCounter As Integer
Dim ExtentionFound As String

MyFolder = ThisWorkbook.Path & "\"
MyFileName = "OpenTest"
MyExtention = Array(".XLSX", ".XLSM", ".XLS") 'RCAVBA : Je ne sais comment laisser la variable extension prendre toutes les valeurs : xls, xlsx...


For x = 0 To UBound(MyExtention)
    MyFullPath = MyFolder & MyFileName & MyExtention(x)
    DirFullPath = Dir(MyFullPath)
        If DirFullPath <> "" Then
            MyCounter = MyCounter + 1
            ExtentionFound = ExtentionFound & MyFileName & MyExtention(x) & vbCrLf
            Workbooks.Open DirFullPath
        Else
           'Do Nothing
        End If
Next x


If ExtentionFound <> "" Then
    Select Case MyCounter
        Case 2
            MsgBox "Attention 2 fichiers ont été trouvés et ouverts !" & vbCrLf & ExtentionFound
        Case 3
            MsgBox "Attention 3 fichiers ont été trouvés et ouverts !" & vbCrLf & ExtentionFound
    End Select
Else
    MsgBox "Aucun fichier trouvé !"
End If

End Sub

1592663511687.png


Je vois déjà la réponse de Patrick qui va nous sortir la même chose en 6 lignes plus optimisées ;)
Mais bon pour faire avancer le shmilblick !

Bien à toi, à vous
@+Thierry
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
364

Statistiques des forums

Discussions
312 197
Messages
2 086 104
Membres
103 117
dernier inscrit
augustin.morille