Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Activation avec cellule

5 réponses
Avatar
Denys
Bonjour =E0 tous,

Je fais une petite application pour quelques d=E9partements=20
qui comptent de 5 =E0 15 employ=E9s. Comme chaque employ=E9 a=20
une feuille Excel correspondant =E0 son nom, certains=20
d=E9partements auront des feuilles en trop.

Le nom des employ=E9s est inscrit en colonne A sur la=20
feuille nomm=E9e R=E9capitulation.

Ma question est la suivante: serait-il possible que je=20
cr=E9e =E0 l'avance les feuilles de travail et que celles-ci=20
restent cach=E9es jusqu'=E0 ce que le superviseur entre le nom=20
d'un employ=E9 dans une cellule de la colonne A de la=20
feuille r=E9capitulation?

D=E9j=E0 que cette feuille prend le nom de l'employ=E9 en=20
l'activant, je voudrais cependant qu'elle reste cach=E9e=20
tant qu'il n'y a pas un nom inscrit dans la cellule...

Auriez-vous une petite id=E9e???

Merci

Denys

5 réponses

Avatar
Nicolas B.
Salut Denys,

Le superviseur devra exécuter cette macro après avoir entré en A2:An les
noms des nouvelles feuilles à afficher :

Sub Actualiser()
On Error Resume Next
With Sheets("Récapitulation")
For i = 2 To .Range("A1").End(xlDown).Row
Sheets(.Cells(i, 1).Value).Visible = True
Next
End With
End Sub

Il est inutile de repréciser en col A les utilisateurs dont la feuille est
déjà affichée. S'il ne faut afficher que les utilisateurs qui sont présents
dans la feuille Récapitulation, utilise plutôt cette macro :

Sub Actualiser2()
For Each sh In Sheets
If sh.Name <> "Récapitulation" Then sh.Visible = False
Next
On Error Resume Next
With Sheets("Récapitulation")
For i = 2 To .Range("A1").End(xlDown).Row
Sheets(.Cells(i, 1).Value).Visible = True
Next
End With
End Sub


A+
--
Nicolas B.


Bonjour à tous,

Je fais une petite application pour quelques départements
qui comptent de 5 à 15 employés. Comme chaque employé a
une feuille Excel correspondant à son nom, certains
départements auront des feuilles en trop.

Le nom des employés est inscrit en colonne A sur la
feuille nommée Récapitulation.

Ma question est la suivante: serait-il possible que je
crée à l'avance les feuilles de travail et que celles-ci
restent cachées jusqu'à ce que le superviseur entre le nom
d'un employé dans une cellule de la colonne A de la
feuille récapitulation?

Déjà que cette feuille prend le nom de l'employé en
l'activant, je voudrais cependant qu'elle reste cachée
tant qu'il n'y a pas un nom inscrit dans la cellule...

Auriez-vous une petite idée???

Merci

Denys


Avatar
Rai
"Denys" a écrit dans le message de news:185be01c41b
0b$e8bdf590$
Bonjour à tous,
[.....]

Le nom des employés est inscrit en colonne A sur la
feuille nommée Récapitulation.

Ma question est la suivante: serait-il possible que je
crée à l'avance les feuilles de travail et que celles-ci
restent cachées jusqu'à ce que le superviseur entre le nom
d'un employé dans une cellule de la colonne A de la
feuille récapitulation?

Déjà que cette feuille prend le nom de l'employé en
l'activant, je voudrais cependant qu'elle reste cachée
tant qu'il n'y a pas un nom inscrit dans la cellule...

Auriez-vous une petite idée???

Merci


Bonjour,

Si on considère que tu appelles chaque feuille selon le nom de l'employé.
Si on considère que chacune de ces feuilles a la propriété "visible" = "xlsheethidden" ou "xlsheetveryhidden"
et si on considère que l'on saisit le nom de l'employé en A1 :

Placer le code ci-dessous dans la premirèe feuille, via l'éditeur VBA

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
For Each s In Sheets
If s.Name = Target.Value Then
s.Visible = xlSheetVisible
s.Select
End If
Next s
End If
End Sub


