XL 2016 Possible de bloquer l'enregistrement du doc si il n'y a pas de données ?

sak

XLDnaute Nouveau
Bonjour,
En fait j'aimerais savoir s'il serait possible de créer une macro qui empêcherait l'utilisateur d'enregistrer le doc, si un des colonnes de la feuille n'est pas rempli si c'est vide on ne peut pas enregistrer le doc
le fichier est cijoint
Merci d'avance
 

Pièces jointes

  • Followup.xlsx
    10.1 KB · Affichages: 10

danielco

XLDnaute Accro
Bonjour,

J'ai mis cette macro dans le module ThisWorkbook :

VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim Teste As Boolean, C As Range
  With Sheets("Tabelle1")
    For Each C In .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
      If Application.CountA(C.Resize(, 12)) < 12 Then
        Teste = True
        Exit For
      End If
    Next C
    If Teste = True Then Cancel = True
  End With
End Sub

Cependant, si l'utilisateur n'active pas les macros rien ne l'empêche de le faire.

Daniel
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avec la même mise en garde que @danielco (que je salue au passage) et une mfc des cellules vides
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With ThisWorkbook.Sheets("Tabelle1").Range("A2:L6")
    Cancel = Application.CountA(.Cells) < .Cells.Count
    If Cancel Then
        MsgBox "Enregistrement interrompu: tout le tableau doit être rempli!", vbExclamation, "Enregistrement"
    End If
End With
End Sub

Bon après-midi
 

Pièces jointes

  • Followup.xlsm
    15.8 KB · Affichages: 4

danielco

XLDnaute Accro
Le principe est de masquer la feuille Tabelle1 et d'afficher une feuille vierge si les macros ne sont pas activées. C'est cependant loin d'être l'arme absolue :

VB:
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Saved = False Then Cancel = True
  Sheets("Feuil1").Visible = xlSheetVisible
  Sheets("Tabelle1").Visible = xlSheetVeryHidden
  ThisWorkbook.Save
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim Teste As Boolean, C As Range
  With Sheets("Tabelle1")
    For Each C In .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
      If Application.CountA(C.Resize(, 12)) < 12 Then
        Teste = True
        Exit For
      End If
    Next C
    If Teste = True Then Cancel = True
  End With
End Sub

Private Sub Workbook_Open()
  Sheets("Tabelle1").Visible = xlSheetVisible
  Sheets("Feuil1").Visible = xlSheetVeryHidden
End Sub
 

Pièces jointes

  • sak Followup.xlsm
    18.2 KB · Affichages: 7

sak

XLDnaute Nouveau
Bonjour Merci @danielco et @Roblochon pour le feedback,

le code se limite juste entre A2:L6, mon followup sera a jour et modifiable, mes collegues peuvent ajoutes des lignes et je veux que la fonctions pointe sur la ligne active,
je sais pas si j'ai bien expliqué ma demande,
excuse mon francais je parle que anglais et la j'essaie de parler francais
 

Staple1600

XLDnaute Barbatruc
Bonjour le forum, le fil

Une autre piste, sans macros, sans MFC
Laisser l'utilisateur enregistrer le classeur avec une ou des colonnes vides.
Quand il en aura marre de devoir recommencer son boulot et/ou de se faire engue-ler par son boss, il devrait finir par vérifier si les données ont bien été saisies avant d'enregistrer et fermer son classeur.
;)
 

Discussions similaires

Statistiques des forums

Discussions
312 180
Messages
2 085 993
Membres
103 081
dernier inscrit
jeromeolivier.raymond@wat