J'ai commencé mon premier code et je bute sur deux choses.
La première est la création d'un "ID" alphanumérique suivant les trois premiers caractères d'une valeur lors d'une entrée d'un UserForm
exemple:
si mon entrée en "Domaine" est "ASSAINISSEMENT" alors mon "ID" sera ASS001 et ainsi de suite.
Pour l'instant ce n'est que du numérique.
Ensuite
Si je rentre des valeurs dans les champs "Domaine" et "Type Document" qui n'existent pas dans les données de la feuilles "DATA", je souhaite qu'excel les rajoute automatiquement dans les colonnes correspondantes.
si je suis pas trop clair, signaler le moi et je ferais des efforts ... lol (en tout cas c'est clair dans ma tete c'est le pricipal ... rire)
Je vous laisse ma feuille ca sera sans doute plus facile a comprendre....
Je suis preneur de toutes remarques concernant mon premier code, bonnes ou mauvaise.
Private Sub Domaine_Change()
Dim Data1 As String, Cellule1 As Range, Nbt As Integer, Nb As Integer, B1 As Byte
With Sheets("LISTING")
If Len(Domaine.Value) > 4 Then
Data1 = Left(Domaine.Value, 3)
For Each Cellule1 In .Range("A2:A" & .Range("a" & .Rows.Count).End(xlUp).Row)
If Left(Cellule1, 3) = Data1 Then
Nb = Val(Right(Cellule1, 3))
If Nb > Nbt Then Nbt = Nb
End If
Next Cellule1
If Nbt < 10 Then
B1 = 2
ElseIf Nbt < 100 Then
B1 = 1
End If
TextBox1 = Data1 & String(B1, "0") & (Nbt + 1)
End If
End With
End Sub
Private Sub Domaine_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Dl1 As Long
If Domaine.ListIndex = -1 Then
If Len(Domaine.Value) < 3 Then
Call MsgBox("Le domaine doit comporter au minimum 3 lettres", vbInformation, Application.Name)
Domaine = ""
Cancel = True
Exit Sub
End If
With Sheets("DATA")
Dl1 = .Range("A" & .Rows.Count).End(xlUp).Row + 1
.Range("a" & Dl1) = Domaine.Value
End With
End If
End Sub
@gilbert_RGI:
le code fonctionne pour la première ligne mais ensuite j'ai une erreur que j'arrive pas à cerner.
L'incrémentation se fait correctement, par contre si je rajoute un "Domaine" dans la combobox de l'UserForm celui ci se rajouter pas à la liste déjà existante de la feuille "DATA"
@jp14:
Le code fonctionne pour le rajout d'une valeur dans la combobox "Domaine" mais l'incrémentation ne se fait pas comme je le souhaiterais, il faudrait que celle ci se fasse suivant la combobox "Domaine" c'est à dire ASS001, ASS002, ... ASS150, pour "ASSAINISSEMENT" et TERR001, TERR002, ...TERR150 pour "TERRASSEMENT" et ainsi de suite pour chaque domaine. Avec le code l'incrémentation se fait de 1 en 1 quelque soit le "Domaine"
Quelle ligne je devrais supprimer pour avoir la même philosophie de rajout dans la liste pour la combobox "TypeDocument" sans avoir la restriction du nombre de caractère, et sans d’incrémentation?
@ Modeste geedee:
Je viens de voir ta réponse, je teste et je re.
Il n'y auras pas de suppression, je serais tranquille avec les doublons... (pour une fois ..rire)
Je vous mets les fichiers suivant vos réponses respectives.
Si vous avez besoin de plus de précision ...
C'est vrai que c'est claire dans ma tête ... mais l'explication...
Ci joint le fichier avec des modifications :
Ajout d'une colonne pour tenir compte du nombre de carractères pour la numérotation.
Ajout d'une valeur dans "Domaine" en majuscule
@ jp14:
Il y a un petit soucis sur ton code. Si j’efface toute les données du tableau et que je recommence la saisie de données, je me retrouve avec, des cellules vide.
Je suis entrain de préparé un nouveau message et fichier dans le même fil de discutions avec des explications plus précises et plus explicites.
Mes explications de départ ne doivent pas être très compréhensives, et pourtant dans ma tête çà l'est ... lol
Re : Incrémenation ID suivant combobox et mise à jour de ses données en automatique
Re bonjour,
Ce que je cherche:
- une incrémentation suivant la valeur de la colonne "Domaine" du style ASS001, ASS002, ASS003, ... ASSn Merci à "Modeste geedee"
Oups ... Par contre je viens de m’apercevoir que la valeur "Domaine" pouvait avoir deux noms (ex: SIGNALISATION LUMINEUSE) , ce qui faudrait c'est de prendre les deux premiers caractères du premier nom et le premier caractère du deuxième nom, et de prendre les trois premiers caractères si le "Domaine" à un seul non -----> ex: SIL001
- Trier les données suivant leur ID.
- Si nouvelle valueur de "Domaine" qui n'existe pas dans la combobox du formulaire "Saisie de document", les intégrer dans les données de la combobox et les "Trier ,de A à Z"
- Si nouvelle valueur de "TypeDocument" qui n'existe pas dans la combobox du formulaire "Saisie de document", les intégrer dans les données de la combobox et les "Trier ,de A à Z"
- Je voudrais faire une boucle dans ma validation de saisie en effacant les données saisies, précédemnent afin d'enchainer la saisie.
Pour l'instant j'ai mis ce code mais je pense qu'il y a plus simple enfin plus "règle de l'art"
Code:
Unload Me
UserForm1.Show
Dans un deuxième temps:
- Remplacer les "Textes à afficher" des liens hypertexte des colonnes "Local" et "Cloud" par "Visualiser" et "Télécharger" afin de visualiser et/ou télécharger un document en direct
- Est-il possible de stocker que l'identifiant d'un compte "google" quand on souhaite "Télécharger" un document?
Je vous mets mon code en totalité et la feuille qui va bien
Code:
Private Sub Annuler_Click() 'Sortie du formulaire sans effacement des données déjà remplies
UserForm1.Hide
End Sub
Private Sub Quitter_Click() 'Sortie du formulaire avec effacement des données déjà remplies
Unload UserForm1
End Sub
Private Sub UserForm_Initialize() 'Ouverture du formulaire de Saisie de document
Dim i As Integer
i = 2
Do While Worksheets("DATA").Cells(i, 1) <> ""
'Récupération des données pour combobox Domaine
Domaine.AddItem Worksheets("DATA").Cells(i, 1)
'Récupération des données pour combobox TypeDocument
TypeDocument.AddItem Worksheets("DATA").Cells(i, 3)
i = i + 1
Loop
End Sub
Private Sub Validation_Click()
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 1).Offset(1, 1).Select
i = i + 1
Loop
ActiveCell.Value = UserForm1.Domaine.Value
ActiveCell.Offset(0, 1).Value = UserForm1.TitreDocument.Value
ActiveCell.Offset(0, 2).Value = UserForm1.TypeDocument.Value
ActiveCell.Offset(0, 3).Value = UserForm1.Editeur.Value
ActiveCell.Offset(0, 4).Value = UserForm1.Parution.Value
ActiveCell.Offset(0, 5).Value = UserForm1.DownLocal.Value
ActiveCell.Offset(0, 6).Value = UserForm1.DownCloud.Value
ActiveCell.Offset(0, 7).Value = UserForm1.Observations
' Incrémentation forme XXX001 Merci à Modeste geedee
ActiveCell.Offset(0, -1).Value = Left(ActiveCell, 3) & Format(Application.CountIf(Range("b:b"), ActiveCell), "000")
Unload Me
UserForm1.Show
End Sub
Merci d'avance pour vos réponses et du temps passé.