Après, il te restera à gérer le masquage des feuilles à la fermeture du classeur ...
par exemple en insérant ce code dans le classeur :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
For s = 2 To Sheets.Count
If Sheets(s).Visible = xlSheetVisible Then
Sheets(s).Visible = xlSheetVeryHidden
End If
Next s
ThisWorkbook.Save
End Sub


Pour bien faire, tu devrais insérer une liste déroulante sur ta première feuille, celle-ci se basant sur la liste des employés.


--
Cordialement,

Rai
Remplacer point par la ponctuation appropriée pour répondre...

Avatar
Denys
Bonjour Rai et Nicolas,

Merci beaucoup à vous deux.... Vous m'êtes d'un grand
secours...Mon application sera plus facile à gérer ainsi...

Bonne journée

Denys
Avatar
michdenis
Bonjour Denys,


J'ai supposé que tes données (nom des feuilles) étaient dans la colonne A1:A15 de la feuille récapitulation.
Avec ces procédures, ton classeur contiendra seulement des feuilles listées en colonne A de ta feuille. Si tu effaces le
nom d'une feuille, la feuille sera supprimé et si tu ajoutes un nouveau nom, la feuille sera ajoutée.

Si tu veux être certain qu'un usager n'utilise pas 2 fois le même nom, utilise un critère de validation directement dans
ta plage de cellules.

Si tes feuilles doivent être visible ou non... tu devras ajouter une ligne de code...


'copie ceci dans un module Standard

'déclaration d'une variable Public dans le haut du module
Public Tblo()
'------------------------------
Sub ListeDesFeuilles()

Dim A As Integer
ReDim Tblo(1 To Sheets.Count)

For Each sh In Worksheets
If sh.Name <> "Récapitulation" Then
A = A + 1
Tblo(A) = sh.Name
End If
Next

End Sub
'------------------------------

'Pour initialer la variable public dès l'ouverture du fichier :
'-------------------
Private Sub Workbook_Open()
ListeDesFeuilles
End Sub
'-------------------



Dans la feuille module où l'action se déroule, copie ce qui suit :

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rg As Range, A As Integer, ActiveFeuille As String
ActiveFeuille = ActiveSheet.Name

Set Rg = Range("A1:A15").SpecialCells(xlCellTypeConstants, xlTextValues)
If Intersect(Target, Rg) Is Nothing Then Exit Sub

Application.ScreenUpdating = False
On Error Resume Next
For A = 1 To UBound(Tblo)
If IsError(Application.Match(Tblo(A), Rg, 0)) Then
Application.DisplayAlerts = False
Worksheets(Tblo(A)).Delete
Err = 0
Application.DisplayAlerts = True
End If
Next

If Not Rg Is Nothing Then
For Each c In Target
If c.Value <> "" Then
Set sh = Worksheets(c.Value)
If Err <> "" Then
Worksheets.Add after:=Sheets(Worksheets.Count)
ActiveSheet.Name = c.Value
Err = 0
End If
End If
Next
End If
ListeDesFeuilles
Sheets(ActiveFeuille).Select
Set Rg = Nothing
End Sub
'------------------------------


'copie ceci dans un module Standard

'déclaration d'une variable Public dans le haut du module
Public Tblo()
'------------------------------
Sub ListeDesFeuilles()

Dim A As Integer
ReDim Tblo(1 To Sheets.Count)

For Each sh In Worksheets
If sh.Name <> "Récapitulation" Then
A = A + 1
Tblo(A) = sh.Name
End If
Next

End Sub
'------------------------------


Salutations!



"Denys" a écrit dans le message de news:185be01c41b0b$e8bdf590$
Bonjour à tous,

Je fais une petite application pour quelques départements
qui comptent de 5 à 15 employés. Comme chaque employé a
une feuille Excel correspondant à son nom, certains
départements auront des feuilles en trop.

Le nom des employés est inscrit en colonne A sur la
feuille nommée Récapitulation.

Ma question est la suivante: serait-il possible que je
crée à l'avance les feuilles de travail et que celles-ci
restent cachées jusqu'à ce que le superviseur entre le nom
d'un employé dans une cellule de la colonne A de la
feuille récapitulation?

