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

XL 2019 Message d'erreur si cellules vides

JacquesO

XLDnaute Junior
Bonjour à tous,
Je vous joins le fichier.

C'est une sorte de check liste où, dans la colonne E, les cases deviennent vertes avec mention "OK" en cas de double clic sur la cellule.
Seulement, j'aimerais qu'avant d'enregistrer le fichier (macro du bas), un message d'erreur s'affiche avec mention "TOUTES LES CASES NE SONT PAS COCHEES", empêchant l'enregistrement.

Dans ce cas de figure du fichier, il faut que les cellules E9 à E47 soient remplies.
La difficulté (pour moi) est que j'aimerais que, peu importe le nombre de lignes, que j'intercalerai ou que je supprimerai, le message intervienne si toutes les colonnes ne sont pas vertes avec OK.

Pourriez-vous m'aider ?

Bien cordialement
 

Pièces jointes

  • Fichier.xlsm
    23.6 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je ne vois pas de texte "fin" dans aucune des lignes, faut il que je le rajoute ?
C'est le nom de la cellule, non du texte :


En PJ un essai avec pas mal de modifs :
1- J'ai modifié EFFACER pour tenir compte des insertions/suppression de lignes ... et en simplifiant :
VB:
Sub EFFACER() ' Efface toute la colonne de E9 à la cellule FIN
    Range("E9:E" & [FIN].Row - 1).ClearContents
End Sub
2- J'ai créer la fonction VerifSiRempli qui renvoie 1 si tout est ok, et 0 si tout n'est pas rempli :
Code:
Function VerifSiRempli(x)
    Dim L%, PasFini: L = 9:  PasFini = 0
    For L = 9 To [FIN].Row - 1
        If (Cells(L, "A") <> "" Or Cells(L, "B") <> "") And Cells(L, "E") <> "OK" Then
            PasFini = 1: Exit For
        End If
    Next L
    If PasFini = 1 Then VerifSiRempli = 0 Else VerifSiRempli = 1
End Function
3- J'ai évidemment modifié Workbook_BeforeSave en conséquence :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If VerifSiRempli(0) = 0 Then
        Cancel = True
        MsgBox " Certaines lignes ne sont pas renseignées avec OK."
        Exit Sub
    Else
        Cancel = False
        ActiveWorkbook.Save
    End If
End Sub
4- Ainsi que PassationPDF qui regarde si tout est ok avant d'exporter :
Code:
Dim Chemin As String, NomFichier As String
' Verif si tout est ok avant l'export.
 If VerifSiRempli(0) = 0 Then MsgBox " Demande rejetée." & Chr(10) & "Certaines lignes ne sont pas renseignées avec OK.": Exit Sub
.... suite comme avant
 

Pièces jointes

  • Fichier V3.xlsm
    26.6 KB · Affichages: 2

JacquesO

XLDnaute Junior
Wow, merci beaucoup c'est fantastique comme ça !

Juste une dernière question : Si je souhaite que la cellule E9 soit complétée par un n° article.
Est ce que le code suivant peut suffir ?

If E9 = "" Then MsgBox " Demande rejetée." & Chr(10) & "Compléter le numéro d'article.": Exit Sub

ça n'a pas l'air de fonctionner

Aussi, cette cellule pointée par la flèche rouge est en réalité une liste déroulante à compléter impérativement mais sa position va changer en fonction du nombre de ligne
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
... et si on avait un fichier vraiment représentatif avec des demandes précises ?
1-Donc la liste déroulante se trouverait en A50 dans votre fichier ?
Et elle devrait être rempli pour pouvoir enregistrer ou exporter ?
2- Donc E9 ne contiendrait plus OK mais "un n° article" ?
Donc tout serait à reprendre car une verif sur vide/non vide ne serait plus suffisant ?
 

JacquesO

XLDnaute Junior
Voici le fichier dans son état actuel avec toutes vos modifs;

Il reste deux champs que j'aimerais rendre obligatoire :
- La cellule E6 (si elle est vide, afficher "Compléter le n° de produit"
- La cellule ici A49 avec la liste déroulante où il faut obligatoirement que le contrôleur choisisse son nom dans la liste pour valider
 

Pièces jointes

  • TEST ano.xlsm
    28 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Voici le fichier dans son état actuel avec toutes vos modifs;
Non, il manque la macro dans Thisworkbook.
En PJ la version actualisée dans laquelle j'ai rajouté dans Thisworkbook et PassationPDF :
VB:
 If [E6] = "" Then MsgBox "Validation impossible." & Chr(10) & "Le N° de produit doit être renseigné.": Exit Sub
 If Range("A" & [FIN].Row + 1) = "" Then MsgBox "Validation impossible." & Chr(10) & "Un nom doit être choisi dans la liste.": Exit Sub
 

Pièces jointes

  • TEST ano.xlsm
    29.1 KB · Affichages: 2

piga25

XLDnaute Barbatruc
Bonjour,
Tant que l'on y est, petite amélioration dans la commande double clic pour "OK"
Premier double clic met OK et le second double clic l'enlève (plus facile comme cela pour effacer un OK mal positionné).
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    DL = [FIN].Row - 1
     If Not Intersect(Target, Range("E9:E" & DL)) Is Nothing Then
        Target.Interior.Color = vbGreen
        Target.Value = IIf(Target.Value = "OK", "", "OK")
    End If
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Piga,
Dans ce cas, plus ergonomique, un simple clic :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("E9:E" & [Fin].Row - 1)) Is Nothing Then
        Target.Value = IIf(Target.Value = "OK", "", "OK")
        Cells(Target.Row, Target.Column + 1).Select
    End If
End Sub
NB: je viens de m'apercevoir que le "Target.Interior.Color = vbGreen" ne sert à rien car LeForain à mis les cellules en fond vert, le rose étant fait par MFC. C'est un petit cachotier.
 

JacquesO

XLDnaute Junior
Merci beaucoup à vous deux ! Le fichier est presque parfait grâce à vous !

Juste : Comment enregistrer le fichier vierge ? Car du coup forcément je ne peux enregistrer une version que complétée.

Pour fournir le fichier à l'équipe de contrôle, quand ils l'ouvriront, il sera deja rempli de OK verts et de cases remplies
 

piga25

XLDnaute Barbatruc
Bonjour,
Pour avoir un fichier vierge, il faut l'enregistrer comme modèle (sans donnée). Comme cela à l'ouverture de celui-ci, lorsque vous voudrez l'enregistrer il vous demandera de l'enregistrer sous : "le non que vous désirez" avec extension : sans macro
 

Discussions similaires

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