Créer un numéro logique en fonction des données présentes dans d'autres colonnes

  • Initiateur de la discussion Initiateur de la discussion ivan27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ivan27

XLDnaute Occasionnel
Bonsoir à tous,

Je cherche a créer un numéro logique en VBA, en fonction des données présentes dans certaines colonnes.
Je n'ai pas trouvé de solution sur le forum.
Merci d'avance pour votre aide.
En pièce jointe, les explications détaillées.
Bien cordialement,

Ivan
 

Pièces jointes

Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Bonjour,
Par formule si tu veux :
Code:
=MAJUSCULE(GAUCHE(A2)&TEXTE(B2;"aaaammjj")&GAUCHE(C2;5)&REPT("*";MAX(0;5-NBCAR(C2)))&NB.SI(C$2:C2;GAUCHE(C2;5)&"*"))
Pour la date, il vaut mieux de mettre sous forme de aaaammjj à la place de jjmmaaaa pour problème de tri.


@ + +
 
Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Bonjour Ivan, R@chid

@ R@chid : Toujours le grand spécialiste des formules

Ivan voici pour le code VBA

Code:
Sub Code()
'- La première lettre représente le  genre (M = Masculin / F = Féminin) --- Colonne A
'- Les chiffres suivants représentent la date de naissance (exemple : 02/05/2005 = 02052005) ---Colonne B
'- Ensuite, il s'agit des  5 premières lettres du nom ---Colonne C
'(si le nom est inférieur à 5 lettres, on complète avec des " * ")
'- Le numéro se termine ensuite par "01".
'(Si "01" est déjà existant, alors on remplace par "02", "03", etc...)

Dim Logique As String, ligne As Long, Total As String
Dim Dico As Object, Num As Long, Ok As Boolean
Set Dico = CreateObject("Scripting.dictionary")
Dico.comparemode = vbTextCompare
For ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
Logique = Left(Range("A" & ligne), 1) & Replace(Range("B" & ligne), "/", "") & Left(Range("C" & ligne) & "*****", 5)
Num = 1
Ok = False
Do
Total = Logique & Right("0" & Num, 2)
If Not Dico.exists(Total) Then
  Dico.Add Total, Total
  Ok = True
 Else
  Num = Num + 1
End If
Range("E" & ligne) = Total
Loop Until Ok

Next
End Sub
 
Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Bonsour®
Bonjour,
Par formule si tu veux :
Code:
=MAJUSCULE(GAUCHE(A2)&TEXTE(B2;"aaaammjj")&GAUCHE(C2;5)&REPT("*";MAX(0;5-NBCAR(C2)))&NB.SI(C$2:C2;GAUCHE(C2;5)&"*"))
Pour la date, il vaut mieux de mettre sous forme de aaaammjj à la place de jjmmaaaa pour problème de tri.

🙄
on peut réduire la formule :
=MAJUSCULE(GAUCHE(A2)&TEXTE(B2;"aaaammjj")&GAUCHE(C2&"*****";5)&NB.SI(C$2:C2;GAUCHE(C2;5)&"*"))
🙄
on peut même réduire le résultat en codant la date en hexadecimal (validité 2077)
=MAJUSCULE(GAUCHE(A2)&DECHEC(B2;4)&GAUCHE(C2&"*****";5)&NB.SI(C$2:C2;GAUCHE(C2;5)&"*"))

😱
sans coder la date , juste en la laissant au format interne (N°serie)
=MAJUSCULE(GAUCHE(A2)&TEXTE(B2;"00000")&GAUCHE(C2&"*****";5)&NB.SI(C$2:C2;GAUCHE(C2;5)&"*"))
 
Dernière édition:
Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Re,
Salut CaMarchePas, Salut GD,
J'ai bien aimé le fait de coder la date de cette façon espérant que le demandeur l'aime bien aussi.

CaMarchePas :
Si tu peux mettre la date sous forme de aaaammjj pour le tri et aussi le numéro à la fin 000, j'ai pensé aussi mettre comme suit :
TEXTE(NB.SI(C$2:C2;GAUCHE(C2;5)&"*");"000")


@ + +
 
Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Re , Bonjour Modeste

R@chid , modifiée juste pour te faire plaisir .....

Code:
Sub Code()
Dim Logique As String, ligne As Long, Total As String
Dim Dico As Object, Num As Long, Ok As Boolean
Dim Dt As String

Set Dico = CreateObject("Scripting.dictionary")
Dico.comparemode = vbTextCompare

For ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
  Dt = Range("B" & ligne)
  Logique = Left(Range("A" & ligne), 1) & Year(Dt) & Right("0" & Month(Dt), 2) & Right("0" & Day(Dt), 2) & Left(Range("C" & ligne) & "*****", 5)
  Num = 1
  Ok = False

  Do
    Total = Logique & Right("0" & Num, 2)

    If Not Dico.exists(Total) Then
       Dico.Add Total, Total
       Ok = True
     Else
      Num = Num + 1
    End If

    Range("E" & ligne) = Total
  Loop Until Ok

Next
End Sub
 
Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Bonsoir Rachid, MG, camarchepas, Le Forum,
Merci à vous pour vos propositions.
J'ai testé vos solutions par formules et celle qui correspondrait précisément à ma demande est celle-ci :

=MAJUSCULE(GAUCHE(A2)&TEXTE(B2;"jjmmaaaa")&GAUCHE(C2;5)&REPT("*";MAX(0;5-NBCAR(C2)))&TEXTE(NB.SI(C$2:C2;GAUCHE(C2;5)&"*");"00"))

camarchepas, je testerai ta proposition demain sur PC. Ce soir j'ai uniquement un MAC sous la main et les dictionnaires sous Excel 2011 MAC ne sont pas acceptés...

Bonne soirée à vous.

Ivan
 
Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Ivan ,

Version sans dico


Code:
Sub Code2()
Dim Logique As String, ligne As Long, Total As String
Dim Trouve As Range, Num As Long, Ok As Boolean
Dim Dt As String

For ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
  Dt = Range("B" & ligne)
  Logique = Left(Range("A" & ligne), 1) & Year(Dt) & Right("0" & Month(Dt), 2) & Right("0" & Day(Dt), 2) & Left(Range("C" & ligne) & "*****", 5)
  Num = 1
  Ok = False
  Do
    Total = Logique & Right("0" & Num, 2)
    Set Trouve = Range("E1:E" & ligne).Find(Total, lookat:=xlWhole)
    If Trouve Is Nothing Then
       Ok = True
     Else
      Num = Num + 1
    End If
    Range("E" & ligne) = Total
  Loop Until Ok
Next
 
Re : Créer un numéro logique en fonction des données présentes dans d'autres colonnes

Re,
je te conseille de faire en VBA c'est plus approprié dans ton cas, car avec les formules tu risques de changer les codes pour avec l'ajout des nouvelles entrées et tri..


@ + +
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour