Userform – masquer des lignes sur une série de plages dispersées

rh.finances

XLDnaute Junior
Un grand bonjour à tous les internautes de ce super site,

N’étant pas un grand expert du langage VBA, j’ai néanmoins commencé à créer un userform pour masquer des lignes qui figurent sur des plages dispersées dans une feuille (exemple : 1:13 puis 25:35 puis 47:57…).

Cet « userform2 » est accessible depuis le bouton figurant en A1 : B2 du fichier joint.

Dans ce userform, j’ai notamment créé un « OptionButton1 » (appelé « afficher uniquement les heures prévues ») et un « OptionButton2 » (appelé « afficher uniquement les heures réalisées ») contenant chacun une macro identique pour masquer des lignes.

Toutefois, mon problème est le suivant : plutôt que de préciser chaque numéro de ligne (celles-ci peuvent bouger à l’avenir), j’ai préféré définir un nom référençant les séries de lignes concernées.

J’ai donc créé un nom « affichage_heures_prévues » et un autre nom « affichage_heures_réalisées » et j’ai mentionné les noms en question dans les codes figurant en « Optionbutton1 » et « Optionbutton2 ».

Toutefois, cela me génère une erreur d’exécution ‘13’ (je pense que la notion de nom pose problème).

Par ailleurs, outre ce problème, j’aurai bien voulu améliorer mon userform2 de la manière suivante :

Actuellement, j’ai trois choix de boutons possible. Le 1er masque tel série de lignes / le 2ème masque tel autre série de lignes / le 3ème permet de tout afficher sans masque aucun.

En fait, suivant que l’on soit dans la 1ère, la 2ème ou la 3ème situation, j’aurais bien aimé que le bouton correspondant reste activé (c’est-à-dire coché et visible) car actuellement à chaque lancement de l’userform, il propose 3 boutons vides.

Pensez qu’une telle chose soit possible ?

D’avance, merci beaucoup pour vos contributions et vos idées.

Alex
 

Pièces jointes

  • v.6 - gestionnaire planning horaire.xls
    596 KB · Affichages: 29

vgendron

XLDnaute Barbatruc
Hello
Tu n'utilises juste pas la bonne syntaxe pour masquer les zones que tu as nommées

utilise ce code pour tes boutons
VB:
Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
    Range("affichage_heures_prévues").EntireRow.Hidden = True
End If
End Sub

Private Sub OptionButton2_Click()
If OptionButton2.Value = True Then
    Range("affichage_heures_réalisées").EntireRow.Hidden = True
End If
End Sub

Private Sub OptionButton3_Click()
Cells.EntireRow.Hidden = False
End Sub

Private Sub btn_annuler_Click()
Me.Hide
End Sub
 

vgendron

XLDnaute Barbatruc
Pour que ton userform s'initialise avec le bon bouton déjà coché (bon bouton = celui de la situation actuelle, si j'ai bien compris)
ajoute juste ce code
VB:
Private Sub UserForm_Initialize()
Application.EnableEvents = False
If Range("affichage_heures_prévues").EntireRow.Hidden = True Then
    OptionButton1.Value = True
    OptionButton2.Value = False
    OptionButton3.Value = False
Else:
If Range("affichage_heures_réalisées").EntireRow.Hidden = True Then
    OptionButton1.Value = False
    OptionButton2.Value = True
    OptionButton3.Value = False
Else
    OptionButton1.Value = False
    OptionButton2.Value = False
    OptionButton3.Value = True
End If
Application.EnableEvents = True
End Sub
 

vgendron

XLDnaute Barbatruc
Dans la V7 ci jointe,
je me suis amusé à rassembler toutes tes macros en une seule..
plus besoin de passer par les zones nommées

quand tu cliques sur la recherche d'un mois en particulier, le code récupère le nom du mois, le cherche et l'affiche en haut de page

idem pour les boutons d'apercu
 

Pièces jointes

  • v.7 - gestionnaire planning horaire.xls
    567.5 KB · Affichages: 19

rh.finances

XLDnaute Junior
Bonjour Vgendron et merci infiniment pour ta réponse !

le code relatif à l'affichage correspond exactement à ce que je cherchais.

Concernant le le code relatif aux "OptionButton", c'est exactement ce que je souhaitais également. toutefois, je rencontre un tout petit problème que je n'arrive pas analyser.

Quand je clique sur "OptionButton1" ("afficher uniquement les heures prévues"), il me propose exactement l'affichage des lignes tel que référencé dans le nom défini sur Excel.
toutefois, quand je clique ensuite sur ""OptionButton2" ("afficher uniquement les heures réalisées"), il affiche des certaines lignes qui ne correspondent absolument pas au nom défini sur Excel.

En revanche, si je clique sur "OptionButton1", puis que je clique sur "OptionButton3" (afficher tout le planning") et que je clique ensuite sur "OptionButton2", là en revanche, il me propose bien l'affichage des lignes tel que référencé dans le nom défini sur Excel.

en fait, j'ai l'impression que pour passer d'un affichage de lignes prédéfinies à un autre affichage de lignes prédéfinies (bouton 1 ou bouton2), il faut impérativement que je passe, entre deux, par le bouton 3 qui lui comprend le code d'épuration "Cells.EntireRow.Hidden = False".

en gros, si j'ai cliqué sur le bouton 1 et que je veux consulté le bouton 2. il faut d'abord que je clique sur le bouton 3 pour tout afficher et que je clique sur le bouton 2 pour arriver au résultat souhaité.

si une solution à cette situation est possible, je suis fortement preneur :)
j'ai joint à cet effet le fichier actualisé avec les codes que tu m'as remis.

encore mille mercis !!!

Alex
 

Pièces jointes

  • v.6 - gestionnaire planning horaire.xls
    601.5 KB · Affichages: 23

vgendron

XLDnaute Barbatruc
comme tu l'as clairement identifié, il faut effectivement Re afficher toutes les lignes avant de cliquer d'un bouton à l'autre

plutot que cliquer sur le bouton 3 entre chaque, suffit d'ajouter la ligne de code qui correspond
VB:
Private Sub OptionButton1_Click()
ActiveSheet.Unprotect
If OptionButton1.Value = True Then
    Cells.EntireRow.Hidden = False 'tout réafficher
    Range("affichage_heures_prévues").EntireRow.Hidden = True
End If
 ActiveSheet.Protect
End Sub

Private Sub OptionButton2_Click()
ActiveSheet.Unprotect
If OptionButton2.Value = True Then
    Cells.EntireRow.Hidden = False 'tout réafficher
    Range("affichage_heures_réalisées").EntireRow.Hidden = True
End If
ActiveSheet.Unprotect
End Sub

Private Sub OptionButton3_Click()
ActiveSheet.Unprotect
Cells.EntireRow.Hidden = False
ActiveSheet.Protect
End Sub
 

Discussions similaires