Identifiant unique

Bonjour,

J'essaie de créer un identifiant unique dans la colonne A qui pourra prendre deux formes.

Premiere forme en cliquant sur un bouton, m'incremente un nouveau ID par rapport au dernier ID

AA00001-1
AA00002-1
AA00003-1
AA00004-1
AA00005-1
AA00006-1
AA00007-1
AA00008-1
AA00009-1
AA00010-1
AA00011-1
etc.

Deuxième forme en cliquant sur autre bouton, m'incremente un-ID connu mais avec un nouveau mode, le dernier chiffre qui change

AA00001-1
AA00001-2
AA00001-3
AA00001-4

AA00002-1
AA00002-2
AA00003-1
AA00003-1
etc.

pouvez-vous m'aider ?

a+

Je suis à peu près certain que vous ne nous avez proposé qu'une partie du problème. L'histoire nous le dira

Donc proposition 1. Pour la forme n° 2, il faut entrer manuellement la racine dans la cellule B1.

13id-unique.xlsm (22.87 Ko)

Bonjour

Proposition a tester

Cordialement

FINDRH

22testinr.xlsm (18.10 Ko)

bonjour Optimix, benji77,

si vous êtes sur la dernière cellule de la colonne A et vous clicquez soit double soit droite avec le souris, la cellulle suivante sera +1 pour une des 2 manières.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     With Range("A" & Rows.Count).End(xlUp)
          If Target.Address = .Address Then
               .Offset(1).Value = Left(.Value, 2) & Format(Mid(.Value, 3, 5) + 1, "00000") & "-1"
               Cancel = True
          End If
     End With
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
     With Range("A" & Rows.Count).End(xlUp)
          If Target.Address = .Address Then
               .Offset(1).Value = Left(.Value, 8) & Split(.Value, "-")(1) + 1
               Cancel = True
          End If
     End With
End Sub
13id-unique.xlsm (21.86 Ko)

Bonjour a tous,

Tout d'abord merci pour l'ensemble de vos solutions.

j'ai applique la solution a FINDRH qui propose ce je souhaite.

De la a pourvoir adapter sa solution, la est un autre problème.

C'est pourquoi je préfère vous laisser mon formulaire afin que vous le compreniez, compreniez ma demande.

Je dois aussi mettre a jour l'ensemble des champs rentres des combobox2 a 226 et textbox26 a 30 en appuyant sur l'un des 2 boutons insertion (bouton 5 ou 14)

Si vous pouviez me guider afin de l'adapter a mon probleme ...

a+

Bonjour

J'ai vu ton pb qui n'est pas simple a priori, d'autant plus que ton classeur me plante systématiqement mes macros sur mes fichiers source ....

Elles existent toujours, fonctionnent mais sont verrouillées invisibles... une nouveauté !!!

J'ai réparé excel 3 fois....

Désolé je rends mon tablier sur ce sujet

Cordialement

FINDRH

bonsoir FINDRH,

Désolé que mon formulaire vous ait causé des problèmes

En tout cas merci pour cette solution que je retiens.

Bien à vous

Cdlt

A+

re,

en module1, les 2 macros possibles, dans votre UF, macro "CommandButton5_Click", je ne sais pas comment cela doit fonctionner, mais un essai.

Bonjour BsAlv,

Merci pour cette solution pour le bouton 5.

TEST effectué:

Je dois d'abord créer ma nouvelle ligne avec ce bouton; sélectionner la ligne avec son nouvel identifiant, y rentrer les valeurs que je souhaite dans chaque champs puis appuyer sur le bouton modification pour valider la ligne et ses valeurs avec le nouvel identifiant crée, c'est excellent, ca marche !

Interrogation:

Apres la question que je me pose, c'est de diminuer d'un clic, en insérant la nouvelle ligne avec l'identifiant et ses valeurs sans passer par le bouton modification. Vous pensez que cela est possible? c'est ce que je souhaite mettre en place.

Bouton 14:

