Incrementation d'un numéro d'odre qui contient des lettres et des chiffres

Signaler
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
bonjour,
je sais que ce sujet a été abordé dans le forum mais j'arrive pas le trouver
mon problème c'est que je veux incrementer automatiquement un numéro d'odre qui contient des lettre et des chiffres.
exemple : F-KAM-01
F-KAM-02

merci pour votre aide.

26 réponses

Bonjour germany1970.
Incrémenter un nombre entier est tout simple, puisque cela consiste à l'augmenter d'une unité.
Par contre, dans votre cas de figure, c'est à vous de spécifier les règles d'incrémentation. Il sera temps après cela de voir comment programmer ces règles.

Cordialement.


Étant illettré, je signe d'une croix : ×
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

un split avec - comme char separator
conversion du dernier string du split en integer
et incrimente le de 1
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
bonjour,
svp un début de code pour commencer ça sera très gentil.
merci.
Bonsoir germany1970.

Avant cela, il faudrait y mettre un peu du vôtre. Par exemple, souhaitez-vous que tous les numéros d'ordre soient au format
L-LLL-CC

avec L pour lettre et C pour chiffre ?

Étant illettré, je signe d'une croix : ×
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
bonjour zermelo,
oui de cette façon alors
L-LLL (est fixe)
CC qui doi etre incrementer par rapport au dernier code dans ma table.

merci encore une fois.
Saperlipopette et cornegidouille, vous auriez pu nous dire tout de suite que les six premiers caractères sont fixes! Nous nous avez mis dans le vent ShayW et moi. Il ne reste donc à traiter qu'un nombre à deux chiffres. Je suppose que vous êtes bien conscient que cela ne permet que 100 numéros (et même seulement 99 si vous commencez à 01 au lieu de commencer à 00).
En ce qui concerne le code, je vous donne la marche à suivre, étant entendu que vous êtes censé avoir mis votre premier numéro sous forme d'un String.
1) Récupérez les deux derniers caractères du numéro, grâce à la fonction Substring de la classe String
2) Convertissez en un entier le String formé par les deux caractères, et ajoutez lui 1.
3) Convertissez en un String à deux caractères l'entier obtenu.
4) Faites la concaténation qu'il faut pour obtenir le numéro incrémenté.
5) Réfléchissez à ce que vous ferez en arrivant à 99.

Je ne vous aiderai davantage que si vous nous montrez un bout de code.

Bon courage.

Étant illettré, je signe d'une croix : ×

Bonjour,

La question est très vague finalement. Le règlement de ce forum précise bien que le demandeur doit fournir une explication claire. Et une fois de plus on s'égare dans des directions fausses...

Cette chaîne dont les deux derniers caractères doivent être incrémentés doit être récupérée de quelle façon ? Dans une liste ? Dans un tableau ? Dans un contrôle ? De quelle manière est-il incrémenté ? Par une saisie de l'utilisateur ? Lors d'un délai ? Après un événement ?

Bref, on ne sait absolument rien!

svp un début de code pour commencer ça sera très gentil.
Selon le cas, la façon de coder peut être largement différente.

Un bonjour à Zermelo
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
bonjour,
ouffff, après plusieurs tests j'ai pu trouver la solution voilà à qui en besoin, alors pour mon cas j'ai mis 2 TextBox le premier sert à afficher le dernier code de enregistrer dans ma table et le deuxième sert à incrementer mon code :

NB : le format de mon code est : L-LLL-CCC
- L(se sont des lettres fix)
- CCC(les chiffres à incrementés)


'affichage du denier code fournisseur
'******************************************
If rownum < dtt.Rows.Count - 1 Then
rownum = dtt.Rows.Count - 1
'affichage des données dans les texbox
Me.TextBox1.Text = dtt.Rows(rownum).Item("code")
End If
'-----------------INCREMENTER LE CODE FOUNISSEUR---------------------

Dim basecode As String = TextBox1.Text
Dim Originalcode As String = basecode.Substring(8, 1)
Dim numerocode As Integer = Convert.ToInt32(Originalcode)
'(augmenter le nombre)
numerocode += 1
Dim strNewNumber As String = numerocode.ToString()
strNewNumber = strNewNumber.PadRight(0, "0")
'Concaténer la nouvelle chaîne de caractères avec le reste de l'original (inv.nmbr string)
Dim NewCode As String = basecode.Substring(0, 8) & strNewNumber
TextBox2.Text = NewCode
voilà.
Félicitations.

Une remarque pour la prochaine fois. On vous demande d'utiliser "la coloration syntaxique". Cela consiste à sélectionner votre code, puis à vous placer sur la troisième icône à partir de la droite, et à cliquer dans la liste déroulante qui apparaît alors, sur le symbole du logiciel de développement que vous utilisez. Voila ce que cela donne si je traite ainsi votre code
'affichage du denier code fournisseur
'******************************************
If rownum < dtt.Rows.Count - 1 Then
rownum = dtt.Rows.Count - 1
'affichage des données dans les texbox
Me.TextBox1.Text = dtt.Rows(rownum).Item("code")
End If
'-----------------INCREMENTER LE CODE FOUNISSEUR---------------------

