Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupérer l'appui sur la touche Annuler d'un CommonDialog

6 réponses
Avatar
Bernard
Bonjour,
je travaille sur Excel 2000, j'ai une forme vide (FormSélectionFichier) avec
juste dedans un CommonDialog1 (COMDLG32.OCX de la Microsoft Common Dialog
Control version 6.0 ) et dans un module j'ai le code suivant appelé par un
simple bouton sur la feuille Excel :

Public FichieràTraiter As String
Sub Traitement()
FichieràTraiter = ""
FormSélectionFichier.CommonDialog1.InitDir = ActiveWorkbook.Path
FormSélectionFichier.CommonDialog1.Filter = "Fichier passation comptable
(*.PNM)|*.PNM"
FormSélectionFichier.CommonDialog1.ShowOpen
FichieràTraiter = FormSélectionFichier.CommonDialog1.Filename
If Dir(FichieràTraiter) = "" Then
MsgBox "Fichier inexistant"
Exit Sub
End If
If UCase(Mid(FichieràTraiter, InStr(1, FichieràTraiter, "."))) <> ".PNM" Then
MsgBox "Ce fichier n'a pas pour extension PNM"
Exit Sub
End If
........
end sub

Je voudrais traiter le fait que la personne appuie sur le bouton Annuler.
En VB classique il suffit de comparer à "" car c'est le code retour du
bouton Annuler pour une boîte de dialogue. Or là si l'utilisateur a
sélectionné un fichier ou taper lui-même un nom de fichier puis se ravise et
appuie sur le bouton Annuler le code retour est le nom du fichier sélectionné
ou saisi et non pas "".

Donc comment récupérer l'info.

D'avance merci à tous pour votre aide.

Bernard

6 réponses

Avatar
Jacques93
Bonjour Bernard,

Il me semble que c'est le test :

If Dir(FichieràTraiter) = "" Then

qui est erroné. Car si FichieràTraiter = "" , Dir(FichieràTraiter) te
renverras le premier nom de fichier du répertoire.

Essaie directement :

If FichieràTraiter = "" Then MsgBox "Annulé"

Bonjour,
je travaille sur Excel 2000, j'ai une forme vide (FormSélectionFichier) avec
juste dedans un CommonDialog1 (COMDLG32.OCX de la Microsoft Common Dialog
Control version 6.0 ) et dans un module j'ai le code suivant appelé par un
simple bouton sur la feuille Excel :

Public FichieràTraiter As String
Sub Traitement()
FichieràTraiter = ""
FormSélectionFichier.CommonDialog1.InitDir = ActiveWorkbook.Path
FormSélectionFichier.CommonDialog1.Filter = "Fichier passation comptable
(*.PNM)|*.PNM"
FormSélectionFichier.CommonDialog1.ShowOpen
FichieràTraiter = FormSélectionFichier.CommonDialog1.Filename
If Dir(FichieràTraiter) = "" Then
MsgBox "Fichier inexistant"
Exit Sub
End If
If UCase(Mid(FichieràTraiter, InStr(1, FichieràTraiter, "."))) <> ".PNM" Then
MsgBox "Ce fichier n'a pas pour extension PNM"
Exit Sub
End If
.........
end sub

Je voudrais traiter le fait que la personne appuie sur le bouton Annuler.
En VB classique il suffit de comparer à "" car c'est le code retour du
bouton Annuler pour une boîte de dialogue. Or là si l'utilisateur a
sélectionné un fichier ou taper lui-même un nom de fichier puis se ravise et
appuie sur le bouton Annuler le code retour est le nom du fichier sélectionné
ou saisi et non pas "".

Donc comment récupérer l'info.

D'avance merci à tous pour votre aide.

Bernard



--
Cordialement,

Jacques.

Avatar
Bernard
Bonjour Jacques93,
hélas non car c'est juste un test pour vérifier l'existence du fichier, mais
comme je l'ai écrit FichieràTraiter n'est pas vide quand on appuie sur
Annuler sauf si l'on a rien sélectionné ou rien saisi. Et même cela n'est pas
tout à fait vrai car si on relance (sans avoir fermé le fichier Excel) la
procédure il conserve le fichier sélectionné dans le précédent traitement et
ce même si on ne sélectionne rien.
Donc c'est bien l'interception de l'appui sur le bouton annuler qu'il me faut.

Merci quand même et sutout pour la rapidité.
Bernard


Bonjour Bernard,

Il me semble que c'est le test :

If Dir(FichieràTraiter) = "" Then

qui est erroné. Car si FichieràTraiter = "" , Dir(FichieràTraiter) te
renverras le premier nom de fichier du répertoire.

Essaie directement :

If FichieràTraiter = "" Then MsgBox "Annulé"

Bonjour,
je travaille sur Excel 2000, j'ai une forme vide (FormSélectionFichier) avec
juste dedans un CommonDialog1 (COMDLG32.OCX de la Microsoft Common Dialog
Control version 6.0 ) et dans un module j'ai le code suivant appelé par un
simple bouton sur la feuille Excel :

Public FichieràTraiter As String
Sub Traitement()
FichieràTraiter = ""
FormSélectionFichier.CommonDialog1.InitDir = ActiveWorkbook.Path
FormSélectionFichier.CommonDialog1.Filter = "Fichier passation comptable
(*.PNM)|*.PNM"
FormSélectionFichier.CommonDialog1.ShowOpen
FichieràTraiter = FormSélectionFichier.CommonDialog1.Filename
If Dir(FichieràTraiter) = "" Then
MsgBox "Fichier inexistant"
Exit Sub
End If
If UCase(Mid(FichieràTraiter, InStr(1, FichieràTraiter, "."))) <> ".PNM" Then
MsgBox "Ce fichier n'a pas pour extension PNM"
Exit Sub
End If
.........
end sub

