[VBA]Condition : 13 chiffres entrés seulement
Résolu
lml-mike
Messages postés
455
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Polux31 Messages postés 6917 Date d'inscription Statut Membre Dernière intervention -
Polux31 Messages postés 6917 Date d'inscription Statut Membre Dernière intervention -
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 :$
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:
- [VBA]Condition : 13 chiffres entrés seulement
- Excel cellule couleur si condition texte - Guide
- Excel compter cellule couleur sans vba - Guide
- Excel condition ou - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
8 réponses
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+
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+
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+
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+
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 ! :)
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 ! :)
Bonjour,
J'ai mis un exemple sur ce lien : https://www.cjoint.com/?ehkQvn5PaG
Bon courage
;o)
Polux
J'ai mis un exemple sur ce lien : https://www.cjoint.com/?ehkQvn5PaG
Bon courage
;o)
Polux
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 :
Qu'as-tu fais là au juste ? J'ai pas compris :S
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
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
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 :
;o)
Polux
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.TextOn stock dans la feuille "Save" (onglet) dans la cellule B2 la valeur saisie dans TextBox1.
;o)
Polux
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :
Bon app à to aussi
;o)
Polux
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
nom = Inputbox("donnez un nom")
lieu = inputbox("donnez un lieu")
userform1.show
userform2.show 'il faut supprimer cette ligne
lieu = inputbox("donnez un lieu")
userform1.show
userform2.show 'il faut supprimer cette ligne
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é :$
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é :$
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.
Peux-tu mettre ton fichier ici : https://www.cjoint.com/ et coller le lien dans ton prochain post.
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 :)
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 :)
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 !
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 !
Si tu as une doc sur lequel je peux me référer, je prends avec plaisir :)
Tu en met un sur le UC tu le selectionne et ensuite tu rape F1. C'est le mode d'emploi.
A+
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 !