Dim basecode As String = TextBox1.Text
Dim Originalcode As String = basecode.Substring(8, 1)
Dim numerocode As Integer = Convert.ToInt32(Originalcode)
'(augmenter le nombre)
numerocode += 1
Dim strNewNumber As String = numerocode.ToString()
strNewNumber = strNewNumber.PadRight(0, "0")
'Concaténer la nouvelle chaîne de caractères avec le reste de l'original (inv.nmbr string)
Dim NewCode As String = basecode.Substring(0, 8) & strNewNumber
TextBox2.Text = NewCode

Avouez que c'est plus lisible.

Cordialement.

Étant illettré, je signe d'une croix : ×
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
Tiens ! Il me semble (-ai-je tort) que l'on est passé d'une fourchette possible de 0 à 99 à une nouvelle fourchette limitée à de 0 à 9 .


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Bonjour ucfoutu.
Oh non tu n'as pas tort! Mais d'une part il y a une amélioration considérable : germany1970 pleurnichais pour qu'on lui donne un code, et maintenant il en a fait un, après avoir pioché dans la classe String. D'autre part, il est censé avoir testé son code. Assez loin pour dépasser 9, et donc pour lui donner à penser. Nous verrons alors comment il réagira.
Avec mes amitiés.

Étant illettré, je signe d'une croix : ×
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

As tu testé ton code ?
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
bonjour,
voilà le nouveau code et il peut aller à l'infini mais juste un petit rectif de mon code VB :

Dim basecode As String = TextBox1.Text
        Dim Originalcode As String = basecode.Substring(0, 3)
        Dim numerocode As Integer = Convert.ToInt32(Originalcode)
        '(augmenter le nombre)
        numerocode += 1
        Dim strNewNumber As String = numerocode.ToString()
        strNewNumber = strNewNumber.PadLeft(3, "0")
        'Concaténer la nouvelle chaîne de caractères avec le reste de l'original (inv.nmbr string)
        Dim NewCode As String = strNewNumber & basecode.Substring(3)
        TextBox2.Text = NewCode 


alors le format du code fournisseur sera comme suit :

000-F-SOC


maintenant la question si je veux que le format de mon code soit de cette façon :
F-SOC-000

Infini non, dans ton code la limite est 999.
Teste quand même la valeur numérique de TextBox1.Text. Des utilisateur étourdis sont tellement fréquents ces temps-ci
Utilise Integer.TryParse (voir msdn).
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
bonjour,
oui tu as raison banana32 mon code limite l'incrémentation à 1000.

comment utiliser Integer.TryParse dans mon code?????

Et si ton utilisateur tape 1 seul, ton code plantera avec SubString (mauvaise idée donc l'emploi de substring). Allez relis donc le premier message de Zermelo que je salue de nouveau
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
l'utilisateur ne tape rien j'ai mis un boutton qui incremente mon code donc l'utilisateur n'a rien à taper il suffit de cliquer sur le boutton en plus j'ai mis mon textbox en readonly = true

Un petit exemple de TryParse :
Dim resultat As Integer
If Integer.TryParse(TextBox1.Text, resultat) Then
   MessageBox.Show(String.Format("F-SOC-{0:000}", resultat).ToString)
End If
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
voilà le code final avec une incrementation juqu'à 9999.
merci banana32.

If TextbOX1.Text = "" Then
            TextBox2.Text = "F-SOC-0001"
        Else
            Dim Ref As Integer
            Dim basecode As String = TextBox1.Text
            Dim Originalcode As String = basecode.Substring(6, 4)

            If Integer.TryParse(Originalcode, Ref) Then
           TextBox2.Text = (String.Format("F-SOC-{0:0000}", Ref + 1).ToString)
            End If
Bonsoir germany1970.
Ce que banana32 (que je salue amicalement) voulait vous faire comprendre, c'est qu'il faut tester les données d'entrée, celles que vous avez mises dans un TextBox, et je me demande bien pourquoi.
Comme vous avez fait un bel effort, je vais vous donner un code testé.
Public Class Accueil

    Private Txt As String

    Private Sub bTst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bTst.Click
        Dim TxtI As String, Ok As Boolean, Msg As String
        Txt "999-F-SOC" : TxtI Incrémenté(Txt, Ok)
        If Ok Then Msg TxtI Else Msg "Erreur"
        MessageBox.Show(Msg)
    End Sub

    Private Function Incrémenté(ByVal Txt As String, ByRef Ok As Boolean) As String
        Dim TxtL As String "", TxtC As String "", x As Integer
        Ok (Txt.Length 9)
        If Ok Then TxtL Txt.Substring(3) : TxtC Txt.Substring(0, 3)
        If Ok Then Ok = Integer.TryParse(TxtC, x)
        If Ok Then Ok = x < 999
        If Ok Then x +1 : TxtC x.ToString.PadLeft(3, CChar("0"))
        Return TxtC & TxtL
    End Function

End Class

pour le code fournisseur 000-F-SOC. Comme je n'aime pas les notations longues d'ici jusqu'à Pontoise, je les ai raccourcies
Txt : code fournisseur
TxtL : partie littérale du code fournisseur
TxtC : partie numérique du code fournisseur

D'autre part vous aurez compris que bTst est un bouton de commande.

Cordialement.

Étant illettré, je signe d'une croix : ×