Attribute VB_Name = "Ajouter_Si_Nouveau_v102" Option Explicit '---------------------------------------------------------------------------------------- ' Procédure_____: Ajouter_Si_Nouveau ' Date__________: 23/06/2024 ' Auteur________: www.CapLSS.com - https://www.caplss.com/viewtopic.php?t=269 ' Objet_________: Ajouter un nouvel élément inconnu dans un Tableau ' Référence_____: Fonction de conversion ' Appel_________: x_Nombre = Ajouter_Si_Nouveau(x_LaValeur, x_LeTableau, opt. x_Vide) ' Retour________: Retourne 1 si ajout réalisé, 0 sinon ' Options_______: Si x_Vide := true, considère un champ vide comme valeur possible ' Compatibilité_: (2003-2019)Office (11.0-16.0)Excel (+)32-bit (+)64-bit ' Statut________: (x)Validé ()En attente validation ()En cours développement '---------------------------------------------------------------------------------------- ' 2013.02.16 v1.00 DEV Création initiale, ajoute un élément non-vide à un tableau ' 2022.01.07 v1.01 DEV Accepte une chaine vide comme un élément officiel ' 2024.06.23 v1.02 DEV Accepte que le tableau soit sans dimension (sans Redim préalable) Function Ajouter_Si_Nouveau(x_LaValeur As Variant, x_LeTableau As Variant, Optional x_Vide As Boolean) As Variant ' Si Nouveau ? Dim i, LB As Variant Dim A_Ignorer As Boolean A_Ignorer = False If (x_LaValeur = "" And x_Vide) Or x_LaValeur <> "" Then ' Gère un tableau sans dimension LB = -1: On Error Resume Next: LB = LBound(x_LeTableau): On Error GoTo 0 ' Tableau n'est pas vide ? If LB <> -1 Then ' Nouvelle Donnée ou Champ vide à ajouter For i = LB To UBound(x_LeTableau) ' Recherche si existe déjà If x_LeTableau(i) = x_LaValeur Then ' Pas d'ajout dans ce cas A_Ignorer = True Exit For End If Next i End If Else ' Vide à ne pas Ajouter A_Ignorer = True End If ' Ajout If Not A_Ignorer Then ' Tableau non Vide ? If LB <> -1 Then If ((UBound(x_LeTableau) - LBound(x_LeTableau)) <> 0) Or Not IsEmpty(x_LeTableau(UBound(x_LeTableau))) Then ' Ajoute un emplacement ReDim Preserve x_LeTableau(UBound(x_LeTableau) + 1) End If End If ' Gère un tableau sans dimension If LB = -1 Then ReDim Preserve x_LeTableau(0) ' Affecte la valeur x_LeTableau(UBound(x_LeTableau)) = x_LaValeur Ajouter_Si_Nouveau = 1 Else Ajouter_Si_Nouveau = 0 End If End Function