Macro excel pour accès données

Fermé
BOGI35 - 4 déc. 2008 à 18:14
 BOGI35 - 8 déc. 2008 à 18:56
Bonsoir,
Dans un classeur Excel, j'ai 3 feuilles:
- Habilitation
- Suivi individuel
- Liste globale

A partir de la feuille habilitation, j'ai créé des macros me permettant:
- d'accéder à la feuille suivi individuel lorsque je souhaite visualiser les résultats d'un joueur (menu déroulant)
- d'accéder à la liste globale. (avec des macros de filtre automatique)

Dans cette dernière, j'ai en colonne A le nom des joueurs, en B le nom de l'entraineur (équipe) et en colonnes suivantes les performances réalisées chaque mois.

A partir de cette liste j'aimerais également pouvoir accéder à la feuille Suivi individuel d'un joueur en cliquant uniquement sur le nom de celui ci (colonne A). (ce qui m'éviterait de repasser par la feuille habilitation pour avoir une fiche détaillée reprenant uniquement les performances d'un joueur)

Est ce possible de répondre à cette demande par une macro ?

Je remercie par avance toutes les personnes qui pourraient m'aider.

Petite précision: Je ne suis pas un pro des macros (pour ne pas dire que je suis nul) mais je progresse gentillement grâce à vous. Merci pour les conseils et les solutions que vous proposés sur ce forum.


BOGI35
A voir également:

4 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
4 déc. 2008 à 18:22
bonjour

Utilises une macro événementielle Worksheet_SelectionChange ou Worksheet_BeforeDoubleClick
selon ton désir en ciblant avec intersect par exemple la plage concernée.
0
Merci gbinforme,
Pour l'instant, ça ne me dit pas grand chose (c'est pour te dire mon niveau de connaissance en macros) mais je suis pugnace, peux tu m'en dire un peu plus pour la syntaxe ?
Petite précision supplémentaire, la feuille de liste globale est protégée et doit le rester.

En tout cas merci encore d'avoir bien voulu prendre un moment pour me répondre.

Dans l'attente de te lire,

BOGI35
0
gilou > BOGI35
5 déc. 2008 à 18:05
bonjour
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range
Static EnCours As Boolean
If EnCours Then Exit Sub 'Pour éviter un effet circulaire
'Si modif utilisateur en A3 ou B12
If Not Application.Intersect(Target, Union(Range("A3"), Range("B12"))) Is Nothing Then
'Recherche de l'élément en colonne E
Set C = Columns("E").Find(Range("A3").Value)
If Not C Is Nothing Then
'Si A3 a été modifiée par l'utilisateur
If Target.Address = "$A$3" Then
Range("C12").Value = C.Offset(0, 1).Value
Else
'Si C12 a été modifiée par l'utilisateur
Range("C12").Value = Range("C12").Value + Range("B12").Value
C.Offset(0, 1).Value = Range("C12").Value
EnCours = True
Range("B12").ClearContents
EnCours = False
End If
End If
End If
End Sub
je vous ai trouvé cela ("A3) sera la cell ou vous saisissez le mon ;col E ce que vous chercher;("C12") le resultat obtenu on peut meme modifier (mise a jour)avec("b12")
l'ideal est de crer en A3 une liste deroulante
0
BOGI35 > gilou
5 déc. 2008 à 21:36
Bonsoir Gilou,
Tout d'abord merci pour la solution proposée.
Maintenant, là où il faut moins de 5 mn pour un initié, pour moi il me faudra plusieurs heures pour comprendre et adapter la syntaxe à mon projet. Je ne suis cependant pas certain d'avoir bien présenter mon problème. C'est pourquoi j'ai apporté des précisions cet après midi.
La fonction "Worksheet_BeforeDoubleClick " proposée par gbinforme me paraissait adaptée (mais je n'en suis pas sûr, mes compétences en terme de macro étant proches de zéro, peut être n'ai je pas bien compris le sens de cette fonction).
A ce stade de mon projet,
j'accède à la "feuille individuelle" à partir d'une macro. La valeur de la cellule M13 de la feuille "Habilitation" saisie à l'aide d'un menu déroulant (ce qui semble correspondre à la cellule A3 dans votre réponse) détermine les critères de recherches - Fonction RechercheV -.
Une 2ème macro me permet d'accéder à la liste compacte de tous les joueurs.

Je souhaiterais ajouter la possibilité d'accéder à la feuille individuelle d'un joueur sans avoir à revenir dans la feuille habilitation. Dans le scénario que j'imagine, je double clic (sans doute la fonction "Worksheet_BeforeDoubleClick ") sur le nom du joueur choisi dans la liste globale (colonne A de la feuille liste globale). Cette action a pour effet de renseigner la cellule M13 de la feuille habilitation (déterminante pour la rechercheV de la feuille individuelle) et simultanément à la feuille suivi individuelle.


C'est bien mais je ne sais pas l'écrire en mode macro.

Voilà, voilà.

Encore merci,


BOGI35
0
Bonjour gbinforme,
Comme je te l'expliquais je ne suis pas un pro des macros mais pugnace...donc j'y arriverai.

Mon souci:
Le suivi individuel est accessible à partir de la cellule M23 de la feuille "Habilitation". (Le nom du joueur, sélectionné dans un menu déroulant vient renseigner la cellule D12 de suivi individuel, ensuite c'est une succession de RechercheV qui me permet de voir l'équipe, l'entraineur...et bien entendu les performances). = Macro: Accès suivi individuel.

La liste globale est accessible à partir de la cellule M25 de la feuille "Habilitation" = Macro: Accès liste globale dans laquelle j'y ai inséré des filtres automatiques (auto filter à partir de critères de la feuille habilitation).

Ce que j'imaginais (mais peut être n'ai je pas la bonne approche), c'est qu'à partir d'une macro (DoubleClick comme tu me le préconises), la valeur de la cellule ainsi sélectionnée dans la liste globale vienne se copier dans la Cellule M23 de la feuille "Habilitation". (déterminante pour toutes les RechercheV du suivi individuel)

Je ne suis pas certain que ça marche, la valeur de la cellule M23 étant soit une saisie soit une formule. Peut elle être les deux à la fois ?

Sans abuser de ton obligeance, peux tu me guider pour la syntaxe.
Les trois feuilles et le classeur sont protégés par un mot de passe (masqué dans une 4ème feuille).

J'ai réussi à faire tout ça en lisant ce forum, (il y a 06 mois je ne savais ce qu'était une macro) mais il y a des moments ça me paraît difficile.


