Koda86
Messages postés13Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention19 février 2010
-
18 févr. 2010 à 17:36
Koda86
Messages postés13Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention19 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 19 févr. 2010 à 09:28
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 18 févr. 2010 à 18:45
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
c148270
Messages postés303Date d'inscriptionmercredi 12 janvier 2005StatutMembreDernière intervention 3 octobre 20131 19 févr. 2010 à 02:35
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 19 févr. 2010 à 08:09
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
c148270
Messages postés303Date d'inscriptionmercredi 12 janvier 2005StatutMembreDernière intervention 3 octobre 20131 19 févr. 2010 à 08:18
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
c148270
Messages postés303Date d'inscriptionmercredi 12 janvier 2005StatutMembreDernière intervention 3 octobre 20131 19 févr. 2010 à 08:33
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;
Koda86
Messages postés13Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention19 février 2010 19 févr. 2010 à 08:36
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 19 févr. 2010 à 08:40
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
Koda86
Messages postés13Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention19 février 2010 19 févr. 2010 à 09:03
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!
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 19 févr. 2010 à 09:05
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
Koda86
Messages postés13Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention19 février 2010 19 févr. 2010 à 09:24
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 19 févr. 2010 à 09:39
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 19 févr. 2010 à 09:40
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
Koda86
Messages postés13Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention19 février 2010 19 févr. 2010 à 09:57
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 !