Concernant le bouton 14, c'est un peut different. Je souhaite sélectionner une ligne avec son identifiant et ses valeurs déjà presents dans la ListBox20 afin de créer un nouveau mode de fonctionnement d'un meme système. la ligne sélectionnée aura pour identifiant par exemple AA00033-1 ou AA00152-4 et pouvoir créer un nouveau identifiant ayant le numéro AA00033-2 ou AA00152-5 en prenant en compte que c'est le dernier chiffre qui s'incremente de +1 par rapport a la ligne sélectionnée. En effet, c'est plus délicat a mettre en place.

A+

bonjour Benji77,

voici votre bouton14, je ne suis pas sûr que cela fonctionne 100% comme vous le voulez.

Bonjour Bs Alv,

Desole pour ma reponse tardive.

Un seul mot: "Excellent"

A+

Bonjour BsAlv,

J'ai 4 variables non définies, a mettre dans l'option explicit pour le bouton14.

Option Explicit
Dim TblBD()
Dim dchoisis1, dchoisis2, dchoisis3, dchoisis4, dchoisis5, dchoisis6, dchoisis7, dchoisis8, dchoisis9, dchoisis10, dchoisis11, dchoisis12, dchoisis13, dchoisis14, dchoisis15, dchoisis16
Dim nomtableau As String
Dim nbcol As Byte
Dim i As Byte

variable r:

r = Application.Match(.Text, LO.ListColumns("ELECTRONIC NAME").DataBodyRange, 0) 

variable s:

 s = Left(.Value, 8) & Split(.Value, "-")(1) + 1 

variable r1:

r1 = Application.Match(s, LO.ListColumns("ELECTRONIC NAME").DataBodyRange, 0)

variable c:

c = LO.ListRows.Add(r + 1).Range

Avec correctif dans mon option explicit:

Option Explicit
Dim TblBD()
Dim dchoisis1, dchoisis2, dchoisis3, dchoisis4, dchoisis5, dchoisis6, dchoisis7, dchoisis8, dchoisis9, dchoisis10, dchoisis11, dchoisis12, dchoisis13, dchoisis14, dchoisis15, dchoisis16
Dim nomtableau As String
Dim nbcol As Byte
Dim i As Byte
Dim s, r, r1, c

Le bouton 14 fonctionne.

Re,

Pour le bouton 5, j'ai un bug avec:

s = Left(.Value, 2) & Format(Mid(.Value, 3, 5) + 1, "00000") & "-1"

Private Sub CommandButton5_Click()

     With Sheets("DATABASE_VUSHF").Range("Tableau1").ListObject
          If .ListRows.Count > 0 Then
               With .DataBodyRange.Cells(.ListRows.Count, 1)
                    s = Left(.Value, 2) & Format(Mid(.Value, 3, 5) + 1, "00000") & "-1"
               End With
               With .ListRows.Add.Range
                    .Range("A1").Value = s   'nouvelle numéro en A1
                    .Range("AA1").Resize(, 5).Value = Array(TextBox26.Value, TextBox27.Value, TextBox28.Value, TextBox29.Value, TextBox30.Value)     'ces 5 textboxes en AA:AE
               End With
          Else
               MsgBox "problème, c'est la premiere ligne"
          End If
     End With
UserForm_Initialize
Call reset_all_controls
End Sub

Peut etre faut il que je vous renvoie le fichier excel ? ou alors integrer l'option explicit tout en haut des codes afin de constater le bug.

@+

re,

je suppose que l'identificiant de la dernière ligne du tableau est vide ou n'a pas le bon format, par exemple la partie du charactère 3 à 7 n'est pas numérique ou encore une autre chose

    With .DataBodyRange.Cells(.ListRows.Count, 1)
           If .Value = "" Then
               MsgBox "identifiant de la dernière ligne est vide !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          ElseIf Not Mid(.Value, 3, 5) Like "#####" Then
               MsgBox "identifiant de la dernière ligne n'a pas le bon format !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          Else
               s = Left(.Value, 2) & Format(Mid(.Value, 3, 5) + 1, "00000") & "-1"
          End If
     End With