Merci encore


BOGI35
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
5 déc. 2008 à 21:56
bonjour

Je ne suis pas certain que ça marche, la valeur de la cellule M23 étant soit une saisie soit une formule. Peut elle être les deux à la fois ?

Non la cellule ne peux contenir qu'une formule ou une valeur et si tu fais une saisie sur la formule tu écrases la formule.

Si j'ai à peu près compris ton souhait, tu pourrais avoir quelque chose comme ceci :
Private Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
If Not Intersect(sel, [select_plage]) Is Nothing Then
    [choix].Value = sel.Value
    Cancel = True
End If
End Sub

Pour que cette macro fonctionne, il faut :
- la mettre dans la feuille concernée (mode d'emploi)
- nommer "select_plage" ou comme tu veux et tu remplaces dans la macro, la plage de cellules où tu fais ton choix par double clic.
- nommer "choix" ou comme tu veux et tu remplaces dans la macro, la cellule où tu veux avoir le résultat sélectionné.

Ensuite, lorsque tu double cliques sur une cellule de la plage, ton résultat est documenté.

Regardes si l'on est très loin et on peut améliorer si cela ne fait pas selon ton besoin.
0
Bonsoir gbinforme,
La macro ci après fonctionne à peu près correctement.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim sel As Range
Set sel = Range("B3:B400") 'plage a définir
If Not Application.Intersect(sel, Range(Target.Address)) Is Nothing Then
Sheets("Liste globale").Range("AT1") = ActiveCell.Value
End If
End Sub


Deux évolutions à apporter (mais pas forcément dans cette macro)
1) La feuille et le classeur sont protégés (sauf la cellule AT1) aussi lorsque je double clique, la valeur est bien rapportée dans la cellule AT1 mais j'ai le message qui m'indique que la feuille est protégée.....
As tu une idée pour qu'il n'aparaisse pas ?

2) La valeur en AT reste affichée lorsque je reviens sur la feuille habilitation (je vais modifier la macro permettant le retour à la feuille habilitation.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim sel As Range
Set sel = Range("B3:B400") 'plage a définir
If Not Application.Intersect(sel, Range(Target.Address)) Is Nothing Then
Sheets("Liste globale").Range("AT1") = ActiveCell.Value
End If
End Sub


Merci encore, tes précieux conseils me permettent de progresser.

Merci également à Gilou

Bonne soirée

BOGI35
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
6 déc. 2008 à 00:20
bonsoir BOGI35,

La macro serait mieux ainsi :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Application.Intersect( Range("B3:B400"), Target) Is Nothing Then
   Sheets("Liste globale").Range("AT1") = Target.Value
   cancel=true
End If
End Sub


1) j'ai le message qui m'indique que la feuille est protégée.....
As tu une idée pour qu'il n'aparaisse pas ?


