Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Application.GetOpenFilename MultiSelect

  • Initiateur de la discussion Initiateur de la discussion Stoopid
  • 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 !

S

Stoopid

Guest
Bonjour,

En utilisant ce code dans un fichier excel vierge:

Code:
Sub Open_Files()

       'Defines the variable as a variant data type
       Dim X As Variant

       'Continues to run the macro even if an error occurs
       On Error Resume Next

       'Opens the dialog
       X = Application.GetOpenFilename _
           ("Text Files (*.txt), *.txt, Add-in Files (*.dossier), *.dossier", 2, _
           "Open My Files", , True)

       'Tests the variable X to see if it is valid
       If X = False Then GoTo Cancel

       'Loops through every file that is selected and opens each one
       For Y = 1 To UBound(X)
           Workbooks.Open X(Y)
       Next

       Exit Sub

       'If X was equal to false, displays a message and exits the macro
Cancel:
       MsgBox "The Cancel button was selected."

   End Sub

J'obtiens bien un tableau pour la variable X.

Par contre lorsque j'insère ce code dans un fichier Excel existant (en l'occurence celui sur lequel je suis en train de travailler, comportant d'autres macros), la variable X n'est pas reconnu comme un tableau.

Saurriez vous quelle option potentiellement présente dans le fichier Excel ou dans les autres macros pourrait générer ce problème?

Merci,
 
Dernière modification par un modérateur:
Re : Application.GetOpenFilename MultiSelect

En fait c'est indépendant du fichier.
Je viens de refaire l'essai sur mon fichier test (CAD avec uniquement le code ci-dessus) et ça ne fonctionne plus (CAD que la variable X n'est plus reconnu comme un tableau).

Je ferme tout, j'ouvre à nouveau, et ça marche.

Bref un coup cela fonctionne un coup ça ne marche pas.

Je ne comprends pas 🙁
 
Dernière modification par un modérateur:
Re : Application.GetOpenFilename MultiSelect

Bonjour

Excel accepte qu'on définisse n'importe quelle variable comme variant... sauf les tableaux
Dim X() dit à excel que c'est un array
Dim X() as text dit à excel que c'est un array qui ne contient que des variables de type text
Dim X() as variant dit à excel que c'est array qui peut contenir n'importe quoi, y compris d'autres arrays.
 
Re : Application.GetOpenFilename MultiSelect

Bonjour Stoopid, Bonjour Misange 🙂
Je vais peut être me tromper, mais un tableau peut être déclaré As variant tout court.
Exemple qui fonctionne en tout cas sous 2003 :
VB:
Sub Test()
Dim B As Variant
B = Application.GetOpenFilename("*,*", , , , True)
MsgBox IsArray(B)
End Sub
Si il y a au moins un fichier de sélectionné, B est un tableau.
Cordialement
 
Re : Application.GetOpenFilename MultiSelect

Merci pour vos réponses.

Quelle que soit la définition de ma variable, il arrive (à code identique) que ma variable ne soit pas considérée comme un tableau (je n'ai qu'une seule valeur dans ma variable, dans le cas d'une sélection multiple c'est le dernier fichier sélectionné).

Plusieurs forum traite de ce problème sans solution ci ce n'est de ne pas passer par la fonction Application.GetOpenFilename. Certains parle d'un bug Excel...

(voir https://www.excel-downloads.com/threads/probleme-multiple-files-et-getopenfilename.144211/)

Pour ma part j'ai choisit d'utiliser le code suivant pour m'affranchir de ce problème:

Code:
i = 0
Set oFileDialog = Application.FileDialog(msoFileDialogFilePicker)
oFileDialog.AllowMultiSelect = True
If oFileDialog.Show = -1 Then
For Each oSelectedItem In oFileDialog.SelectedItems
    ReDim Preserve dossier_list(i)
    dossier_list(i) = oSelectedItem
    i = i + 1
Next
End If
 
Dernière modification par un modérateur:
Re : Application.GetOpenFilename MultiSelect

Bonjour à tous

Pas trop compris le problème 😕.

Sinon, j'aurais bien vu un code de ce type:

Code:
Public oSelectedItem
Sub Test()
Dim dossier_list(1000) As Variant
i = 0
Set oFileDialog = Application.FileDialog(msoFileDialogFilePicker)
oFileDialog.AllowMultiSelect = True
If oFileDialog.Show = -1 Then
MsgBox oFileDialog.SelectedItems.Count
For Each oSelectedItem In oFileDialog.SelectedItems
 'ReDim Preserve dossier_list(i)
    'dossier_list(i) = oSelectedItem
    'i = i + 1
    MsgBox oSelectedItem
Next
End If
End Sub
 
Re : Application.GetOpenFilename MultiSelect

Bonjour à tous,

peut être une autre approche comme ceci :
Code:
Option Explicit
Sub test()
Dim i As Byte, wb As Workbook
With Application.FileDialog(msoFileDialogFilePicker)
    .InitialFileName = ActiveWorkbook.Path & "\"
    .Filters.Clear
    .Filters.Add "ma descrip", "*.xls"
    .AllowMultiSelect = True
    .Show
    If .SelectedItems.Count > 0 Then
        For i = 1 To .SelectedItems.Count
            Set wb = Workbooks.Open(.SelectedItems(i))
            'tes actions
            wb.Close
        Next i
    End If
End With
End Sub

bon après midi
@+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
452
Réponses
0
Affichages
623
M
Réponses
3
Affichages
1 K
MarieChérie
M
G
Réponses
0
Affichages
1 K
guiboubou233
G
J
Réponses
0
Affichages
625
jptaz15
J
B
Réponses
1
Affichages
905
Bullrot
B
Réponses
68
Affichages
9 K
Etoto0026
E
H
Réponses
5
Affichages
2 K
hokousai
H
M
Réponses
13
Affichages
5 K
M
K
  • Question Question
Réponses
3
Affichages
1 K
K
Y
Réponses
8
Affichages
1 K
T
Réponses
1
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…