[VBA]Condition : 13 chiffres entrés seulement

Résolu/Fermé
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 4 avril 2008 à 11:48
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 7 avril 2008 à 17:40
Bonjour,

Je suis désolé de faire un post pour un problème aussi futile, mais est-ce que vous savez comment je fais pour imposer la condition dans une inputbox que l'utilisateur saisie 13 et seulement 13 chiffres (pareil pour les lettres, juste pour ma culture personnelle).

Merci :$
A voir également:

8 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
4 avril 2008 à 11:57
Bonjour,
En VBA tu peu faire un inputBox toi-même avec un usercontrol auquel tu ajoute une zone de texte limitée à 13 caractères.

Ou avec une macro tester la longeur de la chaine entrée dans le Box.
dim Txt as string
Txt = inputbox("Entrez un code de 13 Chiffres ou lettres")
if len(Txt)<>13 then
MsgBox("Entrée invalide")
exit sub
end if
.... Suite du traitement
A+
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
4 avril 2008 à 12:05
Ah, le usercontrol m'interesse...permet-il également d'imposer une séparation, par exemple de type "0000 0000 0000 0" ?

Si tu as une doc sur lequel je peux me référer, je prends avec plaisir :)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018
4 avril 2008 à 12:28
Oui, Quand tu ajoute un UserControl il y a une boite à outil qui apparait également, clic droit sur une partie sans bouton et une liste de composants supplémentaires est disponnible, tu coche Microsoft Masked Edit Control.
Tu en met un sur le UC tu le selectionne et ensuite tu rape F1. C'est le mode d'emploi.
A+
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120 > lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
4 avril 2008 à 14:09
Merci, je jettes un coup d'oeil, et dès que j'ai la fonction complète, je la publie en mettant résolu :)
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120 > lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018
4 avril 2008 à 15:01
hmmm...est ce que tu es sûr qu'il s'agit de la fonction usercontrol ? Car moi dans la doc office comme sur le site de microsoft il fait référence à la distinction de si une appli a été démarré par un programme ou un user ...

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa173472(v=office.11)?redirectedfrom=MSDN

Tu pourrais m'éclairer un peu sur la fonction ? :$

Merci !
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
5 avril 2008 à 09:04
Autant pour moi, en VBA c'est un UserForm.
UserForm n'est pas une fonction mais une feuille qui s'affiche comme un inputbox.
Quand tu est dans l'éditeur VBA (Alt+F11) >Insertion > UserForm
Tu peu y incorporer des contrôles tel que le texte que je t'ai signaler + des labels etc...
A+
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
7 avril 2008 à 10:00
Salut,

Merci, j'ai trouvé pour le Userform,

J'ai crée ça : http://img214.imageshack.us/img214/969/userformnc7.jpg

Le problème c'est que j'aimerais incorporer quelques contraintes mais je ne sais pas du tout comment m'y prendre :

- Passer à la case suivante dès que le champ est entièrement rempli (j'ai fixé les limites de champ a 4 sauf le dernier a 1 et j'ai mis dans l'ordre les tabindex)
- Supprimer la croix, pour forcer l'utilisateur à cliquer sur le bouton annuler
- Ici, que renvoie le bouton "ok" et le bouton "annuler" sur ma feuille principale ? Une sorte de Userform1.vbOK ?
- Je pourrais par la suite faire un "SIM = Userform1.SIM1.value & Userform1.SIM2.value & Userform1.SIM3.value & Userform1.SIM4.value" ?
- Ah oui, j'aimerai aussi cacher par défaut le bouton ok (le rendre grisé), et le rendre visible et enable quand tout les champs ont été remplis...
- et enfin, un petit contrôle sur le fait que tout les champs soient bien numériques, sans quoi un retry s'impose :P

J'espère ne pas trop en demander, ça fait vraiment énoncé d'examen lol :$

Merci d'avance pour tout tes précieux conseils ! :)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 avril 2008 à 10:42
Bonjour,

J'ai mis un exemple sur ce lien : https://www.cjoint.com/?ehkQvn5PaG

Bon courage

;o)

Polux
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
7 avril 2008 à 11:24
Merci infiniment de t'être donné la peine ! :-))

Bon alors, j'ai compris le système, j'aurais jamais pensé au set focus :D

Par contre, s'en suit quelques petites questions subsidiaires :

Option Explicit
Private Const SC_CLOSE = &HF060&
Private Const MF_BYCOMMAND = &H0&

Private Declare Function GetSystemMenu Lib "user32" _
        (ByVal hwnd As Long, ByVal bRevert As Long) As Long
        