Il me semble que si tu coches autoriser la sélection des cellules lors de la protection cela devrait fonctionner.

2) La valeur en AT reste affichée lorsque je reviens sur la feuille habilitation (je vais modifier la macro permettant le retour à la feuille habilitation.

Je ne comprend pas la question ?
Veux-tu effacer AT1 ?
Après la consultation ?
Si c'est lorsque tu quittes "Liste globale" tu peux mettre dans cette feuille
Private Sub Worksheet_Deactivate()
    Range("AT1").Value = ""
End Sub
0
Bonjour gbinforme,
Je ne saurai trop te remercier.
Mon projet avance.
J'ai remplacé la macro que je t'avais soumise par la tienne...ça marche "nickel" et de plus je n'ai plus le message d'erreur...que du bonheur !!!
Pour ce qui est du 2nd point, la macro que tu me proposes fonctionne mais ne me permet pas de visualiser les données du joueur sélectionné. En effet, lorsque j'appelle (de manière classique) la feuille suivi individuel, celà a pour effet d'effacer le contenu de "Liste Globale" AT1...(logique), donc plus de référence à la valeur recherchée dans mes formules RechercheV.
En fait, ce n'est pas trop grave, tout est protégé, j'ai créé une macro qui permet de sortir de l'application sans sauvegarde, comme à l'ouverture cette cellule est vide ...la solution est toute trouvée.
Maintenant il me reste à créer la macro pour accéder directement au suivi individuel à partir du double clique et mon projet sera pratiquement terminé.

Je m'y replongerai ce soir... après avoir avalé quelques kms en VTT, histoire de se changer les idées.


BOGI35
0
Bonjour gbinforme,
Sans vouloir abuser de ta disponibilité, pourrais tu me conseiller une nouvelle fois ?
L'apprentissage est difficile !!!

Ci après les macros que j'ai créées.
La macro évènementielle que tu m'as conseillée fonctionne. (Seul petit souci, les feuilles et classeur étant protégés il faut double cliquer 3 fois pour obtenir le résultat attendu...mais ce n'est pas bloquant).

Là ou je n'arrive plus à m'y retrouver c'est dans la phase suivante...qui me paraissait pourtant plus simple...
J'essaie de m'expliquer:
Dans mon classeur j'ai (entre autre) une feuille "habilitation" permettant à un utilisateur de s'identifier et d'accéder aux données (meu déroulant) qu'il est autorisé à visualiser ("UO 3", "UO 2", "UO 5").
Avec la macro évènementielle que je viens de créer, il peut désormais aussi double cliquer sur un nom d'une des feuilles "UO 3", "UO 2"; "UO 5". Une formule conditionnelle dans une autre cellule de la feuille "habilitation" renvoie la valeur recherchée. (priorité au menu déroulant).

A partir de cette sélection des macros renvoies soit vers "Suivi PdV", soit vers "suivi GRP".

La où je n'arrive plus "à faire", c'est lorsqu'il s'agit de changer d'utilisateur.
Les cellules R1 et R2 des feuilles "UO 3" ou "UO 2" ou "UO 5" restent renseignées lorsqu'on sort de l'application (Macro Retour habilitation) et interdisent au nouvel utilisateur d'accéder à sa sélection.


J'ai essayé la macro ci après (Sub Retour_habilitation), j'ai un message d'erreur à la ligne Sheets("liste globale").Select.
J'ai également essayé ta suggestion
Private Sub Worksheet_Deactivate()
Range("R1:R2").Value = ""
End Sub
Lorsque l'on relance l'application avec un nouvel utilisateur la fonction 'Doubleclick' est désactivée.

As tu une solution à me proposer ?


Avec mes remerciements anticipés.i



BOGI35







Macro de la feuille "UO 3"

Private Sub WorkSheet_beforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim mdp As String
mdp = Sheets("feuil1").Range("A1").Value
ActiveWorkbook.Unprotect mdp
ActiveSheet.Unprotect mdp
If Not Application.Intersect(Range("A3:A4,A6,A8:A15,A17:A21,A23:A31"), Target) Is Nothing Then
Sheets("UO 3").Range("R1") = Target.Value
Cancel = True
ActiveWindow.SelectedSheets.Visible = False
Sheets("Suivi PdV").Visible = True
Sheets("Suivi PdV").Select
ActiveSheet.Protect mdp
ActiveWorkbook.Protect mdp
End If


