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

Statistiques des forums

Discussions
312 210
Messages
2 086 281
Membres
103 170
dernier inscrit
HASSEN@45