Renvoyer les chiffres dans le format nombre sur le tableau Excel

Bonjour

J'utilise un formulaire où je dois saisir un code INSEE.

Je n'arrive pas à trouver comment renvoyer les chiffres au format nombre dans mon tableau Excel.
Il me renvoie systématiquement au format texte.
du coup, la mise en forme conditionnelle m'affiche en rouge le bon nombre que j'ai mis en comparateur car il le considère comme du texte. :(

capture d ecran 2024 09 02 123648

voici le code VBA qui me permet juste de changer l'affichage dans le formulaire

Private Sub TextBoxCom_Insee_Change()
        ' si différent de 92026 (courbevoie) le code insee s'affiche en rouge et le titre en blanc sur fond rouge
            If TextBoxCom_Insee <> 92026 Then
               TextBoxCom_Insee.ForeColor = vbRed
               TextBoxCom_Insee.BackColor = vbWhite
               Lbl_com_insee.ForeColor = vbWhite
               Lbl_com_insee.BackStyle = fmBackStyleOpaque
               Lbl_com_insee.BackColor = vbRed
           End If
End Sub

merci d'avance.

Bonjour,

tu ne dis pas comment tu les rentre, difficile de te dire quelle est l'erreur.
Tu peux agir au niveau du test qu'il accepte les 2 types de donnée : If clng(TextBoxCom_Insee) <> 92026 Then

Bonjour

Merci de me proposer une solution.

J'ai pourtant indiqué

J'utilise un formulaire où je dois saisir un code INSEE.

C'est depuis la TextBox du formulaire (userform) que je saisi les chiffres, qui sont ensuite envoyé au tableau dont il dépend.

Le problème ne vient pas de la façon dont je saisi les chiffres au clavier depuis le formulaire dans la TextBox.

Private Sub BtnSauvegarder_Click()

.../... 

    Cells(NumLigne, 15) = Me.TextBoxCom_Insee   ' colonne O
.../...
End Sub

J'espère avoir répondu avec précision.
Merci de ton aide.

Bonjour à tous

Il est d'usage de typer en texte tout ce dont la valeur numérique n'est qu'une convention et où le 0 est loin d'être non significatif : code postaux, code INSEE, numéros de téléphone.

Certes tu n'habites pas un des 9 premiers départements mais il est préférable de respecter les normes...

Merci à vous deux.

Effectivement, cela m'a permis de déceler qu'il manquait le "zéro" en tête des numéros de DAE. (c'est un autre champs)
il doivent impérativement avoir 12 chiffres.
Je sais comment limiter le nombre de caractère via MaxLength, mais du coup, il va falloir que je trouve le code pour obliger une saisie de 12 chiffres.
Je vais chercher et si je ne trouve pas, je reviendrai.
Merci à vous deux.

sujet résolu.

juste pour vous dire que j'ai trouvé comment faire.

Private Sub TextBox_id_euro_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    Dim ValeurID_euro As Byte
        ' id_euro  maxLength = 12  défini dans les propriétés
        ValeurID_euro = Len(TextBox_id_euro)

            If ValeurID_euro = 11 Then
                 ValeurID_euro = MsgBox("il manque 1 chiffre à ce numéro de DAE", bExclamation, "Numéro de DAE INCORRECT")

            ElseIf ValeurID_euro < 11 Then
                ValeurID_euro = MsgBox("il manque au moins 2 chiffres à ce numéro de DAE", vbExclamation, "Numéro de DAE INCORRECT")
        End If
End Sub

je ne sais pas si tout est vraiment bon, mais ça fonctionne.
c'est bon comme façon de faire ?

RE

Un simple

if Len(TextBox_id_euro)<>12 then MsgBox("Numéro de DAE INCORRECT. Il nécessite 12 caractères")

suffit

re,

tu contrôles la longueur mais pas les chiffres.
Tu peux faire ainsi :

    Dim a As String
    a = "123456789012"
    If a Like "############" Then
        Debug.Print "ok"
    Else
        Debug.Print "essaie encore"
    End If

"e23456789012" et "123456789.12" seront refusés
eric

Merci à vous deux.

Je vais m'amuser à faire un mix de tout ça. Histoire d'apprendre le vba.

Bonne soirée.

Like "############" contrôle aussi la longueur.
# c'est un joker pour un chiffre obligatoire. En mettre 12

retour d'information :

Je suis désolé eriiic mais je dois mal m'y prendre, le code que tu m'as indiqué ne fonctionne pas du tout.

Avec ou sans la ligne de code indiquée par 78Chris. Ça ne bloque rien du tout, totalement inopérant. J'ai essayé plein de combinaisons, rien. :(
Je dois mal m'y prendre, c'est sûr. Le diable se cache dans les détails.

Concernant la ligne de code que 78Chris a communiqué, quand je ferme la boite de dialogue, les chiffres saisis sont effacés et il y a un "1" à la place.
Pareil, j'ai essayé plusieurs lignes complémentaire pour que les chiffres ne soient pas effacés, mais je n'y suis pas parvenu.

Pour finir, j'ai mis ce code qui fonctionne et conserve les chiffres saisis (plus facile pour corriger un ou plusieurs chiffres manquants).
Ne me demandez pas pourquoi, je ne sais pas. Si vous avez la réponse à cette question, je suis preneur.
Le hic, c'est que je peux saisir des lettres aussi. Et certainement les caractères spéciaux. Je n'ai pas fait l'essai.

Merci d'avance

Dim ValeurID_euro As Byte
        ' TextBox_id_euro  maxLength = 12  défini dans les propriétés
        ValeurID_euro = Len(TextBox_id_euro)

            If ValeurID_euro = 11 Then
                 ValeurID_euro = MsgBox("il manque 1 chiffre à ce numéro de DAE" & Chr(10) & vbCrLf & _
                "Le numéro de DAE doit avoir 12 chiffres", bExclamation, "Numéro de DAE INCORRECT")

            ElseIf ValeurID_euro < 11 Then
                ValeurID_euro = MsgBox("il manque au moins 2 chiffres à ce numéro de DAE" & Chr(10) & vbCrLf & _
                "Le numéro de DAE doit avoir 12 chiffres", vbExclamation, "Numéro de DAE INCORRECT")
        End If
End Sub

Bonjour,

il faut adapter à ton fichier, c'est juste un exemple.
Et faire F1 sur les instructions que tu ne connais pas. Si tu as laissé debug.print et que tu ne sais pas où il met le résultat tu ne vas pas voir grand chose en effet.
eric

12classeur1.xlsm (17.17 Ko)

Merci eriiic,

J'ai ouvert ton fichier, examiné le code vba, mais je ne vois pas où est la restriction pour ne mettre que des chiffres.

J'ai tenté de trouver parmi les propriétés... mais quand on ne sait pas où chercher...

J'avais déjà compris pour le nombre de caractères en mettant autant de # qu'il y a de caractères voulus.

RE

Merci eriiic,

J'ai ouvert ton fichier, examiné le code vba, mais je ne vois pas où est la restriction pour ne mettre que des chiffres.

J'ai tenté de trouver parmi les propriétés... mais quand on ne sait pas où chercher...

J'avais déjà compris pour le nombre de caractères en mettant autant de # qu'il y a de caractères voulus.

Si la diagonale est le chemin le plus court pour atteindre le sommet du triangle cela ne se vérifie pas en lecture :

Like "############" contrôle aussi la longueur.
# c'est un joker pour un chiffre obligatoire. En mettre 12

C'est pourtant clair...

# veut dire qu'il veut un chiffre de 0 à 9 et rien d'autre à cette position. Il y en a 12 donc ?
Sur le classeur il y a plusieurs propositions de tests dont une avec lettre

oh pardon.

En langage php , sauf erreur, le # est un joker pour un caractère.
Je suis autodidacte en informatique, donc j'ai forcément des lacunes. et là, effectivement, j'ai cru que parce que la variable "a" était définie comme telle que je ne comprenais pas la raison dans ton fichier .xlm
grâce à toi, j'ai appris quelque chose.

Ce serait une bêtise de définir

TextBox_id_euro as Double
en type "Double" ou "Currency" ?
Private Sub TextBox_id_euro_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox_id_euro as Double

ou dois faire comme ça ?

Private Sub TextBox_id_euro_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox_id_euro as Like "############"

Bonjour,

Currency n'est intéressant que si ça reste dans VBA.
Une écriture sur feuille se fait toujours en double, autant s'éviter des conversions inutiles.

Pour le 3e point je ne vois pas trop le lien. "#" n'est pas un typage de variable et As "#" ne veut rien dire.
eric

Rechercher des sujets similaires à "renvoyer chiffres format nombre tableau"