Microsoft 365 Code VBA - prise en compte de tous les types des extensions des fichiers Excel à ouvrir

RCAVBA

XLDnaute Junior
Bonjour à tous,

Je souhaiterais modifier mon code ci-dessous à telle sorte de prendre en compte tous les types d'extensions sans faire rentrer une extension donnée.

L'objectif est d'ouvrir un fichier via la fonction en renseignant au préalable dans des cellules le dossier du fichier, le nom du fichier ainsi que l'extension:

VB:
If (TestFichierOuvert(nom_fichier_origine + extension) = True) Then Workbooks.Open Filename:=adresse_dossier_du_fichier+ "\" + nom_du_fichier + extension

Serait-il possible de ne pas renseigner l'extension et de prendre en compte tous les types d'extension : xls, xlsx, xlsb...

NB. l'extension est une variable dans mon code.

Merci

Cdt,
 

fanch55

XLDnaute Barbatruc
Bonsoir,
Cela fait au moins 10 ans qu'on ne fait fait plus de concaténation avec le + , on utilise le & .
Pour ouvrir un fichier, on ne peut pas déterminer tout seul si c'est un xls, un xlsm ou autre xls*, il faut afficher un FileDialog avec le masque approprié (xl*) et laisser l'utilisateur décider.
Veux-tu un exemple ?
 

fanch55

XLDnaute Barbatruc
A essayer et adapter :
VB:
Sub test()

    With Application.FileDialog(msoFileDialogFilePicker)
         .Title = "Importer un Fichier"
         .InitialFileName = ThisWorkbook.Path & "\" & nom_fichier_origine & ".xl*"
         .AllowMultiSelect = False
         .Filters.Clear
         .Filters.Add "Mon fichier à moi", "*.xl*"
         If .Show Then MsgBox .SelectedItems(1)
    End With
End Sub

Le .selecteditems(1) est le fichier que tu veux ouvrir ....
 

RCAVBA

XLDnaute Junior
A essayer et adapter :
VB:
Sub test()

    With Application.FileDialog(msoFileDialogFilePicker)
         .Title = "Importer un Fichier"
         .InitialFileName = ThisWorkbook.Path & "\" & nom_fichier_origine & ".xl*"
         .AllowMultiSelect = False
         .Filters.Clear
         .Filters.Add "Mon fichier à moi", "*.xl*"
         If .Show Then MsgBox .SelectedItems(1)
    End With
End Sub

Le .selecteditems(1) est le fichier que tu veux ouvrir ....

Bonjour,
ça ne marche pas en remplaçant extension par ".xl*" :


VB:
        If (TestFichierOuvert(nom_fichier + ".xl*") = True) Then
            Workbooks.Open Filename:=adresse_fichier + "\" + nom_fichier + ".xl*"
        End If

Je rappelle que l'objectif est de pouvoir ouvrir tous les fichier Excel que ce soit leurs extensions..

Merci
Cdt,
 

fanch55

XLDnaute Barbatruc
A première vue, tu ne sais pas adapter
Essayes avec cette macro :
VB:
Public Nom_Fichier_Origine As String
Sub Test()
Dim Classeur            As Workbook
Dim To_Open             As Boolean

    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Importer un Fichier"
        .InitialFileName = Nom_Fichier_Origine
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Mes Extensions à moi", "*.xl*"
        If .Show Then
            Nom_Fichier_Origine = .SelectedItems(1)
            To_Open = True
            For Each Classeur In Workbooks
                If Classeur.Name = Nom_Fichier_Origine Then
                    To_Open = False
                    Classeur.Activate
                    Exit For
                End If
            Next
            If To_Open Then Workbooks.Open Filename:=Nom_Fichier_Origine
        End If
    End With
    
End Sub
 

patricktoulon

XLDnaute Barbatruc
bonjour
VB:
Sub ouvre1()
'ouverture un seul fichier
    Dim Fichier As Variant
     Fichier = Application.GetOpenFilename("Excel Files (*.xl*), *.xl*", , "Ouvrir un Classeur")
    If Fichier <> False Then
        MsgBox "Fichier sélectionné " & vbCrLf & Fichier
    End If