Pour le 14, s est string (ici aussi), r et r1 sont Variant et c est Range, mais je préfère comme vous l'avez fait maintenant avec "Dim s, r, r1, c"

Sur l'Excel que je vous avais envoyé, cela fonctionnait très bien!

Mais comme j'ai mis l'option explicit, cela ne fonctionne plus.

J'ai essaye avec votre nouveau code, mais bug aussi.

Private Sub CommandButton5_Click()

    With .DataBodyRange.Cells(.ListRows.Count, 1)
           If .Value = "" Then
               MsgBox "identifiant de la dernière ligne est vide !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          ElseIf Not Mid(.Value, 3, 5) Like "#####" Then
               MsgBox "identifiant de la dernière ligne n'a pas le bon format !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          Else
               s = Left(.Value, 2) & Format(Mid(.Value, 3, 5) + 1, "00000") & "-1"
          End If
     End With
UserForm_Initialize
Call reset_all_controls
End Sub

With .DataBodyRange.Cells(.ListRows.Count, 1)

Compile error: invalid or unqualified reference.

a+

re, la macro a besoin un tableau structuré, vous avez oublié les premières lignes

Private Sub CommandButton5_Click()
dim s
     With Sheets("DATABASE_VUSHF").Range("Tableau1").ListObject
          If .ListRows.Count > 0 Then
et le reste ....
+ End if + End With
Private Sub CommandButton5_Click()
Dim s
     With Sheets("DATABASE_VUSHF").Range("Tableau1").ListObject
          If .ListRows.Count > 0 Then
                   With .DataBodyRange.Cells(.ListRows.Count, 1)
           If .Value = "" Then
               MsgBox "identifiant de la dernière ligne est vide !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          ElseIf Not Mid(.Value, 3, 5) Like "#####" Then
               MsgBox "identifiant de la dernière ligne n'a pas le bon format !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          Else
               s = Left(.Value, 2) & Format(Mid(.Value, 3, 5) + 1, "00000") & "-1"
          End If
     End With
UserForm_Initialize
Call reset_all_controls
End Sub

Problème avec End sub

compil error: block if without End If

a+

re,

je l'avais dit dans mon dernier poste, au bout il faut encore un endif et un end with

Private Sub CommandButton5_Click()
     Dim s
     With Sheets("DATABASE_VUSHF").Range("Tableau1").ListObject
          If .ListRows.Count > 0 Then
               With .DataBodyRange.Cells(.ListRows.Count, 1)
                    If .value = "" Then
                         MsgBox "identifiant de la dernière ligne est vide !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
                    ElseIf Not Mid(.value, 3, 5) Like "#####" Then
                         MsgBox "identifiant de la dernière ligne n'a pas le bon format !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
                    Else
                         s = Left(.value, 2) & Format(Mid(.value, 3, 5) + 1, "00000") & "-1"
                    End If
               End With
          End If    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     End With       '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

     UserForm_Initialize
     Call reset_all_controls
End Sub

j'ai fait les correctifs

Private Sub CommandButton5_Click()
Dim s
     With Sheets("DATABASE_VUSHF").Range("Tableau1").ListObject
          If .ListRows.Count > 0 Then
                   With .DataBodyRange.Cells(.ListRows.Count, 1)
           If .Value = "" Then
               MsgBox "identifiant de la dernière ligne est vide !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          ElseIf Not Mid(.Value, 3, 5) Like "#####" Then
               MsgBox "identifiant de la dernière ligne n'a pas le bon format !!!" & vbLf & "On abandonne la procédure", vbCritical: Exit Sub
          Else
               s = Left(.Value, 2) & Format(Mid(.Value, 3, 5) + 1, "00000") & "-1"
          End If
     End With
UserForm_Initialize
Call reset_all_controls
End If
End With
End Sub

alors plus de bug.

Mais je ne peux pas incrémenter une nouvelle ligne car il me met identifiant de la dernière ligne est vide ... .

a+

Rechercher des sujets similaires à "identifiant unique"