Microsoft 365 VBA ouvrir fichier excel sans connaitre son extension

  • Initiateur de la discussion Initiateur de la discussion RCAVBA
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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...
 
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
 
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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
188
Réponses
72
Affichages
1 K
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
861
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
174
Retour