ActiveWorkbook.Unprotect mdp
ActiveSheet.Unprotect mdp
If Not Application.Intersect(Range("A5,A7,A16,A22,A32"), Target) Is Nothing Then
Sheets("UO 3").Range("R2") = Target.Value
Cancel = True
ActiveWindow.SelectedSheets.Visible = False
Sheets("Suivi GRP").Visible = True
Sheets("Suivi GRP").Select
ActiveSheet.Protect mdp
ActiveWorkbook.Protect mdp
End If
End Sub






Sub Retour_habilitation()
'

Dim mdp As String
mdp = Sheets("feuil1").Range("A1").Value
ActiveWorkbook.Unprotect mdp
ActiveSheet.Unprotect mdp
ActiveWindow.SelectedSheets.Visible = False
ActiveWindow.Visible = True
Windows("Suivi_ARV_PDV_2009.xls").Activate
Sheets("Habilitation").Select
Range("F10:H10").Select
Sheets("UO 3").Select
Range("R1,R2").Value = ""
ActiveSheet.Protect mdp
ActiveWorkbook.Protect mdp

End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
8 déc. 2008 à 18:29
bonjour

Ta macro de la feuille "UO 3" serait plus propre ainsi car tu n'as pas à déprotéger si tu n'es pas dans la condition remplie
Private Sub WorkSheet_beforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim mdp As String
mdp = Sheets("feuil1").Range("A1").Value
If Not Application.Intersect(Range("A3:A4,A6,A8:A15,A17:A21,A23:A31"), Target) Is Nothing Then
    ActiveWorkbook.Unprotect mdp
    ActiveSheet.Unprotect mdp
    Sheets("UO 3").Range("R1") = Target.Value
    Cancel = True
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Suivi PdV").Visible = True
    Sheets("Suivi PdV").Select
    ActiveSheet.Protect mdp
    ActiveWorkbook.Protect mdp
End If


If Not Application.Intersect(Range("A5,A7,A16,A22,A32"), Target) Is Nothing Then
    ActiveWorkbook.Unprotect mdp
    ActiveSheet.Unprotect mdp
    Sheets("UO 3").Range("R2") = Target.Value
    Cancel = True
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Suivi GRP").Visible = True
    Sheets("Suivi GRP").Select
    ActiveSheet.Protect mdp
    ActiveWorkbook.Protect mdp
End If
End Sub

J'ai essayé la macro ci après (Sub Retour_habilitation), j'ai un message d'erreur à la ligne Sheets("liste globale").Select.


Pas vu cette ligne dans ta macro qui me parait plus conforme ainsi mais je n'ai pas tout sous les yeux.
Sub Retour_habilitation()
'
Dim mdp As String
mdp = Sheets("feuil1").Range("A1").Value
ActiveWorkbook.Unprotect mdp
With Sheets("UO 3")
    .Unprotect mdp
    .Range("R1,R2").Value = ""
    .Protect mdp
End With
ActiveWorkbook.Protect mdp

ActiveWindow.SelectedSheets.Visible = False
' ActiveWindow.Visible = True inutile ?
Windows("Suivi_ARV_PDV_2009.xls").Activate
Sheets("Habilitation").Select
Range("F10:H10").Select

End Sub

Lorsque l'on relance l'application avec un nouvel utilisateur la fonction 'Doubleclick' est désactivée.

As tu une solution à me proposer ?


Il doit sans doute y avoir une déactivation quelque part sinon ce n'est pas la macro désactivate qui bloque.

Essaies, lorsque tu te positionnes sur la page du doubleclic de mettre :
Application.EnableEvents = True
0
Bonsoir gbinforme,

Tu es génial et surtout patient.
J'essaierai la syntaxe ce soir, pour l'instant je sature...
Pas facile à plus de 53 piges de découvrir Excel et ses fonctionnalités. Les bouquins que j'achète sont souvent très difficiles "à décrypter" pour un débutant, heureusement qu'il y a des personnes comme toi.

Au fait, si ça marche comment change t'on le statut pour le passer en résolu ? (au moins pour ce cas là, nul doute que je devrai encore solliciter de l'aide)

Mille mercis

Avec ma plus sincère reconnaissance

Bonne soirée.


BOGI 35
0