Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Navigation entre onglet

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...

job75

XLDnaute Barbatruc
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

  • Classeur1.xlsm
    18.8 KB · Affichages: 4
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…