Bonjour à vous, nobles experts.
Avant de conclure avec ma problématique, une petite introduction et explication de la situation.

Je dispose d'un classeur composé de 2 feuilles avec, pour chacune, une plage de taille variable nommée
  • Feuille_1
    contient les informations générales des Centres référencés, chaque centre étant identifié par une numéro unique à 4 chiffres.
    Une plage a été nommée "Numéro_centre" et définie avec la formule suivante : =DECALER('envoi binder'!$B$3;0;0;NBVAL('envoi binder'!$B:$B)-1)
    Ainsi, la taille de la plage n'est pas fixée mais peut donc s’agrandir automatiquement au fur et à mesure de l'arrivée de nouveaux centres en repérant le numéro de centre ajoutée dans la colonne B.
  • Feuille_2
    contient des données d'analyse pour des Centres, chaque analyse étant identifiée sous la forme [nom_analyse]_[numéro_centre]_[numéro_analyse].
    Une même centre peut donc avec plusieurs entrées, différenciées par le [numéro_analyse]. Exemples d'identifiants pour les analyses "Flugubu"
    Flugubu_3454_01
    Flugubu_5482_01
    Flugubu_3454_02
    Flugubu_3454_03
    Une plage a été nommée "Datas" et définie avec la formule suivante : =DECALER('Test-Run - Données'!$B$5;0;0;NBVAL('Test-Run - Données'!$B:$B)-1;23)


Voilà donc le corps du sujet :
Je me suis lancé dans la conception d'un userform pour la saisie des données (puis renvoi dans le bon tableau) et, pour limiter les erreurs, je voudrais que l'identifiant d'analyse soit implémenté automatiquement selon celles déjà existante dans la base.
Je m'explique : dans les exemples données, si je vais pour effectuer une saisie pour le centre 5123, le userform m'affichera automatiquement l'identifiant "Flugubu_5123_01", puisque ma saisie sera la première pour le centre 5123. De même, si je vais pour effectuer une nouvelle saisie pour le centre 3454, là le userform détectera qu'il existe déjà des entrées pour ce centre et affichera donc l'identifiant "Flugubu_3454_04"

Je suis arrivé dans un premier temps à paramétrer cette implémentation automatique via formule "classique" dans une feuille sous forme matricielle :
{=SI(C4="";"";"Flugubu_"&C4&"_"&TEXTE(MAX(SI(TEXTE(C4;"#")=STXT(DECALER('Feuille_2'!B5;0;0;NBVAL('Feuille_2'!B:B));9;4);CNUM(DROITE(DECALER('Feuille_2'!B5;0;0;NBVAL('Feuille_2'!B:B));2));""))+1;"00"))}

Voici donc ma problématique.
Lorsque je passe en VBA, je pensais effectuer la recherche des entrées déjà existantes et l'implémentation automatique de l'identifiant d'analyse de la sorte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Private Sub ListSite_afterupdate
Dim num_analyse As Integer, i As Integer
num_analyse = 1
'-- Définition des variables : num_analyse pour le [numéro_analyse] et i pour une coordonnée de cellule
For i = 1 To [nombre de lignes contenues dans la plage nommée "Datas"]
If InStr([cellule de la plage "Datas" sur la première colonne](i.1), ListSite.Value) <> 0 Then num_analyse = num_analyse +1
Next i
'-- Recherche si le centre existe déjà dans les entrée et si c'est le cas, implémente le num_analyse
id_analyse.Caption = "Flugubu_" & ListSite.Value & "_" & id_analyse.Value
'-- Affichage de l'identification dans un label de l'userform
End Sub
Je vous épargne les différentes tentatives pour faire appel à la plage "Datas" via Range et qui se sont soldées toutes par des erreurs de compilations ou des erreurs 1004.
Je suppose aisément que je m'y prends comme une tanche, mais je cherche, je lis, je parcours et je ne trouve pas comment me débloquer... Du coup, je suis tristesse, je suis chagrin, je suis désarroi.

"Aidez moi [insérez votre nom ici], vous êtes mon seul espoir."