[déplacé VB6 -> VBA] Formulaire sous excel [Résolu]

Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
- - Dernière réponse : Koda86
Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
- 19 févr. 2010 à 09:57
Bonjour,

J'aimerai créer un formulaire sous Excel avec un certain nombre de champs.
J'aimerai créer une macro qui empêche ou bloque la fermeture du fichier Excel lorsque certains champs ne sont pas remplis.

Pouvez vous m'aider ?

Merci beaucoup !
Afficher la suite 

17 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
3
Merci
Il te faut donc ajouter un bouton de commande (par exemple) et utiliser son évènement click
Dans cet évènement click, tu vérifies que tes cellules sont remplies.

C'est là une opération simple !
Ex pour regarder ce que contient la cellule K5 de la feuille Feuil14 :

msgbox sheets("feuil1").range("K5").value

!!!
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 133 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
303
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 octobre 2013
3
Merci
Un dernier mot

Une macro peut se déclancher automatiquement à la fermeture.
Il suffit de la nommer auto_close

Bonne journée et bon WE

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 133 internautes nous ont dit merci ce mois-ci

Commenter la réponse de c148270
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Bonjour,
Une telle macro, si on pouvait la créer, ne servirait à rien dès lors que l'utilisateur pourrait toujours, s'il le désire, en faire à sa tête (y compris par la méthode brutale CTRL-ALT-SUPP)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
303
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 octobre 2013
0
Merci
bonjour
Voici les commandes pour désactiver et restaurer le menus.
Je les ai utilisées pour répondre à la deuxième question .

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _
ByVal bRevert As Integer) As Integer

Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Integer, _
ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer

Sub Disable_Control() ' fait disparaitre la barre de menu windows
Dim X As Integer, hwnd As Long
hwnd = FindWindow("XLMain", Application.Caption)
For X = 1 To 9
Call DeleteMenu(GetSystemMenu(hwnd, False), 0, 1024)
Next X
End Sub
Sub RestoreSystemMenu() ' fait réappraitre la barre de menu windows
Dim hwnd As Long
hwnd = FindWindow("xlMain", Application.Caption)
hMenu% = GetSystemMenu(hwnd, 1)
End Sub
Sub suppressmenuexceldisable() ' fait disparaitre la barre de menu excel
Set cmde = Application.CommandBars
i = 0
Do While i < cmde.Count
i = i + 1
cmde.Item(i).Enabled = False
Loop
End Sub

Sub restoremenuexcelenable() ' fait réapparaitre la barre de menu excel
Set cmde = Application.CommandBars
i = 0
Do While i < cmde.Count
i = i + 1
cmde.Item(i).Enabled = True
Loop
End Sub
Sub restoremenuexcelvisible()
Set cmde = Application.CommandBars
i = 0
Do While i < cmde.Count
i = i + 1
cmde.Item(i).Enabled = True
Loop
i = 0
Do While i < cmde.ActiveMenuBar.Controls.Count
i = i + 1
cmde.ActiveMenuBar.Controls.Item(i).Visible = True
j = 0
Loop
i = 0
Do While i < cmde.ActiveMenuBar.Controls.Item(4).Controls.Count
i = i + 1
cmde.ActiveMenuBar.Controls.Item(4).Controls.Item(i).Visible = True
Loop
End Sub

La combinaison ctrl+alt+supp est toujours active.
Je n'ai pas d'exemple ici mais je dois trouver ca au boulot.
Attention cependant ces macros sont valables pour excel quelque soit le classeur.
Si à la fermeture les barres ne sont pas restaurées elles n'apparaitront pas même si l'on ferme excel et l'on ouvre un autre classeur.

Bonne journée
Commenter la réponse de c148270
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Bonjour, c148270,

Ta solution est doublement dangereuse.
- Elle ne fait que "cacher" et ne protège nullement de l'utilisation du clavier
- Elle aura pour effet, en cas d'interruption brutale (pas seulement par CTRL-ALT-SUPP, mais également en cas de panne de courant ou autre...), de laisser en l'état Excel (j'entends déjà la sonnerie du téléphone du responsable informatique d'une entreprise... )

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
303
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 octobre 2013
0
Merci
Bonjour ucfoutu

Ta remarque est exacte.
Je suis en entreprise.
Je n'ai fait que répondre à une demande de la maîtrise d'Ouvrage qui a insisté malgré mes conseils.
j'ai donc appliqué.

Il est vrai qu'après un mois d'utilisation elle m'a demandé de retirer ces fonctions.

Nota : j'avais sur un serveur de quoi rétablir à distance

Bonne journée
Commenter la réponse de c148270
Messages postés
303
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 octobre 2013
0
Merci
Rebonjour

Une autre solution serait peut-être de tester le champs avant fermeture.
S'ils ne sont pas renseignés il est possible soit de reboucler soit de fermer sans sauvegarde;

A étudier
Commenter la réponse de c148270
Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
0
Merci
Merci pour toutes vos réponses ! Un userform qui apparait pourrait faire l'affaire.
Je sais comment faire un userform et le faire apparaitre, en revanche, je ne sais pas comment vérifier que les champs que je veux ne soient pas vides.

Serait ce plus simple pour vous ?

Merci beaucoup !
Commenter la réponse de Koda86
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Sois alors plus précis : que sont exactement ces "champs" et où sont-ils placés ?


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
0
Merci
Ok ! En fait, les champs que j'aimerai voir remplis absolument avant la fermeture de mon fichier sont dans l'onglet "Feuil1" et dans les cellules K12, K13 et K14. J'espère que ca peut vous aider!
Commenter la réponse de Koda86
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Sois alors plus précis : que sont exactement ces "champs"

Tes "champs" sont-ils les cellules elles-mêmes ? ou quelque-chose (et quoi exactement ?) mis dans les cellules ?
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
0
Merci
Oui mes champs sont en fait les cellules que j'ai cité. En gros, ils doivent entrer dans la cellule K12 un code TVA, en K13 un numéro de téléphone et en K14 un autre numéro. Je voudrais juste un contrôle qui vérifie que si il n y a rien d'entrer dans ces cellules alors le userform apparait.
Commenter la réponse de Koda86
Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
0
Merci
Merci ! Peut il y avoir ce contrôle avant la fermeture du fichier ? Par exemple, avant que le fichier se ferme, la macro contrôle que ces cellules ?

Je ne sais pas si c'est faisable mais ce serait exactement ce que je veux.

Merci pour ton aide !
Commenter la réponse de Koda86
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Mais il me semble que tu tournes en rond sur ce point ...
Nous y avons déjà répondu, non ?
Tu ne peux effectuer cette opération de contrôle qu'en la déclenchant toi-même....
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
et tu ne peux non plus empêcher la fermeture (contrôle ou pas contrôle effectué) !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
0
Merci
Ok ! Désolé mais je pensais qu'il y aurait un moyen ! Merci beaucoup pour votre aide !
Commenter la réponse de Koda86
Messages postés
13
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
19 février 2010
0
Merci
Parfait ! Je ne veux pas forcement bloquer la fermeture mais juste les informer qu'ils ont oublié de remplir des cellules. Ça devrait bien m'aider !! Merci !
Commenter la réponse de Koda86