XL 2013 Saisie de champs obligatoire

Slowhands

XLDnaute Nouveau
Bonjour,
Voila je dois faire une fichier que des gens doivent remplir. Je voudrais rendre certains champs obligatoire. Il y a plusieurs cellules (grisées) qu'ils doivent remplir. Je voudrais aussi que tant qu'ils n'ont pas remplis tous les champs obligatoires ils ne pourront pas enregistrer le fichier.

De plus est-ce que si je l'enregistre en version modèle je pourrais éviter qu'ils aient à cocher la case "Activer le contenu"? Car je penses que certains ne le feront pas et donc mon fichier ne fonctionnera pas.
 

Pièces jointes

  • DA.xlsx
    12.6 KB · Affichages: 56
  • DA.xlsx
    12.6 KB · Affichages: 63

Lone-wolf

XLDnaute Barbatruc
Re : Saisie de champs obligatoire

Bonjour Slowhands et bienvenue sur XLD :)

ton fichier en retour. Regarde si ça peux convenir. Et arrête avec cette manie de fusionner les cellules, ça ne sert à rien, regarde le fichier, il n'y a pas assez de place? Et c'est très mauvais avec des macros.
 

Pièces jointes

  • DA.xlsm
    17.9 KB · Affichages: 62

jp14

XLDnaute Barbatruc
Re : Saisie de champs obligatoire

Bonjour

Ci dessous un code à insérer dans "ThisWorkbook"

Code:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Nb As Integer
 Nb = WorksheetFunction.CountA(Worksheets("Feuil1").Range("A4,A6,A8,C4,E4,E6,G4,G6,J4,J6,L4"))
   If WorksheetFunction.CountA(Worksheets("Feuil1").Range("A4,A6,A8,C4,E4,E6,G4,G6,J4,J6,L4")) < 11 Then
      MsgBox "Vous devez remplir toutes les zones grises " & vbCrLf & _
      "Il manque " & 11 - Nb & " donné(es)"
      Cancel = True
   End If
End Sub

Pour enregistrer le fichier il faut remplir toute les zones ou créer une porte cachée.
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Nb As Integer
If Sheets("Feuil1").Range("A40").Value = "toto" Then
    Sheets("Feuil1").Range("A40").Value = ""
Else
 Nb = WorksheetFunction.CountA(Worksheets("Feuil1").Range("A4,A6,A8,C4,E4,E6,G4,G6,J4,J6,L4"))
   If WorksheetFunction.CountA(Worksheets("Feuil1").Range("A4,A6,A8,C4,E4,E6,G4,G6,J4,J6,L4")) < 11 Then
      MsgBox "Vous devez remplir toutes les zones grises " & vbCrLf & _
      "Il manque " & 11 - Nb & " données"
      Cancel = True
   End If
End If
End Sub

Bonne journée

JP
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Saisie de champs obligatoire

Salut

J’en étais au même point JP ;)
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If Application.CountA([plage]) < 11 Then _
   MsgBox "il manque des données...", vbCritical, "Pas pour l'instant" : Cancel = 1
End Sub

mais je ne suis pas complètement satisfait.
Il suffit de se mettre en Mode Création* et la macro ne sert à rien.

*ce que j’ai l’habitude de faire pour désactiver provisoirement les évènements, lors de tests.
 

Pièces jointes

  • Save Si....xlsm
    148.1 KB · Affichages: 43

jp14

XLDnaute Barbatruc
Re : Saisie de champs obligatoire

Bonjour Si..., le forum

Il est facile de contourner cette protection, il suffit de mettre un espace dans les zones.
Il faudrait vérifier la conformité de chaque zone, avec Isdate pour les dates, si le numéro de téléphone contient bien le nombre de chiffres, si .......

De plus doit-on gérer l'option fermer le fichier ?

Un début de code, pas facile à tester.
Code:
Option Explicit
Public OKsave As Boolean, Ok As Boolean
'Sub Workbook_BeforeClose(Cancel As Boolean)
'If MessageOk = True Then Exit Sub
'If OKsave = False Then Cancel = True ' empeche la fermeture
'If OKsave = True Then Saved = True
'End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Sheets("Feuil1").Range("A40").Value = "toto" Then
    OKsave = True
    Sheets("Feuil1").Range("A40") = ""
Else
    If MessageOk = True Then Exit Sub
End If
If OKsave = False Then Cancel = True
If OKsave = True Then Saved = False
End Sub

Private Function MessageOk() As Boolean
With Sheets("Feuil1")
    If .Range("A4").Value = "" Then
        TextMessage "Demandeur"
        .Range("A4").Activate
        MessageOk = True
        Exit Function
    ElseIf .Range("A6").Value = "" Then
        TextMessage "Telephone"
        .Range("A6").Activate
        MessageOk = True
        Exit Function
   ElseIf .Range("A8").Value = "" Then
        TextMessage "Date"
        .Range("A8").Activate
        MessageOk = True
        Exit Function
   ElseIf Not IsDate(.Range("A8").Value) Then
        TextMessage "Erreur sur la date"
        .Range("A8").Activate
        MessageOk = True
        Exit Function
    End If
    MessageOk = True
End With
End Function

Private Sub TextMessage(Data1 As String)
Call MsgBox("Vous devez remplir la zone : " & Data1, vbCritical, "Données absentes")

End Sub

Bonne journée

JP
 

DoubleZero

XLDnaute Barbatruc
Re : Saisie de champs obligatoire

Bonjour à toutes et à tous,

Bienvenue sur XLD, Slowhands.

Une autre suggestion en pièce jointe (loin d'être Si:D:D:D parfaite).

A bientôt :)
 

Pièces jointes

  • 00 - Slowhands - Saisie obligatoire.xlsm
    38.7 KB · Affichages: 46

Slowhands

XLDnaute Nouveau
Re : Saisie de champs obligatoire

Finalement j'ai opté pour la solution de JP14. Mais merci à tous.

Petite question supplémentaire. Dans mon fichier je voudrais qu'ils renseignent également certaines colonnes. En gros J'ai les colonnes de "code affaire", "quantité", "désignation" et "délai" à renseigner. Comme je ne sais pas combien de lignes ils seraient susceptibles de remplir je voudrais intégrer une formule qui dit: Si vous renseigner la colonne "Fournisseur" vous devez compléter également les autres colonnes associées.

Merci d'avance
 

Pièces jointes

  • DA.xlsx
    12.9 KB · Affichages: 34
  • DA.xlsx
    12.9 KB · Affichages: 40
Dernière modification par un modérateur:

jp14

XLDnaute Barbatruc
Re : Saisie de champs obligatoire

Bonjour

Ci joint un fichier avec une approche totalement différente.

Le Passage de "fournisseur" a "ref fabriquant" ouvre un userform avec des combobox qui peuvent contenir des données éxistantes.

Un message s'affiche si la zone n'est pas remplie quand on enregistre
Les données sont supprimées si l'ensemble n'est pas rempli.

A tester et à modifier.

JP
 

Pièces jointes

  • Copie de DA10.xlsm
    35.5 KB · Affichages: 50
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 117
dernier inscrit
augustin.morille