geolap74
Messages postés2Date d'inscriptionlundi 20 octobre 2008StatutMembreDernière intervention20 novembre 2009
-
20 nov. 2009 à 11:48
geolap74
Messages postés2Date d'inscriptionlundi 20 octobre 2008StatutMembreDernière intervention20 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 ?
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
geolap74
Messages postés2Date d'inscriptionlundi 20 octobre 2008StatutMembreDernière intervention20 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.