Private Declare Function RemoveMenu Lib "user32" _
        (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

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


Qu'as-tu fais là au juste ? J'ai pas compris :S

Private Sub UserForm_Initialize()
Dim hSysMenu As Long
Dim MeHwnd As Long

    MeHwnd = FindWindowA(vbNullString, Me.Caption)
    If MeHwnd > 0 Then
        hSysMenu = GetSystemMenu(MeHwnd, False)
        RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
    Else
        MsgBox "Handle de " & Me.Caption & " Introuvable", vbCritical
    End If
    
End Sub


La non plus :$


Ce userform apparait à la suite de plusieurs inputbox dans une procédure sur mon classeur principal. Y a-t-il un moyen de faire une "pause" a la procédure, jusqu'à ce que j'ai cliqué sur OK dans le userform ?
Comment je pourrais exporter les variables assemblées de mes textbox sur mon classeur principal, sachant que je perds les variables de mes textboxs si celui ci est fermé ... ?

Rah encore désolé de toutes ces questions, je me sens nul de pas savoir ça :S
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 avril 2008 à 11:55
re,

Ce bout de code utilise une API windows qui rend inutilisable la croix en haut à droit de la UserForm.
Ce userform apparait à la suite de plusieurs inputbox dans une procédure sur mon classeur principal. Y a-t-il un moyen de faire une "pause" a la procédure, jusqu'à ce que j'ai cliqué sur OK dans le userform ?. Dsl je ne comprends pas bien l'enchainement ...

Comment je pourrais exporter les variables assemblées de mes textbox sur mon classeur principal, sachant que je perds les variables de mes textboxs si celui ci est fermé ... ?. Il faut ajouter dans chaque procédure textbox_change ce bout de code :
Worksheets("Save").Range("B2")Value = TextBox1.Text
On stock dans la feuille "Save" (onglet) dans la cellule B2 la valeur saisie dans TextBox1.

;o)

Polux
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
7 avril 2008 à 12:08
Merci encore :)

Ce userform apparait à la suite de plusieurs inputbox dans une procédure sur mon classeur principal. Y a-t-il un moyen de faire une "pause" a la procédure, jusqu'à ce que j'ai cliqué sur OK dans le userform ?

Imaginons que ma procédure ce lance suite à un raccourci clavier ou un bouton présent sur la première feuille.

nom = Inputbox("donnez un nom")
lieu = inputbox("donnez un lieu")
userform1.show
userform2.show
msgbox("nom = " & nom & chr(13) & chr(10) & "lieu = " & lieu, vbokcancel + 256, "récaptiulatif")
For i = 1 to 500
.........

En suivant cette procédure, les 2 userform s'affichent en même temps, ainsi que la message box...j'aimerai que le userform2 ne se lance pas avant que le userform1 n'ai renvoyé la valeur VbOK, et que la suite du programme ne continue pas à se lancer tant que le userform2 n'ai pas renvoyée la valeur vbOK :)

Voilà ce que je voulais dire :)

Bon appétit !

EDIT : Je vais plutôt mettre ces valeurs ans une seule case concaténé à l'appui de OK, mais n'y a t il pas un autre moyen que de simplement les mettre en dur sur la feuille ? :$ (par exemple exporter les variables pour les utiliser dans la procédure principale ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 avril 2008 à 12:16
re,

Il faut donc mettre UserForm2.Show dans le retour de VbOk. Il faut mettre dans le UserForm1 un truc comme ça, à l'endroit qui doit lancer le UserForm2 :
Dim OkNo As Integer
    OkNo = MsgBox("blablabla", VbYesNo, "Message")
    If OkNo = VbYes Then
        UserForm2.Show
        Unload Me
    Else
        Exit Sub
    End If

Bon app à to aussi
;o)

Polux
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
7 avril 2008 à 14:00
oui, ok, mais en attendant le msgbox après le userform1 se lance en même temps que celui ci, meme si le userform2 n'est pas encore montrée :S
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 avril 2008 à 14:34
nom = Inputbox("donnez un nom")
lieu = inputbox("donnez un lieu")
userform1.show
userform2.show 'il faut supprimer cette ligne
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
7 avril 2008 à 14:49
Mon dieu je m'exprime mal ...

ce n'est pas le userform2 qui s'affiche en même temps que le userform1, mais la suite !

C'est à dire que avec l'exemple que je t'ai filé, je rentre le nom, le lieu, et au moment où le script arrive à userform1, il me met par-dessus ce userform le msgbox récapitulatif, tout en continuant le script...

Il me faudrait quelque chose que je puisse mettre qui arrête le script pendant que j'opère sur le userform2, et dès que j'ai appuyé sur valider, le script continue...

Je sais pas si j'ai réussi à me faire comprendre, je suis désolé je suis pas du tout une lumière pour expliquer, surtout les choses simples :S

désolé :$
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 avril 2008 à 15:24
en fait je pense que tu as tout ce qu'il faut pour faire tourner ton script ... mais dans le désordre ... il faut certainement remettre les choses comme elles doivent se dérouler.
Peux-tu mettre ton fichier ici : https://www.cjoint.com/ et coller le lien dans ton prochain post.
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
7 avril 2008 à 15:31
voilà il est disponible à cette adresse : https://www.cjoint.com/?ehpFzHIGhR

Je ne pense pas avoir oublié quelque chose...

Je te laisse voir :)

EDIT : ne t'inquiète pas pour la flèche qui pointe nulle part, j'attends de la macro soit fonctionnelle pour la coller dans un bouton :)
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120 > lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018
7 avril 2008 à 15:44
Ok j'ai trouvé...en changeant deux propriétés des Userform,

fmCycleCurrentForm, pour mettre le formulaire en premier plan, et
Showmodal en True, pour avoir le focus...

Tout est enchainé, le programme fonctionne, un merci gros comme ça à toi polux31, ainsi qu'a lermite222, je vais pouvoir profiter de mon petit script tout chaud dès que j'ai tout finalisé :))))

Bonne journée à vous, et encore merci !
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 avril 2008 à 17:40
de rien, bonne continuation

;o)

polux
0