XL 2016 Incrémentation Clé unique en VBA

Ballestrero Maxime

XLDnaute Nouveau
Bonjour,

Je suis très novice en programmation VBA et je souhaiterais trouver une solution.

Voici mon problème:

Dans mon tableau excel, est-il possible de créer une clé unique qui prendrait le nom et le prénom de la personne avec le mois ainsi que le nombre d’occurrence dans le mois en VBA, une fois que le mois est passé, je souhaiterais qu'il revienne à 1.

Ex: j'ai 2 dates en janvier, cela donnerait DUPONT Bernard_1_1 et DUPONT Bernard_1_2, quand il passe sur le mois de février, passer à DUPONT Bernard_2_1.

Le tableau est déjà crée, donc je souhaiterais qu'il cherche les informations déjà données en dessous pour incrémenter au fur et à mesure l'élément et que cela se cherche automatiquement.

Dans cet exemple, j'ai crée une formule en colonne A avec de la concaténation. (Je ne sais pas si cela pourra être utile)

Merci pour votre retour
 

Pièces jointes

  • Classeur1.xlsx
    13.5 KB · Affichages: 15

GALOUGALOU

XLDnaute Accro
bonsoir ballestrero maxime bonsoir le forum
je ne suis pas sur d'avoir tout bien compris

Dans l'espoir d'entrouvir une porte à une solution, je vous propose d'essayer cette formule. (identique à la votre mais avec comme référence la colonne B.)

Enrichi (BBcode):
=CONCATENER(B2;"_";MOIS(E2);"_")&SI(NB.SI($B$2:B2;B2)=0;"";NB.SI($B$2:B2;B2))
cordialement
galougalou
 

Ballestrero Maxime

XLDnaute Nouveau
Bonsoir Galougalou,

Merci pour votre réponse, en soi les deux formules fonctionnent, mais le but est que cette formule disparaisse de ma colonne A et soit remplacée par la formule automatique en VBA. De plus, après avoir créé cette formule en Vba, il ne va pas chercher les informations précédentes, à savoir si cette clé unique existe déjà, pour incrémenter chaque clé.

Je ne peux pas mettre le fichier complet avec les noms que j’ai déjà car confidentiel, mais je vais essayer de recréer la même macro que j’ai sur celui-ci.

J’essai de mettre le fichier en place rapidement.

merci beaucoup pour l’intérêt que vous avez porté à mon post.
 

Ballestrero Maxime

XLDnaute Nouveau
Bonjour mapomme ,

Merci beaucoup pour votre retour.

La formule que vous avez indiqué semble plus « propre » que celle que j’ai créé, effectivement du fait qu’elle prenne selon l’ordre chronologique semble assez intéressante. Mais cette formule, je souhaiterais la transposer en VBA car sur mon fichier exact (celui ci n’est qu’un exemple) il y a une macro dessus. Je n’ai pas encore fait les tests avec votre formule (j’essaierai dans la journée). Avec la première formule, dès que la ligne A2 se créé, la macro ne voit pas les éléments en dessous et s’incrémente toujours à 1 et ne va pas voir ce qui est déjà existant.

merci également à vous de répondre à mon post .
 

patricktoulon

XLDnaute Barbatruc
Bonjour le fils
si tu tiens absolument a avoir du vba et donc les valeurs en A et non les formules je te propose de reprendre ce que t'a donné @mapomme en vba
tout simplement en évaluant la formule

par exemple on pourrait faire ça dans une toute petite fonction de rien du tout avec comme argument le numéro de ligne

du genre comme ceci
VB:
Function cléunique(ligne)
    Dim formule$
    formule = "=B2 & ""_""& MONTH(E2) & ""_"" & SUMPRODUCT( ($Bxxx:b2=b2) * (TEXT($Exxx:E2,""aamm"")=TEXT(E2,""AAMM"")))"
    formule = Replace(formule, "2", ligne)
    formule = Replace(formule, "xxx", 2)
    cléunique = Evaluate(formule)
End Function

que tu pourrais déclencher avec l’événement change par exemple ou quand tu veux même
exemple dans un msgbox
VB:
Sub test()
    MsgBox cléunique(9)'demande la clé unique  qui doit correspondre a la ligne 9
End Sub

