VBA mot de passe

Bonjour à tous,

Après avoir visionné une vidéo bien pratique pour ce que je souhaiterai faire, je joins le résultat fichier :

Acces admin : utilisateur : daniel mot de passe : 123

Ce qu je souhaiterais en complément VBA sur ce fichier c'est :

1) empêcher la visualisation du code VBA à l'ouverture du fichier : en effet il suffit de faire clic droit sur login et visualiser le code pour voir le descriptif VBA

2) le code VBA utlise le nom des feuilles (exemple Login, Members ...), or je souhaiterais que le code soit écrit en utilisant les codename (en cas de modif de libellé d'onglet qui empêcherait le bon déroulement du code)

3) Je souhaiterais inclure dans ce code les codesnames des onglets 1,2,3,4,5 à l'admin et 1,2,3,4 à l'utilisateur :

La méthode simple serait d'ajouter les codes : sheets("1").Visible=True pour chaque cas , mais ne pourrait on pas instaurer une boucle ?,

Merci d'avance pour vos contributions,

Cordialement,

6mdp-util.xlsm (39.12 Ko)

Bonjour,

1) Pour protéger ton code VBA tu peux le protéger par un mot de passe, dans l'éditeur VBA tu fais un clic droit sur ton projet, puis sur Propriétés et dans l'onglet Protection coche la case "Verrouiller le projet pour l'affichage"

2) Remplace tous les code utilisant sheets("Nom de la feuille") par Feuilx (x étant le numéro de feuille, tu retrouve ça à gauche dans l'éditeur VBA)

3) au lieux de mettre :

Feuil1.Visible=False

Feuil2.Visible=False

etc...

tu remplace par :

For i = 1 To 3

Worksheets(Feuil & i).Visible = False

Next i

Bonjour GGauthier,

Merci pour toutes les infos,

Je teste au plus vite et je te confirme la réussite de tes conseils ,

Cordialement,

J'ai fais une petite erreur, voilà le bon format :

For i = 1 To 3

Worksheets(i).Visible = False

Next i

Par contre il faudras que tu protège aussi ton classeur par un mot de passe ! Sinon rien n'empeche les utilisateurs de faire un clic droit pour afficher les feuilles masquées !

De plus utilise un code au démarrage pour masquer toutes les feuilles !

Dans l'éditeur, dans ThisWorkbook utilise ça :

Private Sub Workbook_Open()
For i = 3 To 8
Worksheets(i).Visible = False 'Pour masquer toutes les feuilles sauf Login
Next i
End sub

Si tu ne veux pas protéger ton classeur pour une raison ou un autre utilise alors Feuilx.Visible=xlSheetVeryHidden. Avec ça impossible de voir les feuilles masquées !

Bonjour

Pour Cacher ou d'écacher toutes les onglets

A voir

Sub Cache()
Dim I&
    For I = 1 To Sheets.Count
        Select Case Sheets(I).Name
            Case Feuil1.Name ', Feuil2.Name
                Sheets(I).Visible = -1 ' Decache
            Case Else
                Sheets(I).Visible = 2
        End Select
    Next I
End Sub

Sub Decache()
Dim Feuil As Object
   For Each Feuil In Worksheets
        Feuil.Visible = -1
   Next
End Sub

A+

Maurice

Bonjour au forum,

Merci GGautier et Archer pour vos retours,

J'ai testé et donc :

Je souhaiterais ajouter une condition préalable au code mais je ne serai pas le rédiger :

Ma problématique est d'indiquer, lors de la validation du login sur la feuille 9, onglet Segments 1 ou 0 dans la 3eme colonne du tableau Filtre _Etab en fonction du nom de l'utilisateur saisi.

Les attributions sont indiquées dans la feuille Members

Exemple : Daniel aura 1 sur toute la colonne C Filtre_Etab,

lol aura 1 sur la colonne C que pour le siége A et donc 0 pour le siège B...

Est-ce assez clair ou non?,

Ensuite j'ai apporté les modifications conseillées, mais je n'arrive pas à introduire la boucle, il me mets que la variable i n'est pas déclarée (voir fichier joint)

Je rappelle que : Acces admin : utilisateur : daniel mot de passe : 123 afin que vous puissiez accéder,

Merci d'avance pour votre aide,

Cordialement,

Pour le problème avec i rajoute en début de code Dim i

Merci pour ton retour ggauthier ,

Je reposte le fichier ainsi modifier, avec les boucles opérationnelles,

Qui peut m'aider sur le premier point :

Je souhaiterais ajouter une condition préalable au code mais je ne serai pas le rédiger :

Ma problématique est d'indiquer, lors de la validation du login sur la feuille 9, onglet Segments 1 ou 0 dans la 3eme colonne du tableau Filtre _Etab en fonction du nom de l'utilisateur saisi.

Les attributions sont indiquées dans la feuille Members

Exemple : Daniel aura 1 sur toute la colonne C Filtre_Etab,

lol aura 1 sur la colonne C que pour le siége A et donc 0 pour le siège B...

Est-ce assez clair ou non?,

Merci d'avance

Ce que tu veux c'est, au moment de la validation du login et mot de passe écrire dans la dernière colonne du tableau de la feuille Segment A ou B en fonction du login ?

Non GGAUTHIER,

Je rejoins le fichier avec un onglet Explications pour etre plus clair, toujours Daniel avec 123 et l'onglet explications apparaitra !

Je souhaiterai que le résultat soit effectif lors de la validation du login,

J’espère que je suis plus clair dans ma demande et je te remercie pour le temps passé,

Cordialement,

Voilà, à tester :

With Feuil9
    For i = 17 To 32
        If Seg = "A" Then
            If .Cells(i, 1) = "A" Then .Cells(i, 3) = 1
            If .Cells(i, 1) = "B" Then .Cells(i, 3) = 0
        End If

        If Seg = "B" Then
            If .Cells(i, 1) = "A" Then .Cells(i, 3) = 0
            If .Cells(i, 1) = "B" Then .Cells(i, 3) = 1
        End If

        If Seg = "A & B" Then
            If .Cells(i, 1) = "A" Then .Cells(i, 3) = 1
            If .Cells(i, 1) = "B" Then .Cells(i, 3) = 1
        End If
    Next i
End With

TOP TOP TOP TOP GGauthier,

Merci pour ton retour, il est nickel, j'ai une demande supplémentaire : pourrais ton indiquer sur le code : filtrer la colonne C du tableau Etab_Filtre et ne conserver que les 1!

Autre question tu as mis Dim seg mais tu ne n'a pas mis as ... le fait de le déclarer comme tu l'as fait signifie qu'il peut prendre n'importe qu'elle valeur?

Merci pour tout

Nom se n'est pas très grave mais si ça te rassure tu peux rajouter as string Je revisn vite pour la suite de ton message !

Essaye comme ceci :

With Feuil9
    For i = 17 To 32
        If Seg = "A" Then
            If .Cells(i, 1) = "A" Then .Cells(i, 3) = 1
            If .Cells(i, 1) = "B" Then .Cells(i, 3) = 0
        End If

        If Seg = "B" Then
            If .Cells(i, 1) = "A" Then .Cells(i, 3) = 0
            If .Cells(i, 1) = "B" Then .Cells(i, 3) = 1
        End If

        If Seg = "A & B" Then
            If .Cells(i, 1) = "A" Then .Cells(i, 3) = 1
            If .Cells(i, 1) = "B" Then .Cells(i, 3) = 1
        End If
    Next i

.ListObjects("ETAB_FILTRE").Range.AutoFilter Field:=3, Criteria1:="1"

End With

Si je peux te donner un conseil, si tu ne sais pas écrie la ligne de code pour effectuer une tache asse simple, n'hésite pas à utiliser l'enregistreur de macro. Cela te donnera déjà une bonne vision du code à écrie

Merci pour cette ligne supplémentaire cela fonctionne parfaitement,

Ok pour le conseil

Sujet résolu et un grand merci à toi !

De rien, au plaisir

Bonjour à tous,

J'ai une problématique plus complexe à soumettre au code VBA déterminé par Ggauthier,

En effet, je souhaiterais si c'est possible raccourcir le code car je n'ai plus A et B comme siège mais ca peut allé jusqu'à W,

alors je pourrais prendre cette partie la :

       
        If Seg = "A" Then
            If .Cells(i, 1) = "A" Then .Cells(i, 3) = 1
            If .Cells(i, 1) = "B" Then .Cells(i, 3) = 0
        End If
  

et la répéter autant de fois que j'ai de siège mais ne peut on pas raccourcir cette partie?

Je rejoins le fichier avec comme identifiant toujours daniel et password 123,

Merci pour votre aide,

Cordialement,

Je répond rapidement car je n'ai pas bcp de temps mais voilà une approche, le code ci-dessous fonctionne uniquement que pour les cas où un seul siège est attribué :

With Feuil9

    For i = 17 To 32
        If .Cells(i, 1) = Seg Then .Cells(i, 3) = 1 Else .Cells(i, 3) = 0
    Next i

    .ListObjects("ETAB_FILTRE").Range.AutoFilter Field:=3, Criteria1:="1"

End With
Rechercher des sujets similaires à "vba mot passe"