Code VBA

Bonsoir je souhaiterai mettre ceci sous un code fonctionnel

en gros :

si la CmbB_Groupe_Nom <> "Privé" alors on affiche dans TxtB_Numero40 "C/"sinon on affiche "P/" (X/)

on extrait la 1 ère lettre à Gauche de la CmbB_Groupe_Nom dans TxtB_Numero40 et "-" (X-)

compteur 5 chiffres 00001 selon la catégorie

exemple CmbB_Groupe_Nom = Particulier et c'est le 5ème particulier dans la colonne BF

résultat escompté : C/P-00005 s'affiche dans la TxtB_Numero40

' affiche le n° dans l'UserForm1 dans ma colonne BF qui est ma TxtB_Numero40
    xdlgn = Ws.Range("BF65536").End(xlUp).Row        ' Permet de se positionner sur la dernière ligne de tableau
    Dim C1, C2
    xdlgn = 1
    'Compteur par catégorie sous forme "X/X-#####"
      If Userform1.CmbB_Groupe_Nom <> "Privé" Then C1 = "C/" Else C1 = "P/"
      If Userform1.CmbB_Groupe_Nom <> "Privé" Then C2 = Left(CmbB_Groupe_Nom, 1) Else C2 = "P/"
      Userform1.TxtB_Numero40 = C1 & C2 + xdlgn + 1

Cordialement

Bonjour Le Trolldu27 et bonjour à tous,

Tu ne nous dis pas ce qui bloque. Je pense que tu as oublié le ".Text". Il faudrait écrire ceci non ?

' affiche le n° dans l'UserForm1 dans ma colonne BF qui est ma TxtB_Numero40
   xdlgn = Ws.Range("BF65536").End(xlUp).Row        ' Permet de se positionner sur la dernière ligne de tableau
   Dim C1, C2
    xdlgn = 1
    'Compteur par catégorie sous forme "X/X-#####"
     If Userform1.CmbB_Groupe_Nom.Text <> "Privé" Then C1 = "C/" Else C1 = "P/"
      If Userform1.CmbB_Groupe_Nom.Text <> "Privé" Then C2 = Left(Userform1.CmbB_Groupe_Nom.Text, 1) Else C2 = "P/"
      Userform1.TxtB_Numero.Text = C1 & C2 & Cstr(xdlgn+ 1)

Bonne journée,

Joe.

Bonsoir

je viens de lire post et j'avais bien oublié .Text

J'ai essayé ceci qui fonctionne mais" xdlgn" est la ligne

'**** Correspond au programme de la TextBox "Code Client" ****
Private Sub TxtB_Numero39_Enter()      ' ..........................................................Code Client
    Dim C1, C2, C3, C4
    Set Wsq = Sheets("Clients")
    ' affiche le n° dans l'UserForm1 dans ma colonne BF qui est ma TxtB_Numero39
    xdlgn = Wsq.Range("BF65536").End(xlUp).Row        ' ...........................................Permet de se positionner sur la dernière ligne de tableau
    ' Compteur sous forme "X/X-#####" ??????
    If Userform1.CmbB_Groupe_Nom.Value <> "Privé" Then C1 = "C/" Else C1 = "P/"
    If Userform1.CmbB_Groupe_Nom.Value <> "Privé" Then C2 = Left(CmbB_Groupe_Nom, 1) & "-" Else C2 = "A-"
    C3 = C1 & C2 & (xdlgn + 1)
    C4 = C3

    TxtB_Numero39.Text = C4
    TxtB_Numero39.Text = UCase(TxtB_Numero39)

End Sub

mais j'aurai préféré un compteur catégoriel comme si C/C-00005 en BF12 et P/A-00002 en BF13

alors il trouverai avec laCmbB_Groupe_Nom : (C)lients en BF14 C/C-00006 et non C/C-14

Cordialement

18classeur1.xlsm (132.35 Ko)

Je viens d'éditer le Post3 en y incorporant un fichier

Bonjour Le_Troll_Du_27

Si j'ai bien compris

