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

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.
 

patricktoulon

XLDnaute Barbatruc
re
Dnielco par vba tu peux faire certaines chose mais ca ne sera jamais garanti a 100%
par contre sans vba (macro déactivées) tu ne pourra absolument rien faire
ton boss t'a envoyé chasser le Dahu ou chercher le marteau a bomber le verre comme tu veux
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…