Fermer une boite de dialoque Excel

geolap74 Messages postés 2 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 20 novembre 2009 - 20 nov. 2009 à 11:48
geolap74 Messages postés 2 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 20 novembre 2009 - 20 nov. 2009 à 16:14
Bonjour,

J'ai créé sur Excel une feuille de type boite de dialogue VB5 contenant des dropdown, editbox etc ..

j'arrive à afficher cette boite de dialogue et à traiter les informations.

J'applique une vérification des données après validation de la boite de dialogue (par exemple je vérifie que les editbox devant contenir des dates contiennent bien des dates), je voudrais en cas d'erreur afficher à nouveau la boite de dialogue.

J'ai opéré comme ceci :

'affiche la boite de dialogue
Sub form_init()
    With Sheets("formulaire.inc")
        .Show
    End With
End Sub

'validation de la boite de dialogue
Sub validation()
    erreur = 0
    With ActiveDialog
    '.......
    'ici j enregistre les données de la boite dans des variables
    '.......
    End With

    '......
    'je vérifie le format des données
    '......

    'si il n'y a pas d erreur j enregistre sinon j affiche la boite de dialogue
    If erreur = 0 Then
        traitement
    Else
        form_init
    End If
End Sub


Mais j'obtiens une erreur à la compilation, car après la validation, la boite de dialogue reste ouverte jusqu'à la fin de l'exécution de la macro.

Donc en cas d'erreur la fonction form_init échoue car pour Excel la boite de dialogue étant déjà ouverte, il ne peut l'ouvrir une seconde fois.

Existe-t-il une commande pour fermer cette boite de dialogue avant la fin de la macro ?

Merci.

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 12:06
Salut
"une feuille de type boite de dialogue VB5" : C'est quoi ?
Tu es dans le VBA de Excel ou dans VB5 ?
Tu utilises dans le VBA un composant créé sous VB5 ?
C'est "ActiveDialog", ce composant ?
S'agit-il d'une simple UserForm ou réellement d'un objet VB5 importé sous VBA ? sous quelle forme ?
Comment lances-tu l'affichage de cette boîte de dialogue ?

Qui lance la routine "Validation" ?

Pas clair, donc à éclaircir.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 12:16
Si c'est "Form_Init" qui lance "Validation" et que, dans "Validation", tu relances "Form_Init", ça va se mordre la queue : pas bon
Si tu es dans "Validation" et que tu dois refaire les mêmes opérations depuis le début, ne sors pas de "Validation" et utilise un Goto sur un Label en tête de code.

Autre idée :
Si c'est "Form_Init" qui lance "Validation", transforme "Validation" en Function qui renverra un Booléen qui renverra à "Form_Init" si tout est Ok ou pas.
Function Validation() As Boolean
  ' ton code
  ' Toute est Ok :
  If "tout est Ok" Then
    Validation = True
  Else
    Validation = False
End Function

et pour l'appeler dans "Form_Init"
  Dim bResult As Boolean
LabelDebut:
  bResult = Validation ' Appel de ta fonction
  If bResult = False Then Goto LabelDebut  ' recommence au début pour rappeler Validation

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
geolap74 Messages postés 2 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 20 novembre 2009
20 nov. 2009 à 16:14
Merci pour cette réponse rapide.

Alors, ça commence bien, je vous embrouille avec mon annotation VB5 erronée !
Je suis dans le VBA d'Excel et c'est un simple UserForm, mais je n'ai pas créé via un code VBA, mais en cliquant droit sur un onglet Excel/insérer/boite de dialogue Microsoft Excel 5.0
Sur cette feuille vierge, on a une interface graphique où on voit une boite de dialogue vierge (enfin avec un bouton "OK" et "Annuler"). J'ai développé la boite de dialogue sous cette interface graphique (liste déroulantes et zones de texte).

-"ActiveDialog" correspond à la dernière boite de dialogue ouverte(donc active).
-La boite de dialogue est affichée à l'aide de la ligne
Sheets("formulaire").Show
du sub "form_Init ()"
-La validation est lancée par le bouton "OK" qui se trouve dans la boîte de dialogue de la feuille "formulaire"

Je vais essayer de comprendre le fonctionnement de ta solution Fonction pour essayer de l'appliquer. J'y vois déjà un soucis, car dans le code de validation, il y a un cas où j'affiche une autre boite de dialogue qui comporte 2 choix possible dont 1 est d'utiliser la boite de dialogue "formulaire" pour y récupérer les données saisies précédemment pour les modifier le cas échéant. Je me retrouve donc avec les 2 fenêtres ouvertes dont celle qui comporte les 2 choix possible active. Alors que je souhaite la fermer pour pouvoir dialoguer à nouveau avec la fenetre "formulaire" qui redevient du coup l'ActiveDialog.

Me fais-je comprendre ? ;o)
0
Rejoignez-nous