J'utilise l'application GetOpenFilename pour selectionner le fichier que je vais ouvrir par la suite.
Lorsque je selectionne mon fichier (boite de dialogue) l'application me renvoie comme valeur le chemin du fichier, s'il n'ya pas de selection (bouton annuler de la boite de dialogue) l'application me renvoie la valeur False.
Dans le cas où il n'y a pas de selection de fichier, je dois sortir de la procedure (Exit sub) en utilisant un test IF
Le code ci-desous contient une erreur puisque quand je fais une selection, , je compare une valeur type chaine de caractère à une valeur boolean.
Le message d'erreur est :
"Incompatibilité de type"
Voici un extrait du code :
Code:
Dim FileToOpen
Set Mon_TdB = ThisWorkbook
'ouverture de la boite de dialogue et selection du fichier par l'utilisateur
FileToOpen = Application.GetOpenFilename("Fichier Excel (*.xls),*.xls)", , "Analyser le fichier", , True)
'Variable type workbook du classeur à analyser
If FileToOpen = False Then
Exit Sub
End If
En resumé le type de la variable FileToOpen est une chaine de caratère lorsque je selectionne un fichier dans la boite de dialogue.
Et de type boolean si dans la boite de dialogue, j'appuie sur annulé.
Ma question, comment tester une variable si elle peut prendre deux types différents.
Salutations
Mousse
Désolé mais ça ne fonctionne pas
Merci quand même...
Getopenfilename a pour argument la valeur True (dernier argument). Je peux donc selectionner plusieurs fichiers.
Donc deux cas :
Si annuler dans la boite de dialogue : FileToOpen est une variable normale
Si il y a selection de fichier FileToOpen est une variable tableau
à+
Oh merci YANN-56 pour ton code, je vois que tu t'es pris la tête, et je te remercie pour ton usine à gaz , je te taquine biensûre.
Merci beaucoup
et à trés bientôt
mousse
Salut Yann, juste qu'elle plante aussi quand on ferme avec la croix ...
Mais c'est juste le On Error Resume Next qui n'est pas bien placé
Code:
Private Sub CommandButton1_Click()
Set RECHERCHE = Application.FileDialog(msoFileDialogFolderPicker)
With RECHERCHE
.Title = " CHOISIR UN DOSSIER"
.AllowMultiSelect = False
If .Show = -1 Then
For Each CHOIXDOSSIER In .SelectedItems
DOSSIER_CHOISI = CHOIXDOSSIER
Next CHOIXDOSSIER
End If
End With
Set RECHERCHE = Nothing
On Error Resume Next 'Au cas où il n'y ait pas de Fichier
Set DOSSIER_A_FOUILLER = CreateObject("Shell.Application")
Set DOC_EXISTANTS = DOSSIER_A_FOUILLER.Namespace(DOSSIER_CHOISI & "\")
For Each ELEMENT In DOC_EXISTANTS.Items
'If ELEMENT.isFolder = True Then
i = i + 1
With ActiveSheet
.Cells(i, 1).Value = ELEMENT
.Cells(i, 2).Value = Format(DOC_EXISTANTS.GetDetailsOf(ELEMENT, 3), "dddd d mmmm yyyy ") ' DATE MISE A JOUR
End With
' End If
Next ELEMENT
End Sub
Par contre, elle est très sympa et très efficace !
Bonne soirée
Salut Moussaillon! Sale gosse! Tu mériterais une correction!!!
En tous les cas JNP; merci pour la tienne de "Correction".
Je n'avais pas constaté cette erreur
(Mais ce n'est que par le hasard de n'avoir pas rencontré ce cas)
J'ai bien fait de venir….
A toi bigmousse, je reste disponible si tu vas vers ma façon de faire.
A toi JNP, Merci encore pour comme d'hab. m'avoir aidé.