XL 2016 Rechercher 1 item dans une liste VBA

ya_v_ka

XLDnaute Impliqué
Salut tout le monde,

Je coince sur un truc tout simple...

Je cherche un code me permettant de vérifier la présence d'un texte dans une liste (ce qui permet, si la liste évolue, de ne pas retravailler tout le code), du style :

Public Enum eNoPers
AB0154
CF1587
DR4568
End Enum

MonNoPers = "CF1587"

--> et là mon problème :

If MonNoPers fait partie de eNoPers then...

Ou éventuellement avec un Array()

Si quelqu'un a une idée, je le remercie d'avance...

Ya'v
 

ya_v_ka

XLDnaute Impliqué
Meilleurs vœux à toi z'aussi, merci.

Tout le fichier est totalement inutile pour cette question, il traite de planning visuel.
L'idée sert à limiter la possibilité de modification aux ayants droit en comparant leur numéro personnel... sinon il me reste la solution du mot de passe communiqué auxdites personnes ou la création d'une constante par entrée, mais ça me semble plus laborieux ! (et plus risqué en cas d'ajout ou retrait d'une personne) Et pour ce détail je n'ai encore rien écrit... coinçant dessus !

Bonne soirée

Ya'v
 

ya_v_ka

XLDnaute Impliqué
Bonjour,

J'ai bricolé ça comme suit :

VB:
Option Explicit

Const Aut1 As String = "B01"
Const Aut2 As String = "A01"
Const Aut3 As String = "A02"
Const Aut4 As String = "A03"
Const Aut5 As String = ""
Const Aut6 As String = ""


Sub Autoriser()

Dim Autor(5) As Variant
Dim i As Integer
Dim MonNo As String
Dim Autorisation As Boolean
Autor(0) = Aut1
Autor(1) = Aut2
Autor(2) = Aut3
Autor(3) = Aut4
Autor(4) = Aut5
Autor(5) = Aut6
MonNo = "A02"

For i = LBound(Autor) To UBound(Autor)
    If MonNo = Autor(i) Then
        Autorisation = True
        MsgBox Autor(i)
    End If
Next
End Sub

Mais c'est un rien redondant...

Si qq1 voit plus propre !

Amitiés

Ya_y
 

ChTi160

XLDnaute Barbatruc
Bonjour Ya_v
Bonjour le Fil
on avance Lol
Que veux-tu faire via ce tableau si ce n'est vérifier que "Aut1" est autorisé si le mot entré et correct ?
je ne sais pas si je suis clair Lol
Utiliser une feuille source (Tableau structuré) des autorisations (à quoi ?) masquée(xlVeryHidden) serait peut-être plus pratique.
Bonne journée
jean marie
 

ya_v_ka

XLDnaute Impliqué
Que veux-tu faire via ce tableau si ce n'est vérifier que "Aut1" est autorisé si le mot entré et correct ?

Utiliser une feuille source (Tableau structuré) des autorisations (à quoi ?) masquée(xlVeryHidden) serait peut-être plus pratique.

Hello tous,

C'est exactement ça, à un détail prés : Chaque collaborateur a un identifiant personnel qu'Office reconnait. S'il est "autorisé" je ne protège que la structure de base (4 - 5 personnes qui ne changent que rarement), sinon tout est protégé et les 60 autres n'ont accès qu'au tableau sans pouvoir le modifier. Et tout ça, sans devoir entrer manuellement de mot de passe ! voilà ;-)
Je le fait déjà sur un autre fichier, mais avec un seul autorisé... moi !

La feuille masquée (very..) reste une option mais ne contiendrait que 4 - 5 identifiants de 8 caractères...

Bonne journée

Ya'v
 

ChTi160

XLDnaute Barbatruc
Re
Tu dis :
Chaque collaborateur a un identifiant personnel qu'Office reconnait
Et tout ça, sans devoir entrer manuellement de mot de passe !
Donc pas besoin de MdP! l'identifiant suffit ?
mais que doit faire le collaborateur pour se faire reconnaitre ?
Donc on ne s'occupe que des 4-5 qui ont accès ,les autres auront accès à un Fichier Protégé , qu'il ne peuvent déprotéger ?
jean marie
 

ya_v_ka

XLDnaute Impliqué
Donc pas besoin de MdP! l'identifiant suffit ?
mais que doit faire le collaborateur pour se faire reconnaitre ?
Donc on ne s'occupe que des 4-5 qui ont accès ,les autres auront accès à un Fichier Protégé , qu'il ne peuvent déprotéger ?
jean marie
C'est ça, l'identifiant est automatiquement reconnu par excel (utilisateur). S'il est listé = protection qui autorise l'ajout, la suppression et la modification dans le tableau, sinon protection n'autorisant que la consultation et ça sans que le collaborateur n'aie rien à faire (si ce n'est ouvrir sa session avec sa carte à puce et ouvrir le fichier :)).
Tout ça je sais faire, je ne bloquais que sur la comparaison de l'identifiant utilisateur avec une liste de constantes, que je souhaiterais ne pas "perdre" dans le code... Mais en transformant des constantes en variables, comme ci-dessus, je contourne la limite qui me gène... Pas très propre, mais fonctionnel !

Bien à vous

Ya'v
 

job75

XLDnaute Barbatruc
Bonjour ya_v_ka, heureux de te revoir, bonjour le fil,

On peut stocker une liste dans un nom défini masqué :
VB:
Sub Memorise()
ThisWorkbook.Names.Add "MaListe", Array("Nom1", "Nom2", "Nom3", "Nom4", "Nom5"), Visible:=False 'nom défini masqué
End Sub
C'est très discret car la macro sera supprimée après exécution.

Pour tester on fait ce qu'on veut, par exemple :
Code:
Sub Test()
Dim a, nom, verif
a = Array("Nom3", "Nom10") 'à adapter
For Each nom In a
    verif = IsNumeric(Application.Match(nom, [MaListe], 0))
    MsgBox nom & " : " & IIf(verif, "", "non ") & "listé"
Next
End Sub
A+
 

ya_v_ka

XLDnaute Impliqué
Bonjour ya_v_ka, heureux de te revoir, bonjour le fil,

On peut stocker une liste dans un nom défini masqué :
VB:
Sub Memorise()
ThisWorkbook.Names.Add "MaListe", Array("Nom1", "Nom2", "Nom3", "Nom4", "Nom5"), Visible:=False 'nom défini masqué
End Sub
C'est très discret car la macro sera supprimée après exécution.
Hello,

Plaisir aussi de repasser par ici et d'y retrouver des gens connus ;-)

Pas inintéressant ça...

Pour tester on fait ce qu'on veut, par exemple :
Code:
Sub Test()
Dim a, nom, verif
a = Array("Nom3", "Nom10") 'à adapter
For Each nom In a
    verif = IsNumeric(Application.Match(nom, [MaListe], 0))
    MsgBox nom & " : " & IIf(verif, "", "non ") & "listé"
Next
End Sub
A+
Là je peux simplifier car il ne peut y avoir 2 utilisateurs, la boucle est donc inutile dans ce sens...

Merci pour la proposition d'approche, je vais creuser un peu :)

Bonne suite

Ya'v
 

Discussions similaires

Statistiques des forums

Discussions
299 702
Messages
1 978 588
Membres
206 297
dernier inscrit
ousssama