Comment s'assurer qu'on a qu'une feuille de sélectionnée ?
Résolu/Fermé
Bartez_Cool
Messages postés
15
Date d'inscription
lundi 31 mai 2004
Statut
Membre
Dernière intervention
13 mars 2017
-
Modifié par Bartez_Cool le 22/12/2016 à 15:29
Bartez_Cool Messages postés 15 Date d'inscription lundi 31 mai 2004 Statut Membre Dernière intervention 13 mars 2017 - 27 déc. 2016 à 12:50
Bartez_Cool Messages postés 15 Date d'inscription lundi 31 mai 2004 Statut Membre Dernière intervention 13 mars 2017 - 27 déc. 2016 à 12:50
A voir également:
- Comment s'assurer qu'on a qu'une feuille de sélectionnée ?
- Comment supprimer une feuille sur word - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Comment imprimer en a5 sur une feuille a4 - Guide
- Samia, kevin et jason ont gardé la trace de leurs ventes quotidiennes du mois de juillet 2016. dans la feuille bilan, il manque les résultats de jason. insérez une colonne entre samia et kevin et reportez-y les résultats de jason. quel mot secret apparait en f2 ? - Forum LibreOffice / OpenOffice
- Feuille de style word - Guide
2 réponses
Utilisateur anonyme
Modifié par albkan le 22/12/2016 à 15:38
Modifié par albkan le 22/12/2016 à 15:38
Bonjour Bartez_Cool,
Je te propose ce code VBA :
Ton ActiveSheet.Select est inutile : la feuille active est déjà sélectionnée.
Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».
Cordialement. :)
Je te propose ce code VBA :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) ' si le classeur est protégé, If ThisWorkbook.ProtectStructure = True Then ' s'assurer de n'avoir qu'une feuille de sélectionnée If ActiveWindow.SelectedSheets.Count = 1 Then ' mets ici ton code, qui sera exécuté pour une seule feuille End If End If End Sub
Ton ActiveSheet.Select est inutile : la feuille active est déjà sélectionnée.
Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».
Cordialement. :)
Bartez_Cool
Messages postés
15
Date d'inscription
lundi 31 mai 2004
Statut
Membre
Dernière intervention
13 mars 2017
27 déc. 2016 à 12:50
27 déc. 2016 à 12:50
Voici le code proposé par Shakki que j'ai modifié pour l'adapter à mes besoins.
Même si ce n'est pas très propre comme programmation, ça fonctionne comme je le souhaitais à savoir que la donnée saisie par l'utilisateur est inscrite uniquement sur la feuille active. Les autres feuilles sélectionnées ne sont plus impactées et cela reste transparent pour l'utilisateur.
Encore merci à Shakki pour son aide et Bonnes fêtes de fin d'année à tous !
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim SheetActif As String
Dim CelActive As Variant
'désactivez les événements :
Application.EnableEvents = False
If ActiveWindow.SelectedSheets.Count > 1 Then
'Récupérer le nom de la feuille affichée
SheetActif = Sh.Name
'Récupérer le contenu de la cellule modifiée
CelActive = Target.Value
'Annuler la dernière opération lancée depuis l'interface utilisateur
Application.Undo
'Désélectionner toutes les feuilles sauf la feuille active
Sheets(SheetActif).Select
ActiveCell.Value = CelActive
End If
'Réactivez les événements :
Application.EnableEvents = True
End Sub
Même si ce n'est pas très propre comme programmation, ça fonctionne comme je le souhaitais à savoir que la donnée saisie par l'utilisateur est inscrite uniquement sur la feuille active. Les autres feuilles sélectionnées ne sont plus impactées et cela reste transparent pour l'utilisateur.
Encore merci à Shakki pour son aide et Bonnes fêtes de fin d'année à tous !
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim SheetActif As String
Dim CelActive As Variant
'désactivez les événements :
Application.EnableEvents = False
If ActiveWindow.SelectedSheets.Count > 1 Then
'Récupérer le nom de la feuille affichée
SheetActif = Sh.Name
'Récupérer le contenu de la cellule modifiée
CelActive = Target.Value
'Annuler la dernière opération lancée depuis l'interface utilisateur
Application.Undo
'Désélectionner toutes les feuilles sauf la feuille active
Sheets(SheetActif).Select
ActiveCell.Value = CelActive
End If
'Réactivez les événements :
Application.EnableEvents = True
End Sub
22 déc. 2016 à 16:20
En fait, si je ne change pas de cellule, cet évènement ne se déclenche pas, et dans ce cas je peux saisir une valeur dans la cellule active et cette même valeur sera inscrite aussi sur toutes les feuilles sélectionnées, et c'est justement ce que je cherche à éviter.
j'aimerais trouver quelque chose à mettre dans Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) pour que Sh soit unique et pas une collection de feuilles, mais je ne trouve pas.
J'ai essayé de redéfinir Sh avec
set Sh = activesheet, mais ça ne fonctionne pas :-(
si tu as une autre idée, je suis preneur ;-)
22 déc. 2016 à 19:23
Pour un classeur de 10 feuilles vides, sélection manuelle des feuilles 3 à 7
=> 5 feuilles sélectionnées (groupe de travail).
Worksheets("Feuil1").Select : sélection d'une feuille en dehors de la sélection
=> cette feuille est sélectionnée (feuille 1), et les autres désélectionnées.
Worksheets("Feuil5").Select : sélection d'une feuille au sein de la sélection
=> cette feuille est sélectionnée (feuille 5), et les autres désélectionnées.
Donc dans les 2 cas, on est sur une seule feuille, et la feuille sélectionnée
est la feuille active.
23 déc. 2016 à 12:22
Signe qu'en plus de n'être pas doué pour la programmation, je ne le suis pas non plus pour me faire comprendre :-)
Voici les 2 procédures évènementielles que j'utilise et qui me vont très bien tant que l'utilisateur ne sélectionne pas 2 feuilles avant de saisir une valeur.
Si une fois les 2 feuilles sélectionnées, il modifie la cellule active avant de saisir une valeur, la commande "SH.select" dans Workbook_SheetSelectionChange désélectionne l'ensemble des feuilles sélectionnées pour n'en garder qu'une et la saisie ne s'effectue alors par la suite que sur une feuille sélectionnée.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'si le classeur est Protégé,
If ThisWorkbook.ProtectStructure = True Then
's'assurer de n'avoir qu'une feuille de sélectionnée
Set Sh = ActiveSheet
Sh.Select
'Vide le Presse-papier
Application.CutCopyMode = False 'Clear clipboard
End If
End Sub
Par contre : Si l'utilisateur se positionne directement sur la cellule qu'il souhaite modifier
puis qu'il sélectionne x feuilles supplémentaires, et qu'ensuite il saisisse une valeur dans la cellule active. La saisie se reporte sur chacune des autres feuilles sélectionnées sans que j'arrive à empêcher l'évènement de se produire.
Peut-être que je n'utilise pas le bon évènement pour insérer mon code, ou pas le bon code.
Quand je trace le code, une fois la procédure liée à l'évènement Workbook_SheetChange exécuté, l'évènement se reproduit autant de fois qu'il y avait de feuilles sélectionnées. Sh changeant bien sûr de nom à chaque fois.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim MoisdeDépart As Date
'Tester si le Classeur est Protégé
If ThisWorkbook.ProtectStructure = True Then
' 's'assurer de n'avoir qu'une feuille de sélectionnée
' Set Sh = ActiveSheet
' Sh.Select
'Vide le Presse-papier
Application.CutCopyMode = False
End If
'test si le changement est intervenu sur une des 13 premières feuilles du classeur
'dans la colonne 2 (Menus) ou la colonne 153 (Catégories)
If Target.Column = 2 Or Target.Column = 153 And Sh.Index < 14 Then
'copier la nouvelle valeur de la cellule modifiée
Target.Copy
'Boucler sur tous les mois suivant
For I = Sh.Index To 13
'Pour Inscrire la valeur sur les mois suivants
Worksheets(I).Range(Target.Address).PasteSpecial Paste:=xlPasteValues
Next I
'vider le contenu du presse papier
Application.CutCopyMode = False
End If
End Sub
Modifié par albkan le 23/12/2016 à 23:45
Si tu veux empêcher la sélection de plusieurs feuilles, essaye ce
qui est dans ce message #5228061 de Frédéric Sigonneau.
Je rappelle que plusieurs feuilles = un groupe de travail.
Note bien que c'est à faire dans ThisWorkbook.
J'espère que ça marchera. À te lire. :)
24 déc. 2016 à 18:43
hé bien non, ça ne fonctionne pas. c'est ce que j'explique plus haut à savoir que si on ne change pas de cellule une fois qu'on a sélectionnées plusieurs feuilles, l’événement Workbook_SheetSelectionChange ne se produit pas car il ne se produit que lorsqu'on change de cellule.
Je pense que ce ne doit pas être possible.
Merci quand même pour ton aide et ton temps passé sur mon problème et je te souhaite de passer de bonnes fêtes de fin d'année.
@+