Je voudrais traiter le fait que la personne appuie sur le bouton Annuler.
En VB classique il suffit de comparer à "" car c'est le code retour du
bouton Annuler pour une boîte de dialogue. Or là si l'utilisateur a
sélectionné un fichier ou taper lui-même un nom de fichier puis se ravise et
appuie sur le bouton Annuler le code retour est le nom du fichier sélectionné
ou saisi et non pas "".

Donc comment récupérer l'info.

D'avance merci à tous pour votre aide.

Bernard



--
Cordialement,

Jacques.




Avatar
Jacques93

Chez moi, FichieràTraiter est vide si on clique sur Annuler, d'où ma
réponse. A condition d'ajouter :

Me.CommonDialog1.FileName = ""

avant

Me.CommonDialog1.ShowOpen

Excel 2003 et ComDlg32.ocx 6.0

Bonjour Jacques93,
hélas non car c'est juste un test pour vérifier l'existence du fichier, mais
comme je l'ai écrit FichieràTraiter n'est pas vide quand on appuie sur
Annuler sauf si l'on a rien sélectionné ou rien saisi. Et même cela n'est pas
tout à fait vrai car si on relance (sans avoir fermé le fichier Excel) la
procédure il conserve le fichier sélectionné dans le précédent traitement et
ce même si on ne sélectionne rien.
Donc c'est bien l'interception de l'appui sur le bouton annuler qu'il me faut.

Merci quand même et sutout pour la rapidité.
Bernard



--
Cordialement,

Jacques.

Avatar
Bernard
Merci Jacques93,
effectivement il faut bien forcer la réinitialisation par
FormSélectionFichier.CommonDialog1.Filename = "", j'avoue que je pensais que
cela se faisait implicitement à l'ouverture de la fenêtre de dialogue et
c'est pour cela que je ne réinitialisais que ma variable FichieràTraiter (là
c'est normal).

Merci encore
Bernard



Chez moi, FichieràTraiter est vide si on clique sur Annuler, d'où ma
réponse. A condition d'ajouter :

Me.CommonDialog1.FileName = ""

avant

Me.CommonDialog1.ShowOpen

Excel 2003 et ComDlg32.ocx 6.0

Bonjour Jacques93,
hélas non car c'est juste un test pour vérifier l'existence du fichier, mais
comme je l'ai écrit FichieràTraiter n'est pas vide quand on appuie sur
Annuler sauf si l'on a rien sélectionné ou rien saisi. Et même cela n'est pas
tout à fait vrai car si on relance (sans avoir fermé le fichier Excel) la
procédure il conserve le fichier sélectionné dans le précédent traitement et
ce même si on ne sélectionne rien.
Donc c'est bien l'interception de l'appui sur le bouton annuler qu'il me faut.

Merci quand même et sutout pour la rapidité.
Bernard



--
Cordialement,

Jacques.




Avatar
Jacques93
Bonjour Bernard
Merci Jacques93,
effectivement il faut bien forcer la réinitialisation par
FormSélectionFichier.CommonDialog1.Filename = "", j'avoue que je pensais que
cela se faisait implicitement à l'ouverture de la fenêtre de dialogue et
c'est pour cela que je ne réinitialisais que ma variable FichieràTraiter (là
c'est normal).



Pour compléter, il y a une propriété qui permet de savoir si on a cliqué
sur le bouton Annuler :

CommonDialog1.CancelError = True

qui génére une erreur 32755 'La commande Annuler a été sélectionnée' que
l'ont peut utiliser avec la gestion d'erreur :

CommonDialog1.CancelError = True
On Error Resume Next
Err.Clear
CommonDialog1.ShowOpen
If Err.Number = 32755 Then
MsgBox "Click sur Annuler"
Else
Traitement
End If

Cela fonction sous VB6, mais sous VBA Excel 2003, l'erreur n'est pas
générée.

--
Cordialement,

Jacques.

Avatar
Bernard
Bonjour Jacques93,
merci cela peut toujours servir sous VB, dommage que VB Excel ne gère pas
tout comme VB.

Cordialement
Bernard


Bonjour Bernard
Merci Jacques93,
effectivement il faut bien forcer la réinitialisation par
FormSélectionFichier.CommonDialog1.Filename = "", j'avoue que je pensais que
cela se faisait implicitement à l'ouverture de la fenêtre de dialogue et
c'est pour cela que je ne réinitialisais que ma variable FichieràTraiter (là
c'est normal).



Pour compléter, il y a une propriété qui permet de savoir si on a cliqué
sur le bouton Annuler :

CommonDialog1.CancelError = True

qui génére une erreur 32755 'La commande Annuler a été sélectionnée' que
l'ont peut utiliser avec la gestion d'erreur :

CommonDialog1.CancelError = True
On Error Resume Next
Err.Clear
CommonDialog1.ShowOpen
If Err.Number = 32755 Then
MsgBox "Click sur Annuler"
Else
Traitement
End If

Cela fonction sous VB6, mais sous VBA Excel 2003, l'erreur n'est pas
générée.

--
Cordialement,

Jacques.