Déjà que cette feuille prend le nom de l'employé en
l'activant, je voudrais cependant qu'elle reste cachée
tant qu'il n'y a pas un nom inscrit dans la cellule...

Auriez-vous une petite idée???

Merci

Denys
Avatar
Denys
Bonjour Denis,

Ma parole!!! Tu as fais tout le travail !!!! Je te
remercie énormément pour tout ce temps consacré à mes
demandes...

Bonne journée

Denys


-----Original Message-----
Bonjour Denys,


J'ai supposé que tes données (nom des feuilles) étaient
dans la colonne A1:A15 de la feuille récapitulation.

Avec ces procédures, ton classeur contiendra seulement
des feuilles listées en colonne A de ta feuille. Si tu

effaces le
nom d'une feuille, la feuille sera supprimé et si tu
ajoutes un nouveau nom, la feuille sera ajoutée.


Si tu veux être certain qu'un usager n'utilise pas 2 fois
le même nom, utilise un critère de validation directement

dans
ta plage de cellules.

Si tes feuilles doivent être visible ou non... tu devras
ajouter une ligne de code...



'copie ceci dans un module Standard

'déclaration d'une variable Public dans le haut du module
Public Tblo()
'------------------------------
Sub ListeDesFeuilles()

Dim A As Integer
ReDim Tblo(1 To Sheets.Count)

For Each sh In Worksheets
If sh.Name <> "Récapitulation" Then
A = A + 1
Tblo(A) = sh.Name
End If
Next

End Sub
'------------------------------

'Pour initialer la variable public dès l'ouverture du
fichier :

'-------------------
Private Sub Workbook_Open()
ListeDesFeuilles
End Sub
'-------------------



Dans la feuille module où l'action se déroule, copie ce
qui suit :


'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rg As Range, A As Integer, ActiveFeuille As String
ActiveFeuille = ActiveSheet.Name

Set Rg = Range("A1:A15").SpecialCells
(xlCellTypeConstants, xlTextValues)

If Intersect(Target, Rg) Is Nothing Then Exit Sub

Application.ScreenUpdating = False
On Error Resume Next
For A = 1 To UBound(Tblo)
If IsError(Application.Match(Tblo(A), Rg, 0)) Then
Application.DisplayAlerts = False
Worksheets(Tblo(A)).Delete
Err = 0
Application.DisplayAlerts = True
End If
Next

If Not Rg Is Nothing Then
For Each c In Target
If c.Value <> "" Then
Set sh = Worksheets(c.Value)
If Err <> "" Then
Worksheets.Add after:=Sheets(Worksheets.Count)
ActiveSheet.Name = c.Value
Err = 0
End If
End If
Next
End If
ListeDesFeuilles
Sheets(ActiveFeuille).Select
Set Rg = Nothing
End Sub
'------------------------------


'copie ceci dans un module Standard

'déclaration d'une variable Public dans le haut du module
Public Tblo()
'------------------------------
Sub ListeDesFeuilles()

Dim A As Integer
ReDim Tblo(1 To Sheets.Count)

For Each sh In Worksheets
If sh.Name <> "Récapitulation" Then
A = A + 1
Tblo(A) = sh.Name
End If
Next

End Sub
'------------------------------


Salutations!



"Denys" a écrit
dans le message de news:185be01c41b0b$e8bdf590

$
Bonjour à tous,

Je fais une petite application pour quelques départements
qui comptent de 5 à 15 employés. Comme chaque employé a
une feuille Excel correspondant à son nom, certains
départements auront des feuilles en trop.

Le nom des employés est inscrit en colonne A sur la
feuille nommée Récapitulation.

Ma question est la suivante: serait-il possible que je
crée à l'avance les feuilles de travail et que celles-ci
restent cachées jusqu'à ce que le superviseur entre le nom
d'un employé dans une cellule de la colonne A de la
feuille récapitulation?

Déjà que cette feuille prend le nom de l'employé en
l'activant, je voudrais cependant qu'elle reste cachée
tant qu'il n'y a pas un nom inscrit dans la cellule...

Auriez-vous une petite idée???

Merci

Denys


.