XL 2019 Renseignements obligatoires sous condition d'une cellule pour changer d'onglet

hemardjean

XLDnaute Occasionnel
Bonjour le forum

Une nouvelle fois j'aurais besoin de vos connaissances.
Dans le cadre de mon travail , actuellement nous partageons un même document sur un réseau privé
.
Ce document n'est pas toujours rempli correctement par les collègues et donc Je cherche à bloquer le passage dans un nouvel onglet si la cellule C3 n'est pas rempli correctement.

Je m'explique, dans l'onglet que j'ai nommé "mis à jour" se trouve en cellule C3 une date que je voudrais que les personnes renseignent avant , et qu'il ne puisse pas cliquez sur les onglets suivant sans que la date ne soit renseigné.

Vous remerciant par avance de votre aide .

Bien cordialement
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Hemardjean,
Une solution possible en PJ avec la macro :
VB:
Sub Verif()
    If Sheets("mis à jour").[C3] = "" Then
        Sheets("mis à jour").Select
        [C3].Select
        MsgBox "La cellule C3 doit être remplie"
    End If
End Sub
et dans chaque feuille hormis "mis à jour" :
Code:
Sub Worksheet_Activate()
    Verif
End Sub
 

Pièces jointes

  • hemardjean.xlsm
    17.2 KB · Affichages: 7

fanch55

XLDnaute Barbatruc
Bonjour à tous,
autre solution à mettre dans le module ThisWorkBook :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If ActiveSheet.Name = "mis à jour" Then
        If Not IsDate([C3]) Then
            'bla bla bla
            Cancel = True
        End If
    End If
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If Sh.Name = "mis à jour" Then
       If Not IsDate([C3]) Then
            'bla bla bla
            Sh.Activate
            [C3].Activate
        End If
    End If
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
A mettre dans la feuille Mis à jour :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [C3]) Is Nothing Then
        If IsDate([C3]) Then [A1].Select
    End If
Fin:
End Sub
Quand on clique sur C3, alors si C3 possède une date on sélectionne A1 ( ou autre ), donc on ne peut plus changer la date présente en C3.
 

hemardjean

XLDnaute Occasionnel
j'ai mal exprimé ce que je voulais. Je recommence.
exemple: La personne va renseigner la cellule le lundi en y opposant la date , le lendemain lorsqu'elle va faire sa mise à jour elle devra obligatoirement remplir cette nouvelle date avant de renseigner les onglets.
Dans ta première version cela fonctionnait bien il faudrait juste la modifier , est-ce possible.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
@Fanch, exact, mais quand on parle de C3, je suppose que la date n's t pas fusionnée.
Un essai en PJ avec possibilité de remettre la date en automatique avec dans la feuille "mise à jour" en reprenant la macro Worksheet_Deactivate de Fanch, plus simple :
VB:
Sub Worksheet_Deactivate()
    If Sheets("mis à jour").[C3] <> Date Then
        Sheets("mis à jour").Activate
        CouleurCell = [C3].Interior.Color
        CouleurFont = [C3].Font.Color
        [C3].Interior.Color = vbRed
        [C3].Font.Color = vbWhite
        If MsgBox("La date n'a pas été actualisée" & Chr(10) & "Dois je la remettre à jour ?", vbYesNo + 16, "Probleme") = vbYes Then
            [C3] = Date
        End If
        [C3].Interior.Color = CouleurCell
        [C3].Font.Color = CouleurFont
    End If
End Sub
 

Pièces jointes

  • hemardjean2.xlsm
    16.9 KB · Affichages: 10

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote