problème comparaison sous vba

nikilhas

XLDnaute Nouveau
Bonjour,

je suis en train de développer une application Excel ( reprise d'une ancienne version sans macro ni vba) de mon travail.
je dois par exemple faire des boutons sur un userform.
tout cela est ok mais je dois faire une fonction pour un bouton "GOMME"
je vous explique :

une personne est habilité à mettre dans sa cellule une valeur (exemple CA) celle ci se colorie en bleue
ensuite la personne si elle veut la modifier va sur la cellule et clique sur le bouton gomme et cela s'efface.

son supérieur valide son CA donc passage de la cellule en verte avec un v devant CA.
il n'y a que certaines personnes qui peuvent valider le CA (liste mise dans un type string (cf fonction jointe en bas)
Des que la validation est faite la personne non habilité (pas dans la liste) ne peut pas modifier son CA ( normal me direz vous car elle a été validé mais des personnes malhonnête ont déjà fait cela par le passé).

malheureusement je dois faire cela pour 26 valeurs différentes or vba 2013 ne va pas aussi loin voila ma fonction qui fonctionne mais qui est incomplete (car manque de valeur) :
-----------------------
-----------------------
Private Sub GOMME_Click()
'
' fonction de GOMME
' réalisé par XX le 01/10/2014
' toutes personnes peut utiliser la GOMME si pas de validation ultérieur
' si données en cellule validée seules les personnes de la liste peuvent utiliser la GOMME
'
Dim Cell As Variant
Dim Liste As String
Liste = ("X X, Y Y, Z Z")
If
(ActiveCell.FormulaR1C1 = "v CA" Or ActiveCell.FormulaR1C1 = "v RTT" Or ActiveCell.FormulaR1C1 = "v Stage" Or ActiveCell.FormulaR1C1 = "v RC" Or ActiveCell.FormulaR1C1 = "v AT" Or ActiveCell.FormulaR1C1 = "v GE" Or ActiveCell.FormulaR1C1 = "v CEx" Or ActiveCell.FormulaR1C1 = "v 80%" Or ActiveCell.FormulaR1C1 = "v CET RTT" Or ActiveCell.FormulaR1C1 = "v CET CA" Or ActiveCell.FormulaR1C1 = "v ½ CET CA" Or ActiveCell.FormulaR1C1 = "v ½ CET RTT" Or ActiveCell.FormulaR1C1 = "v ½ CA" Or ActiveCell.FormulaR1C1 = "v ½ RTT" Or ActiveCell.FormulaR1C1 = "v ½ Stage" Or ActiveCell.FormulaR1C1 = "v ½ RC" Or ActiveCell.FormulaR1C1 = "v AM" Or ActiveCell.FormulaR1C1 = "v ½ GE" Or ActiveCell.FormulaR1C1 = "v ½ CEx" Or ActiveCell.FormulaR1C1 = "v 90%" Or ActiveCell.FormulaR1C1 = "v ½ CET")

And Not InStr(Liste, VBA.Environ("USERNAME")) <> 0
Then Exit Sub

' la gomme est utilisé pour tous et une précision est faite pour ne pas retiré la couleur si férié en plus du mot férié
For Each Cell In Selection
If (Cell.Value = "FERIE") Then
Cell.Value = "FERIE"
Selection.Interior.ColorIndex = 36
Exit Sub
End If
Next Cell
Selection.Interior.ColorIndex = xlNone
Selection.ClearContents
End Sub

--------------------
je souhaiterais donc faire deux listes
une pour les personnes et une autre pour les valeurs v Ca v RTT
mais lorsque je fais cela je n'arrive pas à la faire fonctionner
soit toute personne peut utiliser la gomme même si pas dans la liste si valeur à v CA ou v RTT etc
soit personnes ne peut utiliser la Gomme
j'ai essayé de faire cela mais ca ne fonctionne pas

Private Sub GOMME_Click()
' fonction de GOMME
' réalisé par X Xle 01/10/2014
' toutes personnes peut utiliser la GOMME si pas de validation ultérieur
' si données en cellule validée seules les personnes de la liste peuvent utiliser la GOMME
Dim Cell As Variant
Dim Liste As String
Dim Liste_2 As String
Liste = ("X X, Y Y , Z Z")
Liste_2 = ("v CA,v RTT,v GE,v Stg,v RC,v AT,v CEx,v 80,v 90,v CET RTT,v CET CA,v ½ CET CA,v ½ CET RTT,v ½ CA,v ½ RTT,v ½ Stage,v ½ RC,v AM,v ½ GE,v ½ CEx")
If Not InStr(Liste, ActiveCell.FormulaR1C1) And Not InStr(Liste, VBA.Environ("USERNAME")) <> 0 Then Exit Sub

' la gomme est utilisé pour tous et une précision est faite pour ne pas retiré la couleur si férié en plus du mot férié
For Each Cell In Selection
If (Cell.Value = "FERIE") Then
Cell.Value = "FERIE"
Selection.Interior.ColorIndex = 36
Exit Sub
End If
Next Cell
Selection.Interior.ColorIndex = xlNone
Selection.ClearContents
end sub

------------------------------------------

merci pour votre aide.

la difficulté et que je ne peux fournir de fichier car le fichier fait référence à username de l'utilisateur

J'essayerai d'apporter le maximum d'information pour vous éclairer et que vous m'aidiez

Cdt
 

Staple1600

XLDnaute Barbatruc
Re : problème comparaison sous vba

Bonsoir à tous

nikilhas [highlight]Bienvenue sur le forum[/code]
la difficulté et que je ne peux fournir de fichier car le fichier fait référence à username de l'utilisateur
Tu peux joindre un fichier exemple allégé et anonymisé.
On fera en sorte que l'Application.UserName ne soit pas un problème avec un simple guillemet ;)
 

nikilhas

XLDnaute Nouveau
Re : problème comparaison sous vba

Merci d'avoir répondu je mets un fichier Excel sans nom dans le fichier à part le mien.

a l'ouverture du fichier une macro lance un userform.
dedans différent onglet
l'onglet bouton de commande permet de remplir une case avec son intitulé (il passe en bleu + valeur)
le bouton validation sert à valider ( il faudra mettre votre nom dans la fonction dans la liste afin de pouvoir l'utiliser, de même pour le bouton Gomme il faudra mettre votre nom)

justement c'est ce bouton la qui me pose problème.
je souhaite que le bouton gomme soit utiliser par tout le monde quand la case est en bleu mais dès que la case a été validé ( case verte avec valeur :"v +valeur de la case), seules certaines personnes peuvent l'effacer.

j'ai dans mon programme 2 fonctions gomme (une active qui fonctionne mais vba a ses limites de caractères et une autre en commentaire que j'essaie d'implémenter en faisait 2 listes et essayant de faire des comparatif):
si cellule active contient valeur de la liste 2 et si username n'appartient à la liste 1 alors Gomme inutilisable
si cellule active contient valeur de la liste 2 et si username appartient à la liste 1 alors gomme OK

si cellule bleu plus valeur bouton alors comme utilisable par tous.

Merci de votre aide.

Cdt

Nikolhas


URL supprimée
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : problème comparaison sous vba

Bonsoir à tous


Ton fichier n'est pas totalement anonymisé ...:rolleyes:
Private Sub UserForm_Initialize() ' initialise la liste des personnes
Et que lit-on dans l'Array ?
Et dans le code de chaque feuille
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' réalisé par N*****s D******E le 01/10/2014
' permet de bloquer la modification de cette feuille aux personnes qui ne sont pas dans le listing
Liste = (

Donc prends le temps de bien vérifier et de le remplacer

PS: Tu sais que tu peux joindre directement des fichiers sur le forum ?
(voir comment dans la FAQ du forum)
 

nikilhas

XLDnaute Nouveau
Re : problème comparaison sous vba

Je viens de mettre à jour le fichier sans les noms :)

merci et merci du temps que tu pourrais passer dessus

je pensais à une liste
dim liste_2 as Array mais je ne sais pas si cela fonctionnerai?
car moi j'ai fait dim liste_2 as string


Ce lien n'existe plus


Merci
 

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400