Private Sub TxtB_Numero39_Enter()      ' ..........................................................Code Client
    Dim C1, C2, C3, C4
    Dim Ind As Integer
    Set Wsq = Sheets("Clients")
    ' affiche le n° dans l'UserForm1 dans ma colonne BF qui est ma TxtB_Numero39
    ' xdlgn = Wsq.Range("BF65536").End(xlUp).Row        ' ...........................................Permet de se positionner sur la dernière ligne de tableau
    ' Compteur sous forme "X/X-#####" ??????
    If UserForm1.CmbB_Groupe_Nom.Value <> "Privé" Then C1 = "C/" Else C1 = "P/"
    If UserForm1.CmbB_Groupe_Nom.Value <> "Privé" Then C2 = Left(CmbB_Groupe_Nom, 1) & "-" Else C2 = "A-"
    ' Compter le nombre de ligne de la catégorie
    ' Utilise la fonction NB.SI()
    Ind = Application.WorksheetFunction.CountIf(Wsq.Range("BF:BF"), C1 & C2 & "*")
    ' Créer le nouveau code
    C3 = C1 & C2 & Format(Ind + 1, "00000")
    C4 = C3

    TxtB_Numero39.Text = C4
    TxtB_Numero39.Text = UCase(TxtB_Numero39)

End Sub

En revanche mettre le code dans l’événement Enter du Textbox ne me parait pas judicieux

A+

Bonsoir,

Merci BrunoM45, dsl de répondre que maintenant.

Je viens de rentrer et viens d'essayer le code

Private Sub TxtB_Numero39_Enter()      ' ..........................................................Code Client
    Dim C1, C2, C3, C4
    Dim Ind As Integer
    Set Wsq = Sheets("Clients")
    ' Compteur sous forme "X/X-#####" 
    If UserForm1.CmbB_Groupe_Nom.Value <> "Privé" Then C1 = "C/" Else C1 = "P/"
    If UserForm1.CmbB_Groupe_Nom.Value <> "Privé" Then C2 = Left(CmbB_Groupe_Nom, 1) & "-" Else C2 = "A-"
    ' Compter le nombre de ligne de la catégorie
    ' Utilise la fonction NB.SI()
    Ind = Application.WorksheetFunction.CountIf(Wsq.Range("BF:BF"), C1 & C2 & "*")
    ' Créer le nouveau code
    C3 = C1 & C2 & Format(Ind + 1, "00000")
    C4 = C3

    TxtB_Numero39.Text = C4
    TxtB_Numero39.Text = UCase(TxtB_Numero39)

End Sub

Ca fonctionne pas tout à fait comme je le souhaiterai.

Quand Fournisseur est sélectionné il doit recherche le dernier Fournisseur enregistré

Quand Clients est sélectionné il doit recherche le dernier Clients enregistré

Etc.. Car la liste de données est non fixe et modifiable

Clients; Fournisseurs; Particulier; Privé; Santé et etc... si ajout

BrunoM45 a écrit :

En revanche mettre le code dans l’événement Enter du Textbox ne me parait pas judicieux

Je l'ai placé là en attendant d'écrire le code. Je le joindrai je pense dans

Private Sub UserForm_Initialize

je pense et si je n'y arrive pas dans

Private Sub CmbB_Groupe_Nom_AfterUpdate()

Après c'est juste une mise en forme.

Cordialement

Re,

C'est bien ce que je disais

mettre le code dans l’événement Enter du Textbox ne me parait pas judicieux

Si tu sélectionnes "Fournisseur" et que tu retournes dans le textbox évènement Enter, le calcul se fait = C/F -00006

Si tu sélectionnes "Client" et que tu retournes dans le textbox évènement Enter, le calcul se fait = C/C-00006

Etc...

Re,

OK je comprends que la cause de mon soucis vient de Textbox_Enter

Je vais le déplacer et voir ce que cela donne

Merci

Re,

Il faut utiliser l'événement "Afterupdate" de la Combobox de choix

A+

Re,

Merci BrunoM45

Parfait dans CmbB_Groupe_Nom_AfterUpdate le code fonctionne correctement

Merci

Cordialement

Rechercher des sujets similaires à "code vba"