XL 2016 Empêcher l'enregistrement du fichier si des cases ne sont pas remplies

Lazz

XLDnaute Junior
Bonjour à tous,

Je sais que vous êtes des génies et que vous aller pouvoir m'aider :)
Alooors j'ai plusieurs problèmes mais je vais commencer par le plus simple :
J'aimerai que lorsque je rentre une donnée dans l'une des cases bleues (exemple F7) alors je ne puisse ni enregistrer ni fermer le fichier si les colonnes bleus de cette ligne ne sont pas renseignées....

Je vous joint bien évidemment un exemple de fichier.
De plus, il faut que cela puisse fonctionner pour plusieurs onglets différents.
Pouvez vous m'aider ???

Merci beaucoup !!
 

Pièces jointes

  • Classeur1.xlsx
    639 KB · Affichages: 9

Phil69970

XLDnaute Barbatruc
Bonjour @Lazz

Oui c'est possible mais sur une colonne complète l'utilisateur va venir rapidement te voir...🤔
je ne puisse ni enregistrer
Exemple avec le contrôle sur la cellule F7 de la feuille 1
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Application.Sheets("Feuil1").Range("F7").Value = "" Then
    Cancel = True
    MsgBox "Enregistrement annulé"
End If
End Sub


Pour cela c'est impossible :
ni fermer le fichier
L'utilisateur pourra toujours fermer excel au pire avec Ctrl + Alt + Sup ==> gestionnaire de taches ==> Fin de taches
1643386943502.png

Ou bien même en débranchant la prise ...🤣 o_O

*Merci de ton retour

@Phil69970
 

Lazz

XLDnaute Junior
Bonjour @Lazz

Oui c'est possible mais sur une colonne complète l'utilisateur va venir rapidement te voir...🤔

Exemple avec le contrôle sur la cellule F7 de la feuille 1
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Application.Sheets("Feuil1").Range("F7").Value = "" Then
    Cancel = True
    MsgBox "Enregistrement annulé"
End If
End Sub
Bonjour @Phil69970 ,

Merci pour ta réponse.
Cependant, Je ne comprends pas ta macro, elle ne fait rien dans mon fichier je peux toujours enregistrer le doc si les colonnes sont vides ...
 

cp4

XLDnaute Barbatruc
Bonjour,

Je partage l'avis de @Phil69970 ;). Mais je pense que toi aussi tu t'arracheras les cheveux avec ton approche du problème (ni enregistrer, ni fermer).
Je pense qu'il serait plus indiquer de passer par un formulaire pour gérer les données minimales (colonnes) permettant l'enregistrement sur la feuille.

Bonne journée.
 

Lazz

XLDnaute Junior
Bonjour,

Je partage l'avis de @Phil69970 ;). Mais je pense que toi aussi tu t'arracheras les cheveux avec ton approche du problème (ni enregistrer, ni fermer).
Je pense qu'il serait plus indiquer de passer par un formulaire pour gérer les données minimales (colonnes) permettant l'enregistrement sur la feuille.

Bonne journée.

Bonjour @cp4
Vous avez raison ! Enfaite je veux juste rendre les cellules bleus obligatoires lorsque une donnée de la ligne est renseigné.
Exemple, si C7 est renseigné, alors E7, F7 ... doivent être renseignée.
 

Lazz

XLDnaute Junior
Public Sub Worksheet_Change(ByVal Target As Range)
Dim rng2 As Range
If Target.Column = 8 Then
If Target.Value = "oui" Then
Set rng2 = Range(Cells(Target.Row, Target.Column + 9), Cells(Target.Row, Target.Column + 9))
rng2.Activate
Do While (IsEmpty(rng2.Value))
MsgBox ("Veuillez renseigner cette cellule")
rng2.Value = InputBox("oui ou non ?")
Loop
End If

De plus j'ai déjà réussi à rendre une cellule obligatoire avec ce code.
Cependant, sur 7 colonnes obligatoires ça rend la saisie très lourde et Je voulais simplifier tout ça ...
 

Phil69970

XLDnaute Barbatruc

Lazz

XLDnaute Junior
Bonjour @Lazz , @cp4



As tu bien tout lu ? Je contrôle dans l'exemple QUE la cellule F7

Tu peux facilement rajouter le contrôle sur d'autres cellules

@Phil69970
Désolé mais quand je rentre ta macro, peut importe que je laisse la cellule F7 vide ou F7rempli je peux tout de même enregistrer le document, rien ne se passe.
As-tu le fichier qui fonctionne avec ta macro ?

De plus, est ce que t'as macro peux fonctionner pour chaque colonne pour 2000 lignes sans répéter 2000 fois le code ?

Bien à toi :)
 

cp4

XLDnaute Barbatruc
Public Sub Worksheet_Change(ByVal Target As Range)
Dim rng2 As Range
If Target.Column = 8 Then
If Target.Value = "oui" Then
Set rng2 = Range(Cells(Target.Row, Target.Column + 9), Cells(Target.Row, Target.Column + 9))
rng2.Activate
Do While (IsEmpty(rng2.Value))
MsgBox ("Veuillez renseigner cette cellule")
rng2.Value = InputBox("oui ou non ?")
Loop
End If

De plus j'ai déjà réussi à rendre une cellule obligatoire avec ce code.
Cependant, sur 7 colonnes obligatoires ça rend la saisie très lourde et Je voulais simplifier tout ça ...
Pour éditer du code, utilise la balise de code en demo Gif ci-dessous
Balise de code.gif

Un userform serait plus efficace pour gérer ton problème (enfin, c'est un avis personnel).
 

Phil69970

XLDnaute Barbatruc
Re

Un autre exemple :

Avec le contrôle de 4 cellules

Non seulement je veux contrôler plus de 2000 lignes et 10colonnes mais cela sur au moins 10 onglets différents... cela va être compliqué

Non c'est pas compliqué mais perso si je suis l'utilisateur de ton fichier tu peux être certain que jamais je ne le remplirais....je me ferais avoir seulement 1 fois.....et je fermerais le fichier en force .....

*Attention avec 2000 cellules * 10 onglets non rempli tu auras 20 000 messages je suis pas sur que cela soit viable 🤣🤣

*Merci de ton retour

@Phil69970
 

Pièces jointes

  • Cellule F7 vide V2.xlsm
    17 KB · Affichages: 5

Lazz

XLDnaute Junior
Re

Un autre exemple :

Avec le contrôle de 4 cellules



Non c'est pas compliqué mais perso si je suis l'utilisateur de ton fichier tu peux être certain que jamais je ne le remplirais....je me ferais avoir seulement 1 fois.....et je fermerais le fichier en force .....

*Attention avec 2000 cellules * 10 onglets non rempli tu auras 20 000 messages je suis pas sur que cela soit viable 🤣🤣

*Merci de ton retour

@Phil69970
Je pense que le problème avec ton code c'est qu'il ne répond pas exactement à ma demande...
J'aimerai ne pas pouvoir enregistrer le doc si F7 n'est pas renseigné SEULEMENT si une autre cellule dans la ligne est renseignée...
Si il n'y a rien dans A8 par exemple c'est normal que F8 soit vide et donc je peux enregistrer mon document vois-tu ?

Enfaite si une cellule bleue est renseignée il faut que les cellules bleues de la ligne soit renseignées aussi afin d'enregistrer le document.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa