Code VBA - Récupérer des valeurs entre diverses feuilles

Trunk

XLDnaute Nouveau
Bonjour à tous,

Je tiens tout d'abord à vous remercier car j'ai pu réussir à trouver un petit bout de code que je cherchais grace aux divers échanges que j'ai pu lire sur ce forum...vous contribuez à aider les personnes, telles que moi, qui ne sont pas expertes en Excel et en développement et qui nécessitent parfois des petits coups de pouce pour parvenir à leurs fins !

Néanmoins, j'ai encore besoin d'aide... Je vous expose mon besoin :

J'ai mis en place dans un fichier excel un petit bout de code VBA qui affiche une feuille spécifique après qu'une personne ait entré un mot de passe (inputbox).

J'aimerais désormais pouvoir afficher à cette personne de manière automatique ce qu'elle est censée voir sur sa feuille dédiée.

--> Nous avons dans ma société un système de gestion électronique de clés contrôlée par des badges, et les personnes qui l'utilisent ont accès à plein de clés et ne savent pas à quoi toutes ces clés correspondent... J'aimerais donc leur montrer au sein d'une feuille l'intitulé des emplacements, mais seulement ceux auxquels ils ont accès.

J'ai fait un fichier excel exemple très raccourci que je joins à ce message, pour imager un peu ...

J'ai une feuille nommée "Accès" où j'ai comme colonnes :

- une colonne avec le mot de passe de la personne,
- ensuite une colonne avec son Prénom NOM,
- ensuite 5 colonnes correspondant à numéros de groupes qui sont en fait les numéros d'emplacements des clés. Sur la ligne de cette personne sont cochées des croix sous les groupes, indiquant les accès qu'a la personne.

Ensuite j'ai une feuille nommée "Emplacements" où l'on retrouve les numéros d'emplacements et en face de chacun d'entre eux l'intitulé des bureaux.

Ce que j'aimerais réaliser :

- Une personne ouvre le fichier, l'invite de commande lui demande un mot de passe. Elle entre le mot de passe et cela lui affiche la feuille qui lui a été réservée dans le code VBA (feuille "Agent1" ou "Agent2" dans mon fichier),

- la feuille contient un tableau comme celui déjà présent qui va alors lui afficher les numéros et intitulés de clés relatives aux accès qu'il a.

--> Pour cela, il faudrait que le code ait le comportement suivant : Le mot de passe est entré, le fichier cherche dans la colonne mot de passe du fichier "Accès", il vérifie les croix cochées sur la ligne de la personne et fait la relation avec les emplacements de la feuille "Emplacements". Puis les numéros et intitulés de clés sont récupérés et s'affichent les uns après les autres dans le tableau de feuille vue par l'agent.

J'ai simulé le fonctionnement de cet automatisme au sein du fichier excel joint.

Les mots de passe pour accéder au fichier sont "test" et "test2" ("test" affiche la feuille 1 et "test2" affiche la feuille 2).

Je ne sais pas si mes explications sont claires, mais j'ai cogité pendant un petit moment avant de me lancer dans l'écriture de ce message en essayant de clarifier au maximum ... Vous me répondrez peut-être que c'est utopique ce que je demande, ou critiquerez peut-être aussi code déjà en place (vous pouvez bien sur! :)), quoiqu'il en soit je suis ouvert à toute proposition ou aide, même si partielle, du moment que cela peut me permettre d'avancer...

Merci d'avance à tous ceux qui prendront le temps de me répondre.
 

Pièces jointes

  • Exemple simulé.xls
    27 KB · Affichages: 209

Trunk

XLDnaute Nouveau
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Bonjour Skoobi !

J'ai effectué les modifications dont tu me parlais, mais je rencontre des erreurs d'exécutions (cf pièce jointe).

Une première vis à vis de l'affichage forcé de la feuille ACCUEIL, et ensuite quand je commente cette partie, j'ai une erreur d'exécution du morceau de code suivant "Sheets(i).Visible = xlVeryHidden".

Après avoir commentées ces deux parties, lorsque j'ouvre le fichier, plus d'erreur d'exécution (à première vue).

PS : Par contre, la feuille "Emplacements" n'a pas les lignes/colonnes déverrouillées.
 

Pièces jointes

  • Erreurs d'exécution.jpg
    Erreurs d'exécution.jpg
    27.9 KB · Affichages: 62

skoobi

XLDnaute Barbatruc
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Bonjour,


aarrrfff oui logique, il faut que soit affiché au-moins la feuille acceuil (j'avais pas testé cette fois-ci :().

Code:
For i = 1 To Sheets.Count
[B]If Sheets(i).Name <> "Accueil" Then[/B] Sheets(i).Visible = xlVeryHidden
Next  'on identifie l'utilisateur
 

skoobi

XLDnaute Barbatruc
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

En fait, la feuille "Accueil" devait être caché avant d'avoir mis la boucle dans le code.
Je l'ai ré-affiché.
De plus, cette partie du code n'est plus nécessaire, je l'ai mis en commentaire:

Code:
'Force l 'ouverture du fichier sur la feuille sélectionnée
'If Sheets("ACCUEIL").Visible = False Then Sheets("ACCUEIL").Visible = True
'Sheets("ACCUEIL").Select
J'ai également ajouté la création automatique de la feuille quand tu ajoutes une personne dans "Accès":

Code:
      For Each Mdp In .Range("A7", .[A65536].End(xlUp))
        If BoxValue = Mdp.Value Then
          LigUser = Mdp.Row
          NomAgent = Mdp.Offset(0, 1).Value
[COLOR=Blue][B]      'ici on place une gestion d'erreur pour créer la feuille de l'agent si elle n'héxiste pas.
          On Error Resume Next
        'ici l'erreur est détecté si la feuille n'héxiste pas.
          Sheets(NomAgent).Visible = True
        'dans ce cas l'erreur est vraie et on cré alors la feuille.
          If Err.Number <> 0 Then
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = NomAgent
          End If
          On Error GoTo 0[/B][/COLOR]
          Exit Do
        End If
      Next
Bon test et bonne soirée.
 

Pièces jointes

  • Fichier Final V1.4.zip
    26.5 KB · Affichages: 34
Dernière édition:

Trunk

XLDnaute Nouveau
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Désolé pour la réponse tardive, je serai assez pris jusqu'à la fin de la semaine.

J'ai testé rapidement ce matin, et ça m'a l'air génial !

J'ai fait une macro supplémentaire pour obtenir le code VBA relatif à la mise en forme d'un tableau sur la page qui est générée automatiquement, afin que l'affichage soit un peu plus "attractif".

J'ai le code pour le tableau, la macro marche parfaitement, j'ai bien respecté les numéros de cellulles et colonnes dans lesquelles sont injectées les données copiées vis à vis des accès, mais apparemment je ne dois pas l'insérer au bon endroit.

Je regarde ce soir ou demain pour essayer de réussir, sinon je te demanderai d'y jeter un oeil si vraiment je sèche, mais j'pense que je devrais y arriver. Sinon tout le reste est parfait, je ne trouve vraiment plus aucun détail à modifier ! Dernière ligne droite, la vraie cette fois-ci ... :)

Merci mille fois encore Skoobi, tu as été d'une aide + que précieuse. Je te tiens au courant vis à vis de cette mini partie "mise en forme" ...
 

Trunk

XLDnaute Nouveau
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Après différentes macros créées, divers tests effectués, je pense que c'est tout bon !!!

Je te mets le fichier en PJ pour voir cela (teste avec le mdp "test3").

Je te laisse me dire ce que tu en penses : lourdeur du code, erreurs, ou autres...

Pour moi c'est parfait sinon côté fonctionnement ! :D Et je te le dois en très très TRES grande partie...

12/02 13h23 - PS : J'ai modifié à l'instant le code du tableau, qui n'affichait pas le premier accès, j'avais placé les intitulés "Emplacements" et "Descriptions" une cellule trop haut. Bug fixed !
 

Pièces jointes

  • Fichier Final V1.5.zip
    29.7 KB · Affichages: 37
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Re bonjour Trunk,

Vu l'heure à laquelle tu as répondu, j'éspère que la nuit n'a pas été trop courte :D.

Je te laisse me dire ce que tu en penses : lourdeur du code, erreurs, ou autres...
Ce qui saute aux yeux c'est ceci (ah! cet enregistreur de macro :mad:)
Code:
    Range("C2:D4").[COLOR=red][B]Select
    Selection.[/B][/COLOR]Font.ColorIndex = 3
    Columns("C:D").[B][COLOR=red]Select
    Selection.[/COLOR][/B]ColumnWidth = 45
    Rows("7:7").[COLOR=red][B]Select
    Selection.[/B][/COLOR]RowHeight = 30
    Rows("8:207").[B][COLOR=red]Select
    Selection.[/COLOR][/B]RowHeight = 20

Qui peut simplement devenir ceci:
Code:
Range("C2:D4").Font.ColorIndex = 3
    Columns("C:D").ColumnWidth = 45
    Rows("7:7").RowHeight = 30
    Rows("8:207").RowHeight = 20

Un peu partout à la mise en forme de la feuille.
Il faut simplement supprimer les "Select" "Selection".
Ca allège le code.
C'est tout.
A bientôt :).
 

Trunk

XLDnaute Nouveau
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Arf, oui, je travaille souvent assez tard la nuit ... :s

Ok, j'ai fait les modifications dans mon fichier.

J'ai ajouté un "Application.ScreenUpdating =false" en début de "Sub", vu ça sur des forums pour éviter de voir les traitements à l'écran : IM-PEC !

Seul bug remonté pour le moment, ma dernière feuille n'a pas le DisplayHeadings à "False"... On voit les en-tête de colonne & ligne.

J'ai supprimé les deux feuilles dédiées aux deux premiers utilisateurs, donc en admin je me retrouve avec "Accueil", "Accès" et "Emplacements", et la dernière citée n'est pas concernée par cette fonction donc ...

Je cherche, mais mes insertions ne changent rien...
 
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Re,

mmmm, je dirais qu'il faut activer la feuille dans la boucle du code ProtectSheet (après un test ça à l'air bon):
Code:
Private Sub ProtectSheet(Mdp As String)
Dim group As Variant, sheet As Worksheet

For Each sheet In Sheets
[COLOR=Blue][B]    sheet.Activate[/B][/COLOR]
    If Mdp <> "admin" Then
        sheet.Protect "mdp", UserInterfaceOnly:=True
        With ActiveWindow
            .DisplayHeadings = False
            .DisplayWorkbookTabs = False
        End With
    Else
        sheet.Unprotect ("mdp")
        With ActiveWindow
            .DisplayHeadings = True
            .DisplayWorkbookTabs = True
        End With
    End If
Next sheet
Sheets("ACCUEIL").Activate
End Sub
 

skoobi

XLDnaute Barbatruc
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Autre chose,

il y a un soucis dans la partie mise en forme de la feuille car la première clé est systématiquement écrasée par l'entête du tableau. Rien de grave, tu devrais trouver tout seul comme un grand :D (en faisant marcher le code en pas à pas tu trouveras plus vite ;)).

Bonne soirée ou "nuit blanche" :D.
 

Trunk

XLDnaute Nouveau
Re : Code VBA - Récupérer des valeurs entre diverses feuilles

Yes !!! Parfait !!!

J'ai ajouté aussi un "ActiveWindow.DisplayHeadings = False" au démarrage du code pour que la page Accueil soit concernée dès le démarrage, même si un admin a précédemment ouvert le fichier et a enregistré des modifications.

Pour le problème de mise en forme, je l'ai réglé déjà, enfin je pense que c'est celui dont tu parles, cf post de cet aprèm :

"12/02 13h23 - PS : J'ai modifié à l'instant le code du tableau, qui n'affichait pas le premier accès, j'avais placé les intitulés "Emplacements" et "Descriptions" une cellule trop haut. Bug fixed "

C'est bien ça ???

LoL pour la nuit ... passionné, par l'informatique et par mon boulot ... :D
 

Discussions similaires

Réponses
14
Affichages
303

Statistiques des forums

Discussions
314 499
Messages
2 110 247
Membres
110 711
dernier inscrit
chmessi