End Sub
tu n'aura de dispo que les dossiers , raccourcis , et les fichiers Excel dans la boite de dialog

et si il est question de multiselect
VB:
Sub ouvre2()
'ouverture un !! ou !!! plusieurs !!  fichiers en gardant la touche control appuyée
    Dim Fichier As Variant, i&
    Fichier = Application.GetOpenFilename("Excel Files (*.xl*), *.xl*", , "Ouvrir un Classeur")
     If IsArray(Fichier) Then
        For i = LBound(Fichier) To UBound(Fichier)
            MsgBox Fichier(i)
        Next
    ElseIf Not IsArray(Fichier) Then
        If Fichier = False Then Exit Sub
        MsgBox Fichier
    End If
End Sub
 

RCAVBA

XLDnaute Junior
bonjour
VB:
Sub ouvre1()
'ouverture un seul fichier
    Dim Fichier As Variant
     Fichier = Application.GetOpenFilename("Excel Files (*.xl*), *.xl*", , "Ouvrir un Classeur")
    If Fichier <> False Then
        MsgBox "Fichier sélectionné " & vbCrLf & Fichier
    End If
End Sub
tu n'aura de dispo que les dossiers , raccourcis , et les fichiers Excel dans la boite de dialog

et si il est question de multiselect
VB:
Sub ouvre2()
'ouverture un !! ou !!! plusieurs !!  fichiers en gardant la touche control appuyée
    Dim Fichier As Variant, i&
    Fichier = Application.GetOpenFilename("Excel Files (*.xl*), *.xl*", , "Ouvrir un Classeur")
     If IsArray(Fichier) Then
        For i = LBound(Fichier) To UBound(Fichier)
            MsgBox Fichier(i)
        Next
    ElseIf Not IsArray(Fichier) Then
        If Fichier = False Then Exit Sub
        MsgBox Fichier
    End If
End Sub

Bonjour,

Je pense que j'ai mal exprimé le besoin.
VB:
If (TestFichierOuvert(nom_fichier + ".xls") = True) Then
            Workbooks.Open Filename:=adresse_fichier + "\" + nom_fichier + ".xls"
End If

En revanche, quand j'ai essayé en modifiant la ligne comme suit :


En fait, j'ai déjà mon code qui marche très bien et je voulais juste voir s'il y a une possibilité d'accepter toutes les extensions Excel
VB:
If (TestFichierOuvert(nom_fichier + ".xls" or ".xlsx") = True) Then

Ni en faisant comme suit :
extension = ".xls" Or ".xlsx"

ça me renvoie un bug

Merci pour votre aide
 

RCAVBA

XLDnaute Junior
voilà
VB:
Function TestFichierOuvert(ByVal NomFic As String)

    Dim Classeur As Workbook
    TestFichierOuvert = True
    For Each Classeur In Workbooks
        If (Classeur.Name = NomFic) Then
            TestFichierOuvert = False
        End If
    Next Classeur
    
End Function
 

patricktoulon

XLDnaute Barbatruc
ben si c'est pour ça pourquoi tu t'ennuie avec l'extension :rolleyes:

If TestFichierOuvert(nom_fichier) Then
Workbooks.Open Filename:=adresse_fichier + "\" + nom_fichier + ".xls"
End If

Function TestFichierOuvert(ByVal NomFic As String)
Dim Classeur As Workbook
TestFichierOuvert = True
For Each Classeur In Workbooks
If instr(Classeur.name,NomFic)>0 Then TestFichierOuvert = False:exit for
End If
Next Classeur
End Function


a moins que tu ai des fichiers de même nom mais pas les même extensions
au quel cas je te suggère de revoir la conception générale de ton projet
 

fanch55

XLDnaute Barbatruc
Ok, si j'ai "mieux" compris, tu ne sembles pas vouloir d'interaction genre filedialog mais ouvrir le premier fichier dont le nom est identique à la cellule Nom de Fichier, pourvu que son extension soit gérable par Excel :

Il faudrait cependant que tu précises quel est l'ordre de préférence xls puis xlsx puis xlsm puis xlsb etc ... et que faire si le fichier n'existe pas ...
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 849
dernier inscrit
florentMIG