que la ligne A2 se créé, la macro ne voit pas les éléments en dessous et s’incrémente toujours à 1 et ne va pas voir ce qui est déjà existant.
selon une organisation digne de ce nom la ligne 2 ne devrait pas a avoir a visiter les lignes suivantes car elle devraient êtres successivement inscrites dans l'ordre

si c'est pas le cas c'est un beau foutoir ton truc revois ta conception
 

Ballestrero Maxime

XLDnaute Nouveau
Bonjour le fils
si tu tiens absolument a avoir du vba et donc les valeurs en A et non les formules je te propose de reprendre ce que t'a donné @mapomme en vba
tout simplement en évaluant la formule

par exemple on pourrait faire ça dans une toute petite fonction de rien du tout avec comme argument le numéro de ligne

du genre comme ceci
VB:
Function cléunique(ligne)
    Dim formule$
    formule = "=B2 & ""_""& MONTH(E2) & ""_"" & SUMPRODUCT( ($Bxxx:b2=b2) * (TEXT($Exxx:E2,""aamm"")=TEXT(E2,""AAMM"")))"
    formule = Replace(formule, "2", ligne)
    formule = Replace(formule, "xxx", 2)
    cléunique = Evaluate(formule)
End Function

que tu pourrais déclencher avec l’événement change par exemple ou quand tu veux même
exemple dans un msgbox
VB:
Sub test()
    MsgBox cléunique(9)'demande la clé unique  qui doit correspondre a la ligne 9
End Sub


selon une organisation digne de ce nom la ligne 2 ne devrait pas a avoir a visiter les lignes suivantes car elle devraient êtres successivement inscrites dans l'ordre

si c'est pas le cas c'est un beau foutoir ton truc revois ta conception
Bonjour patricktoulon

C’est probablement un vrai foutoir comme tu dis, car l’idée de la clé unique est arrivée après et je ne suis qu’un débutant . J’essaie d’apprendre malgré tout

merci pour ta réponse et tes informations, je vais essayer ta formule.
 

patricktoulon

XLDnaute Barbatruc
re
histoire d’être plus en cohérence avec mon point de vue on fait un peu plus propre et plus précis

VB:
Function cléunique(ligne, Optional F$)
    Dim formule$
    If F = "" Then F = ActiveSheet.Name
    formule = "=F!BZ & ""_""& MONTH(F!EZ) & ""_"" & SUMPRODUCT( (F!$B2:bZ=F!bZ) * (TEXT(F!$E2:EZ,""aamm"")=TEXT(F!EZ,""AAMM"")))"
    formule = Replace(Replace(formule, "Z", ligne), "F!", F & "!")
    'Debug.Print formule
    cléunique = Evaluate(formule)
End Function

test
VB:
Sub test()
    MsgBox cléunique(9, "Feuil1")    ' si le sheets active n'est pas celui concerné
    MsgBox cléunique(9)    ' uniquement si le sheet actif est celui concerné
End Sub
;)
pour info elle quand même utilisable en formule
"=cléunique(ligne())"
 
Dernière édition:

Ballestrero Maxime

XLDnaute Nouveau
re
histoire d’être plus en cohérence avec mon point de vue on fait un peu plus propre et plus précis

VB:
Function cléunique(ligne, Optional F$)
    Dim formule$
    If F = "" Then F = ActiveSheet.Name
    formule = "=F!BZ & ""_""& MONTH(F!EZ) & ""_"" & SUMPRODUCT( (F!$B2:bZ=F!bZ) * (TEXT(F!$E2:EZ,""aamm"")=TEXT(F!EZ,""AAMM"")))"
    formule = Replace(Replace(formule, "Z", ligne), "F!", F & "!")
    'Debug.Print formule
    cléunique = Evaluate(formule)
End Function

test
VB:
Sub test()
    MsgBox cléunique(9, "Feuil1")    ' si le sheets active n'est pas celui concerné
    MsgBox cléunique(9)    ' uniquement si le sheet actif est celui concerné
End Sub
;)
pour info elle quand même utilisable en formule
"=cléunique(ligne())"
Re,

Je vous remercie pour le moment la formule de @mapomme semble convenir. @patricktoulon j'essaierais la tienne ultérieurement.

Merci beaucoup :)
 

Statistiques des forums

Discussions
311 720
Messages
2 081 896
Membres
101 833
dernier inscrit
sandra25