[RESOLU] Amélioration d'un code

  • Initiateur de la discussion Initiateur de la discussion Ternoise
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Ternoise

XLDnaute Occasionnel
Bonjour le Forum
Meilleur vœux à tous

J'aimerais modifier ce petit bout de code en ajoutant 2 conditions

Private Sub V_Click()
Dim R As Range

' si pas de code, on est viré
If T = "" Then Exit Sub

' placement dans la base
Set R = Sheets("ADMINISTRATEUR").[B:B].Find(T, , , 1)

'si le passe est faux message et retour à la saisie
If R Is Nothing Then
MsgBox "Saisie incorrecte !", vbCritical, "Annulation..."
T = "": T.SetFocus
Exit Sub

'vers la feuille "DIRECTION"
' Else
' With Sheets("DIRECTION")
' .Visible = -1 '
' .Unprotect ([MdP_Feuille]) 'mot de passe
' .Activate
' Sheets("Menu").Visible = 2 '
' '.Protect ([MdP_Feuille]) 'mot de passe
' End With
' Unload Me


'vers la feuille "ADMINISTRATEUR"
' Else
' With Sheets("ADMINISTRATEUR")
' .Visible = -1 '
' .Unprotect ([MdP_Feuille]) 'mot de passe
' .Activate
' Sheets("Menu").Visible = 2 '
' '.Protect ([MdP_Feuille]) 'mot de passe
' End With
' Unload Me




'pour les autres utilisateurs
Else
With Sheets("UTILISATEUR")
.Visible = -1 '
.Unprotect ([MdP_Feuille]) 'mot de passe
.[$B$1] = R(1, 2)
.Activate
Sheets("Menu").Visible = 2 '
.Protect ([MdP_Feuille]) 'mot de passe
End With
End If
Unload Me

Quand le code est celui de "direction" aller sur la feuille "Direction"
Quand le code est celui de "Administrateur" aller sur la feuille "Administrateur"
sinon aller sur la feuille "Utilisateur"


Merci de votre aide
David
 
Dernière édition:
Re : Amélioration d'un code

Bonjour JM

Cela va être compliqué pour ressortir cette partie du module dans un fichier exemple.
Cette partie est dans un fil mais je sais plus lequel et de qui cela provient !
Je devrait prendre l'habitude de citer les personnes dans mon code.

Sinon, le code présenté fonctionne bien comme il est présenté.
J'avais essayé de mettre des "else" mais forcement sans résultat.

Cordialement
Meilleurs vœux
David
 
Re : Amélioration d'un code

Bonjour Ternoise, Staple1600

Si j'ai tout compris, comme le supputait Staple1600, un Select Case fait l'affaire

le code modifié du else:

Code:
Else
            Select Case R(1, 2)
            Case "ADMINISTRATEUR", "DIRECTION"
                NomFeuille = R(1, 2)
            Case Else
                NomFeuille = "UTILISATEUR"
            End Select
            
            With Worksheets(NomFeuille)
            '.Visible = -1 '
            '.Unprotect ([MdP_Feuille]) 'mot de passe
            .[$B$1] = R(1, 2)
            .Activate
            'Sheets("Menu").Visible = 2 '
            '.Protect ([MdP_Feuille]) 'mot de passe
            End With
        End If
  Unload Me

Bonne suite
 
Re : Amélioration d'un code

Bonsoir PAf

Meilleurs vœux et mer ci de ta réponse.

Je comprend pas trop avec "Nomfeuille"

J'ai fais ceci mais cela fonctionne pas pour les feuilles autres que utilisateur

Private Sub V_Click()
Dim R As Range

' si pas de code, on est viré
If T = "" Then Exit Sub

' placement dans la base
Set R = Sheets("ADMINISTRATEUR").[B:B].Find(T, , , 1)

'si le passe est faux message et retour à la saisie
If R Is Nothing Then
MsgBox "Saisie incorrecte !", vbCritical, "Annulation..."
T = "": T.SetFocus
Exit Sub

Else

Select Case R(1, 2)
Case "ADMINISTRATEUR", "DIRECTION", "NATHALIE"
Feuille = R(1, 2)

Case Else

With Sheets("UTILISATEUR")
'.Visible = -1 '
'.Unprotect ([MdP_Feuille]) 'mot de passe
.[$B$1] = R(1, 2)
.Activate
'Sheets("Menu").Visible = 2 '
'.Protect ([MdP_Feuille]) 'mot de passe
End With

End Select

End If
Unload Me

End Sub

Merci de ton aide
David
 
Re : Amélioration d'un code

Re,
le Select Case permet de déterminer le nom de la feuille qu'on va afficher.

si Case R(1, 2) contient "ADMINISTRATEUR", "DIRECTION" ou "NATHALIE", NomFeuille prendra la valeur "ADMINISTRATEUR", "DIRECTION" ou "NATHALIE". Dans les autres cas, NomFeuille prendre "UTILISATEUR" comme valeur.

ensuite, à l'issue du End Select, viens le code pour ouvrir la feuille correspondant au contenu de la Variable NomFeuille.

Donc, pour que ça fonctionne, utiliser le code ci dessous avec l' adaptation pour "NATHALIE":
Code:
Else
            '***** Détermination du type d'utilisateur
            Select Case R(1, 2)
            Case "ADMINISTRATEUR", "DIRECTION","NATHALIE"
                NomFeuille = R(1, 2)
            Case Else
                NomFeuille = "UTILISATEUR"
            End Select
           
            '**** Affichage  de la feuille dont le nom est désormais dans NomFeuille
            With Worksheets(NomFeuille)
            '.Visible = -1 '
            '.Unprotect ([MdP_Feuille]) 'mot de passe
            .[$B$1] = R(1, 2)
            .Activate
            'Sheets("Menu").Visible = 2 '
            '.Protect ([MdP_Feuille]) 'mot de passe
            End With
        End If
  Unload Me

A+
 
Re : Amélioration d'un code

Bonjour,

Mille excuses pour l'omission de la déclaration ! Mais ça n'a pas dû poser gros soucis.

pour la plage nommée, pas trouver mieux que ce code
Code:
        Else
        Flag = False
 '***** Détermination du type d'utilisateur
            For Each c In [PLAGENOM]
                If R(1, 2) = c.Value Then
                    NomFeuille = R(1, 2)
                    Flag = True
                    Exit For
                End If
            Next c
            If Flag = False Then NomFeuille = "UTILISATEUR"
           
            '**** Affichage  de la feuille dont le nom est désormais dans NomFeuille
            With Worksheets(NomFeuille)
            '.Visible = -1 '
            '.Unprotect ([MdP_Feuille]) 'mot de passe
            .[$B$1] = R(1, 2)
            .Activate
            'Sheets("Menu").Visible = 2 '
            '.Protect ([MdP_Feuille]) 'mot de passe
            End With
        End If
  Unload Me

où PLAGENOM est le nom de la plage nommée.
sans oublier de déclarer c as Range et Flag as Boolean

Si l'utilisateur est trouvé dans la plage nommée, on met son nom dans NomFeuille, et Flag à Vrai.
Puisque Flag est vrai on ne passe pas dans le test if Flag...
Si l'utilisateur n'est pas trouvé dans la plage nommée, Flag reste à Faux, on passe dans le test if Flag...et NomFeuille prend la valeur UTILISATEUR;

A+
le reste sans changement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
178
Réponses
15
Affichages
788
Réponses
3
Affichages
242
Retour