XL 2016 Enlever le 0 dans une suite de chiffres d'un textbox

sylvaindavid2

XLDnaute Nouveau
Bonjour à tous,

J'aurais besoin de votre aide pour un petit souci.
Dans un textbox, j'ai mis une fonction qui permet de ne mettre que des digits est un point.
Maintenant j'aimerais pouvoir trouver une fonction qui me supprime le premier zéro qui est inutile.
Exemple :
La personne inscrit dans le textbox la valeur 01.23
Je voudrais supprimer le premier 0 pour avoir automatiquement la valeur 1.23
Mais par contre si la personne entre la valeur 0.23, je veux conserver le premier 0 et garder 0.23

J'ai pensé faire une fonction qui contrôle la chaîne de caractère mais mon souci c'est que cette fonction est assez longue et que j'ai une centaine de textbox.
J'aurais aimé trouver une fonction plus simple.

Merci pour votre aide!
 
Solution
BON VOILA j'ai modifié viré des trucs filé des coups de pied
et on a le résultat souhaité
un seul bemole la première fois après l'affichage de l'userform c'est un tout petit peu plus long mais beaucoup moins qu'avant
lance le userform
clique sur un des boutons choix et un des boutons pages

je précise que j'ai fait les tests sans masquer les pages est c'est tout aussi long
on est donc vraiment dans la limite memoire là selon moi
mais bon ca fonctionne ;)

jmfmarques

XLDnaute Accro
Bonjour
As-tu essayé d'utiliser simplement la fonction Val ?
Elle est toute indiquée dès lors que (tes exemples) le séparateur décimal utilisé est le "."

EDIT : je viens de relire et voir :
j'ai une centaine de textbox.
Rien à voir avec ce qui est dit plus haut, mais de nature à remettre probablement en cause la conception elle-même. Mais c'est là autre chose.
 
Dernière édition:

CROUZAT

XLDnaute Nouveau
Bonjour,

Essaye de jouer avec la fonction VBA LEFT(taTextbox.text,2).
Cela va te permettre d'extraire les 2 caractères de gauche de ta textbox.

Tu finis ensuite par indiquer les conditions :
If left(taTextbox.text,2) <> "0," and left(taTextbox,1)= "0" then taTextbox.Text = right(taTextbox.text, len(taTextbox.text)-1)

En gros si les 2 caractères de gauche sont différents de "0," et que le premier caractère est 0 alors taTextbox est égal à tous les caractères en partant de la droite jusqu'à la longueur initiale de ta textbox-1 ; ce qui supprimera le premier caractère.
 

patricktoulon

XLDnaute Barbatruc
bonjour
J'ai pensé faire une fonction qui contrôle la chaîne de caractère mais mon souci c'est que cette fonction est assez longue et que j'ai une centaine de textbox.
J'aurais aimé trouver une fonction plus simple.

ben au plus simple
tu vire ta fonction qui( permet de ne mettre que des digits est un point. )
tu vire tout fonction ou sub ayant pour fonction de contraintre ton textbox a un orthographe

voila maintenant que c'est propre et que l'on y vois un peu plus clair

on va s'occuper de tes cents textbox en un coup

a tu entendu parler de classe voir de module classe et le module userform en est un ???

non?
alors voila comment je vais classer tes 100 textboxs et les contraindre au seul chiffre 0 à 9 avec le point pour decimal

en premier lieu en mode vbe met un tag a tout tes textbox concernés
tu les sélectionne tous et tu va a "Tag" a gauche dans propriété
moi j'ai mis "num"

c'est parti

en premier tout en haut du module userform tu va créer un event pour textbox

VB:
Option Explicit
Public WithEvents txtb As msforms.TextBox
Dim cls() As New UserForm1'ici c'est le nom de ton userform pour l'exemple c'est userform1

ensuite dans le activate tu va classer tout tes textbox qui ont un tag

VB:
Private Sub UserForm_Activate()
Dim ctrl, x&
For Each ctrl In Me.Controls
If ctrl.Tag = "num" Then: x = x + 1: ReDim Preserve cls(0 To x): Set cls(x).txtb = ctrl
Next
End Sub

voila maintenant l'event change
VB:
Private Sub Txtb_Change()
If Not txtb Like "*.*" Then txtb = Val(txtb)
If txtb Like "*[A-z]*" Then txtb = ""
End Sub



et voila terminé
tes cents textboxs n'auront pas le 0 devant sauf si valeur moins de 1 ex : 0.45

un tout petit fichier démo
 

Pièces jointes

  • sylvaindavid2 textboxs.xlsm
    15.8 KB · Affichages: 10
Dernière édition:

sylvaindavid2

XLDnaute Nouveau
Bonjour à tous!

Je suis désolé de vous répondre avec du retard mais j'ai du passer en télétravail depuis hier et pas facile de changer son organisation J
Pour commencer, je vous remercie pour votre aide!

Patricktoulon, je ne connaissais pas du tout le module Userforme !

Ça fonctionne très bien mais je n’avais pas précisé une chose (dsl), mes Textboxs ne sont pas dans une seule feuille mais en Multipage.

En gros, j’ai 30 Textboxs par page.

Et le souci c’est que l’exécution de la macro prends pas mal de temps.

J’ai essayé mais sans succès d’exécuter la macro que sur la page que je sélectionne pour éviter de traité tous les Textboxs.

Dans chaque page, j’ai mis dans le tag « num » différent, page 1 : num1, page 2 : num2 etc..

Je joints un fichier avec les multipages.

Merci encore pour votre aise !!!

Bonne journée et bon confinement
 

Pièces jointes

  • Copie de sylvaindavid2 textboxs-V2.xlsm
    23.7 KB · Affichages: 8

sylvaindavid2

XLDnaute Nouveau
Merci pour ta raiponce.
J'ai remis dans le Tag de tous le Textboxs qui m'intéressais la valeur "num".
Ca fonctionne bien, les 0 sont effacé :p.
Le problème c'est le temps d'exécution, il est très long.
Il n'est pas possible de traiter que les Textboxs qui sont de la page que je sélection plutôt que l'ensembles des Textboxs de l'Userforme?
A chaque fois que je sélectionné une page, la macro serais exécuter par exemple.
Je te joints mon vrai fichier (Il n'est pas encore fini et je ne suis pas un expert du tout :):rolleyes:). Je n'ai pu mettre que la macro pas le fichier Excel qui étais trop volumineux.
1er sans la macro et le 2ème avec la macro.

Merci!!!

Ps: Ca fonctionnais très bien mais depuis que j'ai mi "num" sur tous mes Textboxs, j'ai un message d'erreur, je me demande si il n'y a pas trop d'information a traiter!?
 

Pièces jointes

  • Avec macro.zip
    1.4 KB · Affichages: 1
  • Sans macro.zip
    1.2 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
et bien soit si il y a que des textbox dans tes pages

VB:
Public WithEvents txtb As msforms.TextBox
Dim cls() As New UserForm1


Private Sub MultiPage1_Change()
Dim ctrl, x&
For Each ctrl In Me.Controls
pag = "Page" & MultiPage1.Value + 1
If ctrl.Parent.Name = pag Then: x = x + 1: ReDim Preserve cls(0 To x): Set cls(x).txtb = ctrl
DoEvents
Next

End Sub


Private Sub Txtb_Change()
If Not txtb Like "*.*" Then txtb = Val(txtb)
If txtb Like "*[A-z]*" Then txtb = ""
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
heu je sais pas si tu a remarqué mais je controle plus par le tag je controle par le page parent
a moins que dans tes pages il n'y ai pas que des textboxs , je me suis fié a ton exemple de fichier
il faut donné un un exemple complètement représentatif des conditions sinon on va pas s'en sortir hein :rolleyes:
 

Pièces jointes

  • Copie de sylvaindavid2 textboxs-pat.xlsm
    23.6 KB · Affichages: 3
Dernière édition:

sylvaindavid2

XLDnaute Nouveau
Oui effectivement ca sera plus facile avec mon fichier.
Dans le multipage2 il y a 27 onglets et je voudrais que dans les Textboxs ou il y a "num" dans tag, ta macro fonctionne mais pas dans les autres.

Pour changer d'onglet, il suffi de sélectionner un type d'outil (Standard, Ebauche, Diamant etc..).

J'espère que tu aura réussi à me comprendre :oops:
 

Pièces jointes

  • Complet.xlsm
    571.4 KB · Affichages: 6

patricktoulon

XLDnaute Barbatruc
re
VB:
Private Sub MultiPage2_Change()
Dim ctrl, x&
For Each ctrl In Me.Controls
pag = "Page" & MultiPage2.Value + 1
If ctrl.Parent.Name = pag And ctrl.Tag = "num" Then: x = x + 1: ReDim Preserve cls(0 To x): Set cls(x).txtb = ctrl
DoEvents
Next
End Sub

terminé ;)
 

sylvaindavid2

XLDnaute Nouveau
Bon, désoler mais j'ai encore un petit problème :rolleyes:
La macro fonctionne bien mais elle est très longue à l'exécution.
J'ai mis un compteur pour voir le nombres de boucle qu'elle fais à chaque exécution et le résultat est de 1158 fois.
Je ne comprend pas pourquoi elle fait autans de boucles alors que j'ai 12 Textboxs dans ma page.

Y aurait-il une solution pour que l'exécution soit plus courte?
Merci!
 

Pièces jointes

  • Capture macro.PNG
    Capture macro.PNG
    107.1 KB · Affichages: 4

Discussions similaires

Réponses
10
Affichages
206

Statistiques des forums

Discussions
312 198
Messages
2 086 134
Membres
103 129
dernier inscrit
Atruc81500