Autres Navigation entre onglet

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Panda79360

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur le forum,

J'ai un fichier excel pour lequel j'ai plusieurs onglets dont certains masqués,

je souhaiterai accéder à l'onglet 2 via un bouton commande seulement si les conditions requises sont complétées sur l'onglet 1.

Sub essai2()
If Sheets("Feuil1").Range("D2") = "" Then
MsgBox "La Cellule D2 n'est pas saisie"
Exit Sub
Else
End If
If Sheets("Feuil1").Range("H2") = "" Then
MsgBox "La Cellule H2 n'est pas saisie"
Exit Sub
Else
End If
Worksheet.Visible.Next.Select 'Feuille suivante
End Sub


Seulement si l'onglet suivant est masqué ca ne fonctionne pas 🙁 Comment faire pour passer à l'onglet suivant non masqué ?
De plus, est ce qu'il est possible de bloquer la navigation libre entre onglet ? C'est à dire ne pouvoir accéder à l'onglet suivant seulement via le bouton et non en cliquant simplement dessus ?

Merci pour votre aide



 
Solution
Pour bloquer la navigation entre les onglets placez cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.EnableEvents = False
Sh.Activate
Application.EnableEvents = True
End Sub
Et pour la macro que vous recherchez utilisez :
VB:
Sub Suivante()
If ActiveSheet.Range("D2") = "" Then MsgBox "La cellule D2 n'est pas saisie": Exit Sub
If ActiveSheet.Range("H2") = "" Then MsgBox "La cellule H2 n'est pas saisie": Exit Sub
Dim i
For i = ActiveSheet.Index + 1 To Sheets.Count
    If Sheets(i).Visible = xlSheetVisible Then
        Application.EnableEvents = False
        Sheets(i).Activate
        Application.EnableEvents = True
        Exit For
    End If
Next
End Sub
Si vous voulez...
Pour bloquer la navigation entre les onglets placez cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.EnableEvents = False
Sh.Activate
Application.EnableEvents = True
End Sub
Et pour la macro que vous recherchez utilisez :
VB:
Sub Suivante()
If ActiveSheet.Range("D2") = "" Then MsgBox "La cellule D2 n'est pas saisie": Exit Sub
If ActiveSheet.Range("H2") = "" Then MsgBox "La cellule H2 n'est pas saisie": Exit Sub
Dim i
For i = ActiveSheet.Index + 1 To Sheets.Count
    If Sheets(i).Visible = xlSheetVisible Then
        Application.EnableEvents = False
        Sheets(i).Activate
        Application.EnableEvents = True
        Exit For
    End If
Next
End Sub
Si vous voulez revenir en arrière :
VB:
Sub Precedente()
If ActiveSheet.Range("D2") = "" Then MsgBox "La cellule D2 n'est pas saisie": Exit Sub
If ActiveSheet.Range("H2") = "" Then MsgBox "La cellule H2 n'est pas saisie": Exit Sub
Dim i
For i = ActiveSheet.Index - 1 To 1 Step -1
    If Sheets(i).Visible = xlSheetVisible Then
        Application.EnableEvents = False
        Sheets(i).Activate
        Application.EnableEvents = True
        Exit For
    End If
Next
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
130
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
252
Retour