sortie propre d'un "GetOpenFilename" avec bouton annuler

romainchu78

XLDnaute Occasionnel
Bonjour a tous,

J'ai mis en place un "GetOpenFilename" de maniere a charger le chemin d'access d'un fichier.
j'essaye d'incorporer une ligne de code qui permettrait de faire en sorte que lorsque l'utilisateur decide finalement d'annuler ou de fermer sa boite de dialogue au moment de charger son fichier, un mesage d'erreur ne s'affiche pas.

Un membre du forum m'a propose cette solution:
"If FileToOpenCAB1 = False Then Exit Sub" a mettre juste apres mon "GetOpenFilename", mais le probleme est que cela empeche le chargement d'un fichier. J'ai un erreur mismatch.

Quelqu'un a t'il une solution alternative?
merci d'avance.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : sortie propre d'un "GetOpenFilename" avec bouton annuler

Bonjour Michel, Romain, le Forum

Mon cher ami Michel, j'ai eu l'occasion récemment de tomber sur une syntax simliaire à ta proposition dans un fichier joint dans une autre discussion pour des fichiers TXT la semaine dernière.

Et bien j'ai l'immense regret de t'annoncer que je ne suis pas partisant de l'employer ! lol :rolleyes:

En effet, la valeur retournée par la méthode "GetOpenFilename" peut être (selon) :

  • String (FullPath du Fichier Sélectionné ou saisi par l'utilisateur)
  • Boolean (Cancel Button ou fermeture du PopUp)
  • Array (Si l'Option "MultiSelect" est déclarée à True)
Par conséquent il me semble que la Variable destinée à recevoir cette valeur ne peut être que "Variant" comme suit :

Code:
Sub Action_GetOpenFileName()
Dim FileToOpenCAB1 As [COLOR=blue]Variant[/COLOR]
 
FileToOpenCAB1 = Application.GetOpenFilename
If FileToOpenCAB1 = False Then Exit Sub
MsgBox FileToOpenCAB1
End Sub

De plus, si je ne m'abuse le fait de tester la String "Faux" ne sera valable que sur un PC en Français (Je viens d'essayer sur une machine en version US et après avoir annulé, j'ai quand même la MsgBox)

Bon Appétit
@+Thierry
 

romainchu78

XLDnaute Occasionnel
Re : sortie propre d'un "GetOpenFilename" avec bouton annuler

Merci a vous michel et thierry,

le code marche parfaitement avec la declaration de "FileToOpenCAB1" comme variant.

Michel tu m'avais deja propose ce code pour une autre application au travers une demande que j'ai faite il y a quelque temps. le code etait a l'epoque tout simple et ton code marchait avec une declaration comme string. mais depuis jai ajoute des choses, comme une procedure pour tromquer le chemin d'access, etc...et cela ne fonctionnait plus. mais maintenent c'est resolu.
merci encore a vous deux.
vous etes vraiment d'une tres grande aide...
Ce forum est genial...
 

Iwana

XLDnaute Nouveau
Re : sortie propre d'un "GetOpenFilename" avec bouton annuler

Bonjour tout le monde, et re à ceux qui m'ont déjà lue aujourd'hui ! (c'est pas mon jour, je rame comme pas possible)

Comme vous vous en doutez, je rencontre le même souci que le posteur de ce sujet, sauf que de mon côté la solution ne fonctionne pas !
Le but : quand la boîte de dialogue s'ouvre pour sélectionner le fichier, si l'utilisateur se rétracte et veut quitter, il faut que le bouton Annuler interrompe la macro et ainsi, ferme la boîte de dialogue.

Info importante : J'ai créé une macro avec des Call pour enchaîner 2 macros (1: import du fichier; 2: traitement des données).
Etant donné que mon "exit sub" est dans la macro 1 et que les macros 1 et 2 s'enchaînent, je pense que le fait de cliquer sur Annuler interromp la macro 1 mais ça saut directement à la 2 (alors que je veux que ça quitte tout court).

Quelqu'un saurait-il me donner la bonne syntaxe ? Où dois-je placer mon "Exit Sub" ?

Pour info, voici ce que j'ai pour le moment (et qui ne fonctionne pas) :

Code:
Sub importfichier()

    Dim S_wk As Workbook, D_wk As Workbook, pc$
    Dim Fichier As String
    Dim ws As Worksheet
    Set D_wk = ThisWorkbook
    Application.ScreenUpdating = False
    
    
    ' Ouverture d'une boîte de dialogue pour selectionner le fichier texte à traiter
    Fichier = Application.GetOpenFilename("Text file (*.txt), *.txt")
       If Fichier = "Faux" Then
            Exit Sub
       
            Else:   Set S_wk = Workbooks.Open(Fichier)
                    With S_wk
                        With .ActiveSheet.UsedRange
                              pc = .Cells(1, 1).Address
                              .Copy
                        End With
                            
                        Set S_wk = ThisWorkbook
                        Set ws = S_wk.Worksheets.Add(after:=S_wk.Worksheets(S_wk.Worksheets.Count))
                        ws.Name = Mid(Fichier, InStrRev(Fichier, "\") + 1, Len(Mid(Fichier, InStrRev(Fichier, "\") + 1)) - 4)
                            
                        Set D_wk = ThisWorkbook
                        D_wk.ActiveSheet.Range(pc).PasteSpecial xlValues
                        Application.CutCopyMode = False
                        .Close False
                    End With
        End If
        
        D_wk.ActiveSheet.Range("A1").Select
    Application.ScreenUpdating = True

End Sub
------------------------------------------------------------------
Sub traitement_donnees()
......etc

Merci d'avance pour votre aide !
 

Pierrot93

XLDnaute Barbatruc
Re : sortie propre d'un "GetOpenFilename" avec bouton annuler

Re,

le mieux eût été de rester sur le même fil.. regarde ceci :
Code:
Option Explicit
Sub test()
Dim Fichier As Variant
Fichier = Application.GetOpenFilename("Text file (*.txt), *.txt")
If VarType(Fichier) = vbBoolean Then
    MsgBox "action annulée"
Else
    'tes action si ok
End If
End Sub
 

Iwana

XLDnaute Nouveau
Re : sortie propre d'un "GetOpenFilename" avec bouton annuler

Pour ceux qui buteraient sur le même souci, j'ai trouvé (c'est peut-être de ma bidouille) :
j'ai mis un On Error GoTo fin juste après Fichier = Application.GetOpenFilename
et le fin juste avant End Sub
Puis j'ai remis On Error GoTo fin au début de ma 2ème macro et le fin juste avant son End Sub.

Et ça marche :)
 

Iwana

XLDnaute Nouveau
Re : sortie propre d'un "GetOpenFilename" avec bouton annuler

Effectivement je ne l'avais pas vu !
Et pourtant il y a 3 minutes d'écart.

Merci tout de même pour ton code Pierrot93, je le garde sous le coude au cas où mon bidouillage déciderait de me lâcher !
 

Discussions similaires

Statistiques des forums

Discussions
312 205
Messages
2 086 199
Membres
103 156
dernier inscrit
Ludo94130